ithewei 6 年之前
父節點
當前提交
331e0bfce2
共有 2 個文件被更改,包括 19 次插入19 次删除
  1. 18 18
      hlog.cpp
  2. 1 1
      hlog.h

+ 18 - 18
hlog.cpp

@@ -13,11 +13,7 @@ static char     s_logfile[256] = DEFAULT_LOG_FILE;
 static int      s_loglevel = DEFAULT_LOG_LEVEL;
 static bool     s_logcolor = false;
 static int      s_remain_days = DEFAULT_LOG_REMAIN_DAYS;
-
-static FILE*    s_logfp = NULL;
 static char     s_logbuf[LOG_BUFSIZE];
-static char     s_cur_logfile[256] = {0};
-static time_t   s_last_logfile_ts = 0;
 static std::mutex s_mutex;
 
 static void ts_logfile(time_t ts, char* buf, int len) {
@@ -30,29 +26,33 @@ static void ts_logfile(time_t ts, char* buf, int len) {
 }
 
 static FILE* shift_logfile() {
-    if (s_logfp == NULL) {
-        hlog_set_file(s_logfile);
-    }
+    static FILE*    s_logfp = NULL;
+    static char     s_cur_logfile[256] = {0};
+    static time_t   s_last_logfile_ts = time(NULL);
+
     time_t ts_now = time(NULL);
-    if (ts_now / SECONDS_PER_DAY - s_last_logfile_ts / SECONDS_PER_DAY) {
-        // shift every day
-        ts_logfile(ts_now, s_cur_logfile, sizeof(s_cur_logfile));
+    int interval_days = ts_now / SECONDS_PER_DAY - s_last_logfile_ts / SECONDS_PER_DAY;
+    if (s_logfp == NULL || interval_days > 0) {
         if (s_logfp) {
             fclose(s_logfp);
             s_logfp = NULL;
         }
-        s_logfp = fopen(s_cur_logfile, "a");
-        s_last_logfile_ts = ts_now;
-        // remove logfile before s_remain_days
-        if (s_remain_days > 0) {
-            time_t ts_rm  = ts_now - s_remain_days * SECONDS_PER_DAY;
+        // remove [today-interval_days, today-s_remain_days] logfile
+        if (interval_days >= s_remain_days) {
             char rm_logfile[256] = {0};
-            ts_logfile(ts_rm, rm_logfile, sizeof(rm_logfile));
-            remove(rm_logfile);
+            for (int i = interval_days; i >= s_remain_days; --i) {
+                time_t ts_rm  = ts_now - i * SECONDS_PER_DAY;
+                ts_logfile(ts_rm, rm_logfile, sizeof(rm_logfile));
+                remove(rm_logfile);
+            }
         }
+        // new today logfile
+        ts_logfile(ts_now, s_cur_logfile, sizeof(s_cur_logfile));
+        s_logfp = fopen(s_cur_logfile, "a"); // note: append-mode for multi-processes
+        s_last_logfile_ts = ts_now;
     }
     else {
-        // reopen if too big
+        // rewrite if too big
         if (s_logfp && ftell(s_logfp) > MAX_LOG_FILESIZE) {
             fclose(s_logfp);
             s_logfp = NULL;

+ 1 - 1
hlog.h

@@ -36,7 +36,7 @@ enum LOG_LEVEL {
     LOG_LEVEL_SILENT
 };
 
-#define DEFAULT_LOG_FILE            "default.log"
+#define DEFAULT_LOG_FILE            "default"
 #define DEFAULT_LOG_LEVEL           LOG_LEVEL_VERBOSE
 #define DEFAULT_LOG_REMAIN_DAYS     1
 #define LOG_BUFSIZE                 (1<<13)  // 8k