2017-12-21 5 views
1

Ich möchte den Namen meines Protokolls zur Laufzeit ändern, ohne den Appender zu ändern. Im Grunde, wenn es zu einer bestimmten Tageszeit kommt, würde ich gerne eine andere Datei verwenden können. DieseLog4net-Dateiname zur Laufzeit ändern, ohne den Appender zu ändern

ist, was meine appender wie folgt aussieht:

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

Dies ist die Funktion, wo ich durch die Appenlaufen:

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

, die die folgende Datei für dieses spezielle Beispiel erstellt:

log1.txt20171221_INFO.log

Ich mag für meine Protokolldatei log1.txt und nicht den datePattern Satz in der log4net.config Datei mit dem Namen verknüpft genannt werden, aber ich kann nicht herausfinden, wie es zu tun, ohne die log4net.config appender Konfiguration zu ändern.

Antwort

3

Wenn Sie RollFileAppender verwenden, müssen Sie den RollingStyle ändern und den Pfad entsprechend einstellen.

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) {} 
}