我的情况是这样的。
用log4cxx的RollingFileAppender,当日志文件达到一定大小之后生成新的日志文件并删除旧的日志文件。
可是当log4cxx尝试删除旧的日志文件时,它如果发现该文件被占用(如正在被复制,移动),那么log4cxx将不会删除这个旧的日志文件,他也不会生成新的日志文件,而是把日志内容持续写入当前最新的那个日志文件中。如果旧文件被占用的时间较长,且该期间产生的日志内容又比较多时,那么就有可能产生一个体积足够庞大的日志文件。等到被占用的旧日志文件被释放时,log4cxx才会去删除它,再生成一个新的日志文件。
同样的情况,log4net的处理就聪明了很多。他会产生一个同名但扩展名为DeletePending的文件供别的程序(正在复制,移动)使用,旧文件会被删除,新文件会被创建。等到别的程序操作完成之后log4net会自动将DeletePending文件删除。
我想问的是,log4cxx是否可以通过某些配置来达到和log4net同样的效果。我刚接触log4cxx不久,很多地方不明白,还请前辈们多教导教导,在此谢过了。
该回答引用ChatGPT
您提到的问题是常见的,即当日志文件被占用时,log4cxx无法生成新的日志文件并删除旧的日志文件。目前,log4cxx不提供与log4net相同的DeletePending文件的功能。不过,您可以通过一些配置和代码来实现类似的效果。以下是几种可能的解决方案:
总之,log4cxx目前不支持DeletePending文件的功能,但是您可以使用其他方法来解决这个问题。希望这些解决方案可以帮助您解决问题。