使用 Log4Cplus 从多个进程记录到同一个日志文件 (Windows)
Logging from multiple processes to same log file with Log4Cplus (Windows)
我们的一些客户使用我们的应用程序的方式是安装到网络驱动器上,然后每个用户在他们的本地计算机上执行 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 with FILE_SHARE_DELETE
flag. This flag, beside shared delete, allows renaming files that have handles open to them.
所以,最重要的是它是可以解决的,但是从无到有地创建自己的 streambuf
以及对 codecvt
方面的所有必要支持是如此困难,以至于我从未完成它。
我们的一些客户使用我们的应用程序的方式是安装到网络驱动器上,然后每个用户在他们的本地计算机上执行 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
方面的所有必要支持是如此困难,以至于我从未完成它。