2017-12-21 12 views
1

appenderを変更せずに、実行時にログの名前を変更したいと思います。基本的には、一度設定された時間帯に達すると、別のファイルを使用できるようにしたいと考えています。appenderを変更せずに実行時にlog4netファイル名を変更する

これは私のアペンダは、次のようになります。

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"); 

この特定の例については、以下のファイルを作成:

<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> 

これは私がアペンダを反復処理機能です

log1.txt20171221_INFO.log

私のログファイルには、名前と連結log4net.configファイルにdatePatternセットを持ってlog1.txtの名前とないようにするために私がたいが、私はlog4net.configアペンダの構成を変更することなくそれを行う方法を見つけ出すことはできません。

答えて

3

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) {} 
} 
関連する問題