使用Log4Cplus从多个进程记录到同一日志文件(Windows)

时间:2015-05-27 23:30:37

标签: log4cplus

我们的一些客户使用我们的应用程序的方式是安装到网络驱动器上,然后每个用户在其本地计算机上执行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会起作用吗?如果是这样,你能举例说明如何使用它吗?我找不到任何。

谢谢!

1 个答案:

答案 0 :(得分:2)

这是一个问题Windows以及fstream及其streambuf如何打开文件。来自问题#167

  

基本上,问题是底层的Win32文件HANDLE未打开FILE_SHARE_DELETE标志。除了共享删除之外,此标志允许重命名具有句柄打开的文件。

所以,最重要的是,它是可以解决的,但是对于streambuf方面的所有必要支持,从无到有创建自己的codecvt非常困难,我从未完成它。