簡體   English   中英

如果服務從許多天開始連續運行,如何每天創建新的log4net

[英]How to create new log4net every day if service running continuously from many days

我已經在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");  

我需要什么代碼級更改才能創建新的日志文件,即使服務/桌面應用程序從最近幾天開始連續運行?

您的配置同時具有<staticLogFileName value="false" /><staticLogFileName value="true" /> ,這可以解釋為什么它無法正確滾動。

我建議您刪除<staticLogFileName value="true" />並按如下所示更改文件和DatePattern:

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

如果staticLogFileName為false,則日期字符串將附加到基本文件名中,以給出例如:

Logs\log-2018-01-30.log

但是,我要指出的是,log4net 在您實際記錄一條消息時才檢查是否需要滾動日志文件,因此,如果您不經常記錄日志,則它可能不會在第二天開始時滾動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM