我们的一些客户使用我们的应用程序的方式是安装到网络驱动器上,然后每个用户在其本地计算机上执行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会起作用吗?如果是这样,你能举例说明如何使用它吗?我找不到任何。
谢谢!
答案 0 :(得分:2)
这是一个问题Windows以及fstream
及其streambuf
如何打开文件。来自问题#167:
基本上,问题是底层的Win32文件
HANDLE
未打开FILE_SHARE_DELETE
标志。除了共享删除之外,此标志允许重命名具有句柄打开的文件。
所以,最重要的是,它是可以解决的,但是对于streambuf
方面的所有必要支持,从无到有创建自己的codecvt
非常困难,我从未完成它。