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

log4cplus: use clogger API to write a single log from multiple processes

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

我想在一个记录器上记录两个进程操作。我正在使用 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 时,它工作得很好。

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

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