4 * Created on: 2014. 2. 7.
11 #include <sys/types.h>
15 #define USE_COLOR_LOG 1
17 static char log_data_buffer[MAX_PRINT_LEN] = {0};
19 static const char* LOG_LV_STR[] = {
21 "\e[1;31m[ ERROR]\e[00m",
22 "\e[1;33m[WARNING]\e[00m",
23 "\e[1;32m[ INFO]\e[00m",
24 "\e[1;36m[ DEBUG]\e[00m",
28 static const char* LOG_LV_STR[] = {
37 //----------------------------------------------------------------------
39 char* timestamp(const char* aFormat)
44 struct tm* m = localtime(&t);
45 static char sz_timestamp[32] = {0};
46 strftime(sz_timestamp, sizeof(sz_timestamp), aFormat, m);
49 //----------------------------------------------------------------------
52 : mLogLevel(0), mLogHandle(0)
56 //----------------------------------------------------------------------
65 //----------------------------------------------------------------------
67 void Logger::set_pid()
71 //----------------------------------------------------------------------
73 Logger* Logger::instance()
75 if (mInstHandle == 0) {
76 mInstHandle = new Logger();
77 atexit(logger_release);
81 //----------------------------------------------------------------------
83 bool Logger::init(const char* aName, int aLogLevel, bool aWithTimestamp, const char* aVersion)
85 mLogLevel = aLogLevel;
88 INFO("logger initialized.");
93 sprintf(path, "%s_%s.log", aName, timestamp("%Y%m%d"));
94 else sprintf(path, "%s.log", aName);
95 if (!(mLogHandle = fopen(path, "a+"))) {
97 printf("fail to open logger [%s].", path);
100 DUMMY("Logger initialized. (Ver %s)", aVersion);
103 //----------------------------------------------------------------------
105 void Logger::hexlog(const char *header, const char *buffer, const int length, const char *aFormat, ...)
107 int offset = 0, i = 0, ll = 0;
109 FILE* output = mLogHandle;
111 memset(log_data_buffer, 0, MAX_PRINT_LEN);
114 va_start(args, aFormat);
115 ll = vsnprintf(log_data_buffer, MAX_PRINT_LEN-1, aFormat, args);
118 if (ll > MAX_PRINT_LEN - 1) {
119 ll = MAX_PRINT_LEN - 1;
121 fprintf(output, "%s\n", log_data_buffer);
123 fprintf(output, "HEX DUMP : [%s]-[%d]\n", header, length);
124 fprintf(output, "-----------------------------------------------------------------------------\n");
125 while (offset < length) {
126 char *tmp = (char*) (buffer + offset);
127 int tmp_len = (offset + 16 < length) ? 16 : (length - offset);
129 fprintf(output, "%08X: ", offset);
130 for (i = 0; i < tmp_len; i++) {
131 if (i == 8) fprintf(output, " ");
132 fprintf(output, "%02X ", (unsigned char) tmp[i]);
135 for (i = 0; i <= (16 - tmp_len) * 3; i++)
136 fprintf(output, " ");
137 if (tmp_len < 9) fprintf(output, " ");
139 for (i = 0; i < tmp_len; i++)
140 fprintf(output, "%c", (tmp[i] >= 0x20 && tmp[i] <= 0x7E) ? tmp[i] : '.');
141 offset += 16; fprintf(output, "\n");
143 if (offset == 0) fprintf(output, "%08X: ", offset);
144 fprintf(output, "-----------------------------------------------------------------------------\n");
147 //----------------------------------------------------------------------
149 void Logger::log(const char* aFormat, ...)
151 memset(log_data_buffer, 0, MAX_PRINT_LEN);
154 va_start(args, aFormat);
155 vsnprintf(log_data_buffer, MAX_PRINT_LEN-1, aFormat, args);
158 fprintf(mLogHandle, "%s\n", log_data_buffer);
161 //----------------------------------------------------------------------
163 void Logger::log(int aLogLevel, const char* aFormat, ...)
165 #ifndef _DISABLE_LOGGER
166 if (aLogLevel > mLogLevel || mLogHandle == 0) {
167 //printf("mLogHandle : %p, mLogLevel : %d, aLogLevel : %d\n", mLogHandle, mLogLevel, aLogLevel);
171 memset(log_data_buffer, 0, MAX_PRINT_LEN);
173 va_start(args, aFormat);
174 vsnprintf(log_data_buffer, MAX_PRINT_LEN-1, aFormat, args);
177 fprintf(mLogHandle, "[%s]%s[%d] %s\n", timestamp(DEFAULT_TIMESTAMP_FORMAT), LOG_LV_STR[aLogLevel], mPid, log_data_buffer);
181 //----------------------------------------------------------------------
183 Logger* Logger::mInstHandle = 0;
184 //----------------------------------------------------------------------