kamikyo 2013-11-04 02:38 采纳率: 0%
浏览 2300

log4cxx RollingFileAppender 不产生新日志文件的问题

我的情况是这样的。
用log4cxx的RollingFileAppender,当日志文件达到一定大小之后生成新的日志文件并删除旧的日志文件。
可是当log4cxx尝试删除旧的日志文件时,它如果发现该文件被占用(如正在被复制,移动),那么log4cxx将不会删除这个旧的日志文件,他也不会生成新的日志文件,而是把日志内容持续写入当前最新的那个日志文件中。如果旧文件被占用的时间较长,且该期间产生的日志内容又比较多时,那么就有可能产生一个体积足够庞大的日志文件。等到被占用的旧日志文件被释放时,log4cxx才会去删除它,再生成一个新的日志文件。

同样的情况,log4net的处理就聪明了很多。他会产生一个同名但扩展名为DeletePending的文件供别的程序(正在复制,移动)使用,旧文件会被删除,新文件会被创建。等到别的程序操作完成之后log4net会自动将DeletePending文件删除。

我想问的是,log4cxx是否可以通过某些配置来达到和log4net同样的效果。我刚接触log4cxx不久,很多地方不明白,还请前辈们多教导教导,在此谢过了。

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-03-09 12:45
    关注

    该回答引用ChatGPT

    您提到的问题是常见的,即当日志文件被占用时,log4cxx无法生成新的日志文件并删除旧的日志文件。目前,log4cxx不提供与log4net相同的DeletePending文件的功能。不过,您可以通过一些配置和代码来实现类似的效果。以下是几种可能的解决方案:

    • 配置日志文件滚动策略
      您可以配置日志文件滚动策略,以便在旧的日志文件被占用时不会创建新的日志文件。例如,您可以使用基于时间的滚动策略而不是基于文件大小的策略,以便在旧的日志文件被占用时等待一段时间,然后再创建新的日志文件。您可以使用log4cxx的TimeBasedRollingPolicy,它允许您按时间滚动日志文件,并配置文件保留时间和格式。
    • 代码实现
      您可以通过代码实现DeletePending文件的功能。例如,您可以在log4cxx的RollingFileAppender类中覆盖RollOver()方法,并在其中检查旧日志文件是否被占用。如果旧日志文件被占用,则可以创建一个同名但扩展名为DeletePending的文件,将日志写入该文件,然后在旧文件被释放时删除它。当旧文件被删除时,您可以在RollOver()方法中检查是否存在DeletePending文件,如果存在则将其重命名为新的日志文件。
    • 使用其他日志库
      如果您需要DeletePending文件的功能,您可以考虑使用其他日志库,例如log4net或NLog,它们提供了类似的功能。

    总之,log4cxx目前不支持DeletePending文件的功能,但是您可以使用其他方法来解决这个问题。希望这些解决方案可以帮助您解决问题。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题