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

标签 c log4cplus

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

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

yield 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的事件对象创建的时间。两个应用程序之间的写入可能不会按照与其时间戳的顺序完全相同的顺序进行处理。因此,您可以在公共(public)日志文件中看到未排序的时间戳。

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

关于c - log4cplus:使用 clogger API 从多个进程写入单个日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48763295/

相关文章:

log4cplus不打印文件名和行号

c - linux 内核系统调用服务例程的源代码在哪里?

c++ - CUDA:堆栈和堆

c - 我做错了什么或者这是 Go 的 C 编译器中的错误吗?

c - 如何用C语言仅使用if语句编写3个整数升序算法?

c - 使用 gcc 编译 C 程序

c++ - 在 QT4 应用程序中包含静态外部库

c++ - Log4Cplus加载配置文件

c++ - 帮助配置log4cplus配置文件(properties文件)

c++ - 如何在共享库中链接 log4cplus.a?