4 * Created on: 2014. 2. 7.
11 #include <sys/types.h>
14 //----------------------------------------------------------------------
16 #define USE_COLOR_LOG 1
18 static char log_data_buffer[MAX_PRINT_LEN] = {0};
20 static const char* LOG_LV_STR[] = {
22 "\e[1;31m[ ERROR]\e[00m",
23 "\e[1;33m[WARNING]\e[00m",
24 "\e[1;32m[ INFO]\e[00m",
25 "\e[1;36m[ DEBUG]\e[00m",
29 static const char* LOG_LV_STR[] = {
38 //----------------------------------------------------------------------
40 char* timestamp(const char* aFormat)
45 struct tm* m = localtime(&t);
46 static char sz_timestamp[32] = {0};
47 strftime(sz_timestamp, sizeof(sz_timestamp), aFormat, m);
50 //----------------------------------------------------------------------
53 : mLogLevel(0), mLogHandle(0)
57 //----------------------------------------------------------------------
66 //----------------------------------------------------------------------
68 void Logger::set_pid()
72 //----------------------------------------------------------------------
74 Logger* Logger::instance()
76 if (mInstHandle == 0) {
77 mInstHandle = new Logger();
78 atexit(logger_release);
82 //----------------------------------------------------------------------
84 bool Logger::init(const char* aName, int aLogLevel, bool aWithTimestamp)
86 if (access("/tmp/.debug_on", F_OK) == 0) {
87 FILE *fp = fopen("/tmp/.debug_on", "r");
90 fscanf(fp, "%d", &lv);
91 if (Logger::NONE < lv && lv <= Logger::LOG) {
95 mLogLevel = aLogLevel;
100 mLogLevel = aLogLevel;
105 INFO("logger initialized.");
108 char path[256] = {0};
110 sprintf(path, "%s_%s.log", aName, timestamp("%Y%m%d"));
111 else sprintf(path, "%s.log", aName);
112 if (!(mLogHandle = fopen(path, "a+"))) {
114 printf("fail to open logger [%s].", path);
118 if (mLogLevel >= Logger::INFO) {
119 #if defined(_MAJOR) && defined(_MINOR)
120 DUMMY("Logger initialized. (Ver %d.%d)", _MAJOR, _MINOR);
122 DUMMY("Logger initialized.");
127 //----------------------------------------------------------------------
129 void Logger::hexlog(const char *header, const char *buffer, const int length, const char *aFormat, ...)
131 int offset = 0, i = 0, ll = 0;
133 FILE* output = mLogHandle;
135 memset(log_data_buffer, 0, MAX_PRINT_LEN);
138 va_start(args, aFormat);
139 ll = vsnprintf(log_data_buffer, MAX_PRINT_LEN-1, aFormat, args);
142 if (ll > MAX_PRINT_LEN - 1) {
143 ll = MAX_PRINT_LEN - 1;
145 fprintf(output, "%s\n", log_data_buffer);
147 fprintf(output, "HEX DUMP : [%s]-[%d]\n", header, length);
148 fprintf(output, "-----------------------------------------------------------------------------\n");
149 while (offset < length) {
150 char *tmp = (char*) (buffer + offset);
151 int tmp_len = (offset + 16 < length) ? 16 : (length - offset);
153 fprintf(output, "%08X: ", offset);
154 for (i = 0; i < tmp_len; i++) {
155 if (i == 8) fprintf(output, " ");
156 fprintf(output, "%02X ", (unsigned char) tmp[i]);
159 for (i = 0; i <= (16 - tmp_len) * 3; i++)
160 fprintf(output, " ");
161 if (tmp_len < 9) fprintf(output, " ");
163 for (i = 0; i < tmp_len; i++)
164 fprintf(output, "%c", (tmp[i] >= 0x20 && tmp[i] <= 0x7E) ? tmp[i] : '.');
165 offset += 16; fprintf(output, "\n");
167 if (offset == 0) fprintf(output, "%08X: ", offset);
168 fprintf(output, "-----------------------------------------------------------------------------\n");
171 //----------------------------------------------------------------------
173 void Logger::log(const char* aFormat, ...)
175 memset(log_data_buffer, 0, MAX_PRINT_LEN);
178 va_start(args, aFormat);
179 vsnprintf(log_data_buffer, MAX_PRINT_LEN-1, aFormat, args);
182 fprintf(mLogHandle, "%s\n", log_data_buffer);
185 //----------------------------------------------------------------------
187 void Logger::log(int aLogLevel, const char* aFormat, ...)
189 #ifndef _DISABLE_LOGGER
190 if (aLogLevel > mLogLevel || mLogHandle == 0) {
191 //printf("mLogHandle : %p, mLogLevel : %d, aLogLevel : %d\n", mLogHandle, mLogLevel, aLogLevel);
195 memset(log_data_buffer, 0, MAX_PRINT_LEN);
197 va_start(args, aFormat);
198 vsnprintf(log_data_buffer, MAX_PRINT_LEN-1, aFormat, args);
201 fprintf(mLogHandle, "[%s]%s[%d] %s\n", timestamp(DEFAULT_TIMESTAMP_FORMAT), LOG_LV_STR[aLogLevel], mPid, log_data_buffer);
205 //----------------------------------------------------------------------
207 Logger* Logger::mInstHandle = 0;
208 //----------------------------------------------------------------------