3

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

谢谢!

4

1 回答 1

2

这是 Windowsfstream及其streambuf打开文件的方式和方式的问题。从问题#167开始:

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

所以,底线是它是可以解决的,但是streambuf在对 facet 的所有必要支持的情况下从无到有创建自己的东西codecvt是如此困难,以至于我从未完成它。

于 2015-05-29T05:08:41.967 回答