我们的一些客户使用我们的应用程序的方式是将其安装到网络驱动器上,然后每个用户在其本地计算机上执行 exe。因此,我们有多个进程写入同一个日志文件。我已经使用一些测试程序测试了此配置,但收到此错误。
log4cplus:ERROR Failed to rename file from ../Log.log to ../Log.log.1; error 13
我假设这是由于当进程记录器之一尝试重命名该文件时写入该文件。
这是我的属性文件。
log4cplus.logger.TESTLOGGER=ALL, TESTAPPENDER
log4cplus.appender.TESTAPPENDER=log4cplus::RollingFileAppender
log4cplus.appender.TESTAPPENDER.CreateDirs=true
log4cplus.appender.TESTAPPENDER.File=../Log.log
log4cplus.appender.TESTAPPENDER.UseLockFile=true
log4cplus.appender.TESTAPPENDER.MaxFileSize=1MB
log4cplus.appender.TESTAPPENDER.MaxBackupIndex=10
我的问题是 Log4Cplus 是否有办法处理这个问题,或者这只是一个通用的日志记录禁忌?使用 AsyncAppender 可以吗?如果是这样,您能举例说明如何使用它吗?我找不到。
谢谢!
最佳答案
这是 Windows 以及 fstream
及其 streambuf
如何打开文件的问题。来自问题#167 :
Basically, the problem is that the underlying Win32 file
HANDLE
is not open withFILE_SHARE_DELETE
flag. This flag, beside shared delete, allows renaming files that have handles open to them.
所以,底线是它是可以解决的,但是从无到有地创建自己的 streambuf
并为 codecvt
方面提供所有必要的支持是如此困难,以至于我从未完成它。
关于log4cplus - 使用 Log4Cplus (Windows) 从多个进程记录到同一日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30494838/