logging - 让 log4cpp 在执行期间创建一个新的日志文件

标签 logging file-descriptor log4cpp

我目前在 Linux RHEL 平台上使用 Log4cpp 进行日志记录。

我不断地记录守护程序应用程序。

我的问题是 log4cpp 生成的日志文件可能随时被删除(使用 rm 命令、logrotate 等...),尽管文件被删除,但文件描述符仍然由守护进程打开。 Log4cpp 不断尝试登录该文件,但没有添加任何内容,新的日志行会丢失,直到我手动创建新的日志文件。

我通过在 logrotate 配置中使用 SIGHUP 信号解决了 logrotate 问题,以便守护进程在每次日志轮转时重新启动 log4cpp 实例。但我希望有一种更聪明的方法,因为新用户在清除日志目录后不会向我的守护进程发送 SIGHUP,并且稍后会注意到守护进程没有记录日志。

有什么想法吗?

最佳答案

您可以使用 RollingFileAppender 而不是使用 logrotate 来更改输出文件。 log4cpp的

log4cpp.properties 的示例可能是:

log4cpp.rootCategory=DEBUG, rolling
log4cpp.appender.rolling=RollingFileAppender
log4cpp.appender.rolling.maxFileSize=1048576
log4cpp.appender.rolling.maxBackupIndex=5
log4cpp.appender.rolling.fileName=output.log 
log4cpp.appender.rolling.layout=PatternLayout 
log4cpp.appender.rolling.layout.ConversionPattern=%d [%p] - %m%n

关于logging - 让 log4cpp 在执行期间创建一个新的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26232217/

相关文章:

c++ - 如何在 log4cpp 日志中附加 Windows 用户名

php - 如何在 PHP 中查看 AWS Worker 的登录信息?

javascript - PM2 - 如何从日志文件名中删除标识符

c++ - 如何在不创建新 int 的情况下设计 RAII 文件描述符

Node.js FIFO - 写入文件描述符时进程挂起

c++ - log4cpp(Linux): can't write message into logfile

C++ 日志库设置

python - 使用多处理记录

java - 如何从核心项目登录

c - 在命名管道 (FIFO) 上选择会导致无限循环