log4cplus:使用clogger API从多个进程中编写单个日志

时间:2018-02-13 09:21:35

标签: c log4cplus

我在Linux上运行的两个C应用程序使用 log4cplus 1.2.0 C-API

我想在一个记录器上记录两个进程操作。我正在使用AsyncAppender,但由于某种原因,我得到的打印件没有按时间排序。 当我sort文件时,它看起来都很好,但我一直在寻找一个不需要任何文件修改的解决方案。有什么想法吗?

进行1& 2:

#include <log4cplus/clogger.h>

int main()
{
    log4cplus_file_configure("log4cplus_test.properties");
    char msg = "Hello from Process 1"; // On process2 it will be "Hello from Process 2"

    while (1)
    {
        log4cplus_logger_log(NULL, L4CPWARN_LOG_LEVEL, msg);
        sleep(1);
    }
}

属性文件(与两个进程相同):

log4cplus.rootLogger=DEBUG, R

log4cplus.appender.R=log4cplus::AsyncAppender
log4cplus.appender.R.Appender=log4cplus::FileAppender
log4cplus.appender.R.MaxFileSize=500KB
log4cplus.appender.R.MaxBackupIndex=5
log4cplus.appender.R.Appender.File=log4cplus_test.log
log4cplus.appender.R.Appender.layout=log4cplus::PatternLayout
log4cplus.appender.R.Appender.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S,%Q} %-5p %m%n

日志输出:

02/13/18 08:18:49,474.596 WARN Hello from Process 1
02/13/18 08:18:50,474.937 WARN Hello from Process 1
02/13/18 08:18:51,475.395 WARN Hello from Process 1
02/13/18 08:18:52,475.857 WARN Hello from Process 1
02/13/18 08:18:53,476.392 WARN Hello from Process 1
02/13/18 08:18:54,476.885 WARN Hello from Process 1
02/13/18 08:18:55,477.332 WARN Hello from Process 1
02/13/18 08:18:56,477.785 WARN Hello from Process 1
02/13/18 08:18:57,478.267 WARN Hello from Process 1
02/13/18 08:18:58,478.744 WARN Hello from Process 1
8:05,858.108 WARN Hello from Process 2
02/13/18 08:18:06,858.571 WARN Hello from Process 2
02/13/18 08:18:07,859.072 WARN Hello from Process 2
02/13/18 08:18:08,859.560 WARN Hello from Process 2
02/13/18 08:18:09,859.992 WARN Hello from Process 2
02/13/18 08:18:10,860.431 WARN Hello from Process 2
02/13/18 08:18:11,860.877 WARN Hello from Process 2
02/13/18 08:18:12,861.364 WARN Hello from Process 2
02/13/18 08:18:13,861.984 WARN Hello from Process 2
02/13/18 08:18:14,862.504 WARN Hello from Process 2

更新:

当我使用log4cplus.appender.R.Appender=log4cplus::RollingFileAppender代替log4cplus.appender.R.Appender=log4cplus::FileAppender时,它的效果非常好。

1 个答案:

答案 0 :(得分:1)

时间戳是创建log4cplus'事件对象的时间。两个应用程序之间的写入可能不会以与其时间戳顺序完全相同的顺序进行处理。因此,您可以在公共日志记录文件中看到未排序的时间戳。

您可能应该在配置中添加log4cplus.appender.R.UseLockFile=true。然后,Log4cplus将使用文件锁定来在进程之间同步写入日志文件。