【问题标题】:Can Log4Net Delete Log Files Automatically? [duplicate]Log4Net 可以自动删除日志文件吗? [复制]
【发布时间】:2011-05-14 16:09:22
【问题描述】:

我在用 C# 编写的 Windows 服务程序中使用 log4net RollingFileAppender。日志目录中文件的数量和大小增长过快,需要清理。配置如下:

<appender name="Rolling Log" type="log4net.Appender.RollingFileAppender">
<file value="..\logs\MyProgram.%cs{instanceName}.log" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<datePattern value=".yyyy-MM-dd.lo\g" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="150MB" />
<layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="%date [%-5level] %property{remoteUser} [%threadIdentity] %type{1}.%method - %message%newline%exception" />
</layout>

我只想保留 30 天的日志。如何配置 log4net 以自动删除日志?如果不能通过 log4net 获得,我有什么解决方案?

提前谢谢你。

【问题讨论】:

    标签: c# .net logging log4j log4net


    【解决方案1】:

    这是关于 SO 的另一个问题,它问的问题基本相同: Log4Net: set Max backup files on RollingFileAppender with rolling Date

    共识是 log4net 不直接支持它。一位发帖人说它已经在 log4net 的源代码存储库中实现了,但还没有发布。另一张海报展示了一些他用来定期清理旧文件的代码。

    【讨论】:

    • 这个选项对我来说很有吸引力,因为它似乎比覆盖 RollingFileAppender 更容易。现在我计划添加一个日志维护作业,由 Quartz.Net 等调度程序触发。
    • 我认为@jeff 在他的回答中有一个很好的解决方案:stackoverflow.com/questions/95286/…。本质上是在应用程序启动时检查是否该删除一个文件(或多个文件)。如果您的应用程序运行时间不太长(即一次不超过 30 天),那么他的方法可能就足够了。
    【解决方案2】:

    我很确定你不能使用现有的 appender,尽管我无法确认。

    但是,我看到了两个选项:

    1. 创建您自己的附加程序,子类化 RollingFileAppender(或者,如果您想要更多控制,子类化 FileAppender)。然后更改您的配置文件以使用该附加程序(更改附加程序元素)。
    2. 创建一个 .bat 文件,删除超过 x 天的文件(请参阅:Batch file to delete files older than N days)。然后在 Windows (http://support.microsoft.com/kb/308569) 中创建一个运行此 bat 文件的任务,例如每天。

    【讨论】:

    • 我更喜欢第一种方法。第二种方法似乎比我目前的流程需要更多的部署,而且不容易跟踪。
    【解决方案3】:

    This 应该提供一些帮助。查找 RollingFileAppender 部分

    【讨论】:

    • 他已经在使用 RollingFileAppender,并且本文档中没有关于您是否可以这样做的信息。
    • 没有什么可做的。
    猜你喜欢
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多