【问题标题】:How to create new log4net every day if service running continuously from many days如果服务连续运行多天,如何每天创建新的 log4net
【发布时间】:2018-01-30 13:52:43
【问题描述】:

我已经在我的 Windows 服务中实现了log4net,它按预期工作,并根据配置设置创建了具有当前日期的新文件。

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" />
  </configSections>
  <log4net>
    <appender name="file" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="Logs\log-%utcdate{yyyy-MM-dd}.txt" />
      <staticLogFileName value="false" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <maxSizeRollBackups value="5" />
      <maximumFileSize value="5MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
      <param name="DatePattern" value="dd.MM.yyyy'.log'" />
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="file" />
    </root>
  </log4net>  

这里的问题是,如果我的服务从过去 2 天开始运行,那么它不会创建具有当前日期的新文件,它会保留 2 天旧文件的引用并将日志添加到旧文件中,而不是为那一天创建新文件.
记录器代码就像

public static class Logger
    {
        public static log4net.ILog Log { get; set; }

        static Logger()
        {
            Log = log4net.LogManager.GetLogger(typeof(System.Reflection.MethodBase));
        }

        public static void Trace(string message)
        {
            Log.Info(message);
        }

        public static void LogException(Exception ex)
        {
            StringBuilder builer = new StringBuilder();
            builer.AppendLine("=============Exception===========");
            builer.AppendLine("Exception: {0}");
            builer.AppendLine("StackTrack: {1}");
            Log.ErrorFormat(builer.ToString(), ex.Message, ex.StackTrace);
        }
    }  

要将信息记录到日志文件中,我正在使用代码

Logger.Trace("Hello");  

我需要什么代码级别的更改,每天创建新的日志文件,即使服务/桌面应用程序从过去很多天开始连续运行?

【问题讨论】:

标签: c# log4net log4net-appender


【解决方案1】:

您的配置同时具有&lt;staticLogFileName value="false" /&gt;&lt;staticLogFileName value="true" /&gt;,这可以解释为什么它不能正确滚动。

我建议你删除&lt;staticLogFileName value="true" /&gt;并更改文件和DatePattern如下:

<file value="Logs\log-" />
...
<param name="DatePattern" value="yyyy-MM-dd'.log'" />

如果 staticLogFileName 为 false,则日期字符串将附加到基本文件名以给出例如:

Logs\log-2018-01-30.log

我会注意到,log4net会在您实际记录消息时检查它是否需要滚动日志文件,因此如果您不经常记录,它可能不会在您记录消息的那一刻滚动第二天开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    相关资源
    最近更新 更多