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

标签 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 可以吗?如果是这样,您能举例说明如何使用它吗?我找不到。

谢谢!

最佳答案

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

关于log4cplus - 使用 Log4Cplus (Windows) 从多个进程记录到同一日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30494838/

相关文章:

c++ - 如何使用 log4cplus 检索日志条目?

c++ - 访问冲突读取位置-未终止的字符串(不可读的内存)

c++ - 如何在DLL中使用Log4Cplus

logging - log4cplus:DailyRollingFileAppender 配置/MaxBackupIndex 不工作

makefile - 如何指定./configure的参数 '--includedir'和 '--libdir'给cmake

c++ - log4cplus: ERROR 在默认上下文被销毁后重新初始化默认上下文

sockets - Log4cplus:SocketAppender 是否有加密选项?

log4cplus - 如何让 log4cplus 将不同级别记录到文件和标准输出?

c++ - fork() 之后 log4cplus 会发生什么?