Browse Source

replace snprintf with format

ithewei 4 năm trước cách đây
mục cha
commit
cbc6056b50
2 tập tin đã thay đổi với 17 bổ sung12 xóa
  1. 13 9
      base/hlog.c
  2. 4 3
      base/hlog.h

+ 13 - 9
base/hlog.c

@@ -60,8 +60,9 @@ static void logger_init(logger_t* logger) {
 
     logger->level = DEFAULT_LOG_LEVEL;
     logger->enable_color = 0;
-    logger->format[0] = '\0';
-    // strncpy(logger->format, DEFAULT_LOG_FORMAT, sizeof(logger->format));
+    // NOTE: format is faster 6% than snprintf
+    // logger->format[0] = '\0';
+    strncpy(logger->format, DEFAULT_LOG_FORMAT, sizeof(logger->format) - 1);
 
     logger->fp_ = NULL;
     logger->max_filesize = DEFAULT_LOG_MAX_FILESIZE;
@@ -134,7 +135,7 @@ void logger_set_level_by_str(logger_t* logger, const char* szLoglevel) {
 
 void logger_set_format(logger_t* logger, const char* format) {
     if (format) {
-        strncpy(logger->format, format, sizeof(logger->format));
+        strncpy(logger->format, format, sizeof(logger->format) - 1);
     } else {
         logger->format[0] = '\0';
     }
@@ -154,7 +155,7 @@ void logger_enable_color(logger_t* logger, int on) {
 }
 
 void logger_set_file(logger_t* logger, const char* filepath) {
-    strncpy(logger->filepath, filepath, sizeof(logger->filepath));
+    strncpy(logger->filepath, filepath, sizeof(logger->filepath) - 1);
     // remove suffix .log
     char* suffix = strrchr(logger->filepath, '.');
     if (suffix && strcmp(suffix, ".log") == 0) {
@@ -300,7 +301,7 @@ int logger_print(logger_t* logger, int level, const char* fmt, ...) {
     if (level < logger->level)
         return -10;
 
-    int year,month,day,hour,min,sec,ms;
+    int year,month,day,hour,min,sec,us;
 #ifdef _WIN32
     SYSTEMTIME tm;
     GetLocalTime(&tm);
@@ -310,7 +311,7 @@ int logger_print(logger_t* logger, int level, const char* fmt, ...) {
     hour     = tm.wHour;
     min      = tm.wMinute;
     sec      = tm.wSecond;
-    ms       = tm.wMilliseconds;
+    us       = tm.wMilliseconds * 1000;
 #else
     struct timeval tv;
     struct tm* tm = NULL;
@@ -323,7 +324,7 @@ int logger_print(logger_t* logger, int level, const char* fmt, ...) {
     hour     = tm->tm_hour;
     min      = tm->tm_min;
     sec      = tm->tm_sec;
-    ms       = tv.tv_usec/1000;
+    us       = tv.tv_usec;
 #endif
 
     const char* pcolor = "";
@@ -370,8 +371,11 @@ int logger_print(logger_t* logger, int level, const char* fmt, ...) {
                 case 'S':
                     len += i2a(sec, buf + len, 2);
                     break;
+                case 'z':
+                    len += i2a(us/1000, buf + len, 3);
+                    break;
                 case 'Z':
-                    len += i2a(ms, buf + len, 3);
+                    len += i2a(us, buf + len, 6);
                     break;
                 case 'l':
                     buf[len++] = *plevel;
@@ -401,7 +405,7 @@ int logger_print(logger_t* logger, int level, const char* fmt, ...) {
         }
     } else {
         len += snprintf(buf + len, bufsize - len, "%04d-%02d-%02d %02d:%02d:%02d.%03d %s ",
-            year, month, day, hour, min, sec, ms,
+            year, month, day, hour, min, sec, us/1000,
             plevel);
 
         va_list ap;

+ 4 - 3
base/hlog.h

@@ -63,7 +63,7 @@ typedef enum {
 
 #define DEFAULT_LOG_FILE            "libhv"
 #define DEFAULT_LOG_LEVEL           LOG_LEVEL_INFO
-#define DEFAULT_LOG_FORMAT          "%y-%m-%d %H:%M:%S.%Z %L %s"
+#define DEFAULT_LOG_FORMAT          "%y-%m-%d %H:%M:%S.%z %L %s"
 #define DEFAULT_LOG_REMAIN_DAYS     1
 #define DEFAULT_LOG_MAX_BUFSIZE     (1<<14)  // 16k
 #define DEFAULT_LOG_MAX_FILESIZE    (1<<24)  // 16M
@@ -87,7 +87,7 @@ HV_EXPORT void logger_set_level(logger_t* logger, int level);
 // level = [VERBOSE,DEBUG,INFO,WARN,ERROR,FATAL,SILENT]
 HV_EXPORT void logger_set_level_by_str(logger_t* logger, const char* level);
 /*
- * format  = "%y-%m-%d %H:%M:%S.%Z %L %s"
+ * format  = "%y-%m-%d %H:%M:%S.%z %L %s"
  * message = "2020-01-02 03:04:05.067 DEBUG message"
  * %y year
  * %m month
@@ -95,7 +95,8 @@ HV_EXPORT void logger_set_level_by_str(logger_t* logger, const char* level);
  * %H hour
  * %M min
  * %S sec
- * %Z ms
+ * %z ms
+ * %Z us
  * %l First character of level
  * %L All characters of level
  * %s message