2008-10-28 13 views
20

Ich bin konfigurieren log4net einen Verbund RollingFileAppender zu verwenden, so dass die aktuelle Datei immer logfile.log genannt wird und alle nachfolgenden Dateien werden Logfile-YYYY.MM.dd.seq.log genannt wo seq die Sequenz Nummer, wenn ein Protokoll innerhalb eines Tages eine bestimmte Größe überschreitet. Leider hatte ich sehr wenig Erfolg beim Konfigurieren eines solchen Setups.Wie konfiguriere ich einen RollingFileAppender, um mit log4net nach Datum und Größe zu rollen?

Edit:

Meine aktuelle Konfiguration wird unten eingefügt. Es wurde auf der Grundlage mehrerer Antworten aktualisiert, was mich für meine Bedürfnisse nah genug bringt. Dies erzeugt Dateien des Formats: logfile_YYYY.MM.dd.log.seq

<log4net> 

    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="logs\\logfile"/> 
     <staticLogFileName value="false"/> 
     <appendToFile value="true"/> 
     <rollingStyle value="Composite"/> 
     <datePattern value="_yyyy.MM.dd&quot;.log&quot;"/> 
     <maxSizeRollBackups value="10"/> 
     <maximumFileSize value="75KB"/> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> 
     </layout> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
      <param name="LevelMin" value="DEBUG" /> 
      <param name="LevelMax" value="FATAL" /> 
     </filter> 
    </appender> 

</log4net> 

Eine interessante Anmerkung,

<staticLogFileName value="false"/> 

auf true bewirkt, dass der Logger alle Dateien, nicht schreiben zu setzen.

Antwort

13

Wir verwenden die folgenden (in Log4J):

<appender name="roller" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="File" value="Applog.log"/> 
    <param name="DatePattern" value="'.'yyyy-MM-dd"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[slf5s.start]%d{DATE}[slf5s.DATE]%n%p[slf5s.PRIORITY]%n%x[slf5s.NDC]%n%t[slf5s.THREAD]%n%c[slf5s.CATEGORY]%n%l[slf5s.LOCATION]%n%m[slf5s.MESSAGE]%n%n"/> 
    </layout> 
</appender> 

Das gibt uns Applog.log.yyyy-MM-dd Dateien

+1

In der Dokumentation zu log4j: Bei DailyRollingFileAppender wurden Synchronisationsprobleme und Datenverlust festgestellt. Der Zusatz "log4j extras" enthält Alternativen, die bei neuen Bereitstellungen berücksichtigt werden sollten und in der Dokumentation für org.apache.log4j.rolling.RollingFileAppender erläutert werden. –

4

Nach log4net RollingFileAppender Quellcode:

protected string GetNextOutputFileName(string fileName) 
{ 
    if (!m_staticLogFileName) 
    { 
     fileName = fileName.Trim(); 

     if (m_rollDate) 
     { 
      fileName = fileName + m_now.ToString(m_datePattern, System.Globalization.DateTimeFormatInfo.InvariantInfo); 
     } 

     if (m_countDirection >= 0) 
     { 
      fileName = fileName + '.' + m_curSizeRollBackups; 
     } 
    } 

    return fileName; 
} 

So vermute ich es nicht möglich ist, eine Protokolldatei mit dem Namen zu generieren, die Sie benötigen. Ich denke, es ist so etwas wie logfileYYYY-MM-dd.n.log oder ähnlich.

+0

@Ryan, Leandro: Es scheint auch, dass es keine einfache Möglichkeit gibt, dieses Verhalten zu überschreiben. 'GetNextOutputFileName' ist nicht virtuell und andere Methoden nennen es private Referenzvariablen, so dass Sie nicht einfach ihren Code kopieren und den Aufruf ersetzen können. Ich denke, das Beste, was Sie tun können, ist, jedes Mal einen eindeutigen Dateinamen zu haben, indem Sie etwas wie die Datumsmuster-Option verwenden, die Sie am Ende benutzt haben. –

0

Beachten Sie, dass dieser Fall die

  <maxSizeRollBackups value="10"/> 

wird ignoriert.

Sehen Sie diese answer auf eine ähnliche log4net Frage

1

diese Eigenschaft auf true gesetzt Versuchen:

preserveLogFileNameExtension value = "true"

Ich glaube, dieser Trick wird Ihnen helfen! Die Eigenschaft preserveLogFileNameExtension benötigt jedoch die neueste Version von log4net. Sie finden sie hier: logging.apache.org/log4net/download.html