我目前在Linux RHEL平台上使用Log4cpp进行日志记录。
我不断地记录守护程序应用程序。
我的问题是,log4cpp生成的日志文件可能随时被删除(使用rm命令、logrotate等…),尽管文件被删除,但文件描述符仍然由守护进程打开。Log4cpp一直试图登录到该文件,但没有添加任何内容,新的日志行会丢失,直到我手动创建一个新的日志文件。
我通过在logrotate配置中使用SIGHUP信号来解决logrotate问题,以便守护进程在每次日志旋转时重新初始化log4cpp实例。但我希望有一种更聪明的方式,因为新用户在刷出日志目录后不会向我的守护进程发送SIGHUP,而且很晚就会注意到守护进程没有进行日志记录。
有什么想法吗?
您可以使用log4cpp 的RollingFileAppender,而不是使用logrotate来更改输出文件
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