【问题标题】:Changing log4net file name at runtime without changing the appender在运行时更改 log4net 文件名而不更改附加程序
【发布时间】:2017-12-21 17:56:58
【问题描述】:

我想在运行时更改我的日志名称而不更改附加程序。基本上,一旦它到达一天中的某个设定时间,我希望能够使用不同的文件。

这是我的 appender 的样子:

<appender name="info" type="log4net.Appender.RollingFileAppender">
   <file value="logs\" />
   <datePattern value="yyyyMMdd'_INFO.log'" />
   <staticLogFileName value="false" />
   <appendToFile value="true" />
   <rollingStyle value="Composite" />
   <maxSizeRollBackups value="10" />
   <maximumFileSize value="10MB" />
   <layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%newline[%date]-%level-%logger[%M]- Linea:%L - %message%newline"/>
   </layout>
   <filter type="log4net.Filter.LevelRangeFilter">
     <param name="LevelMin" value="INFO"/>
     <param name="LevelMax" value="INFO"/>
   </filter>
 </appender>

这是我遍历附加程序的函数:

   public void SetLogFile(string fileName)
   {
       foreach (var appender in log.Logger.Repository.GetAppenders())
       {
           try
           {
               ((log4net.Appender.FileAppender)appender).File = fileName;
               ((log4net.Appender.FileAppender)appender).ActivateOptions();
           }
           catch (Exception ex)
           {
               Console.WriteLine(ex.Message);
           }
       }
   }

   SetLogFile("log1.txt");

为此特定示例创建以下文件:

log1.txt20171221_INFO.log

我希望将我的日志文件命名为 log1.txt,并且在 log4net.config 文件中设置的 datePattern 不与名称连接,但如果不更改log4net.config appender 配置。

【问题讨论】:

    标签: c# .net log4net log4net-configuration log4net-appender


    【解决方案1】:

    当您使用 RollFileAppender 时,您必须更改 RollingStyle 并相应地设置路径。

    foreach (var appender in log.Logger.Repository.GetAppenders())
    {
        try
        {
            string file = Path.GetDirectoryName(((log4net.Appender.RollingFileAppender)appender).File);
            string filename = Path.Combine(file, fileName);
    
            switch (((log4net.Appender.RollingFileAppender)appender).RollingStyle)
            {
                case log4net.Appender.RollingFileAppender.RollingMode.Date:
                    ((log4net.Appender.RollingFileAppender)appender).RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Once;
                    break;
                case log4net.Appender.RollingFileAppender.RollingMode.Composite:
                    ((log4net.Appender.RollingFileAppender)appender).RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Size;
                    break;
            }
            ((log4net.Appender.FileAppender)appender).File = filename;
            ((log4net.Appender.FileAppender)appender).ActivateOptions();
        }
        catch (Exception ex) {}
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      相关资源
      最近更新 更多