使用 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 方面的所有必要支持是如此困难,以至于我从未完成它。