2009-03-06 4 views
15

Dies ist meine log4net Config-DateiWas hast du in deiner log4net Config? Hacks, Optimierungen, Beobachtungen?

<?xml version="1.0" encoding="utf-8" ?> 
<log4net debug="true"> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <acceptOnMatch value="true" /> 
     <levelMin value="DEBUG" /> 
     <levelMax value="FATAL" /> 
    </filter> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%-5p %5rms [%-17.17t] %-22.22c{1} %-18.18M - %m%n" /> 
    </layout> 
    </appender> 

    <appender name="SmtpAppender" type="MySmtpClientSmtpAppender"> 
    <to value="[email protected]" /> 
    <from value="[email protected]" /> 
    <subject value="Game Server Monitoring Failed!" /> 
    <smtpHost value="smtp.x.com" /> 
    <username value="admin" /> 
    <password value="x" /> 
    <bufferSize value="256" /> 
    <lossy value="true" /> 
    <evaluator type="log4net.spi.LevelEvaluator"> 
     <threshold value="ERROR" /> 
    </evaluator> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%-5p %d [ThreadId: %t] Class:%c{1} Method:%M %nMESSAGE:%n%m%n%n" /> 
    </layout> 
    </appender> 

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="Logs\\wwwlog" /> 
    <appendToFile value="true" /> 
    <datePattern value="yyyyMMdd" /> 
    <maximumFileSize value="10MB" /> 
    <!--<rollingStyle value="Date" />--> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <acceptOnMatch value="true" /> 
     <levelMin value="INFO" /> 
     <levelMax value="FATAL" /> 
    </filter> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> 
    </layout> 
    </appender> 


    <root> 
    <level value="DEBUG" /> 
    <appender-ref ref="ConsoleAppender" /> 
    <appender-ref ref="MySmtpAppender" /> 
    <appender-ref ref="RollingLogFileAppender" /> 
    </root> 
</log4net> 

Bin ich fehlt etwas? Irgendwelche Tipps/Ratschläge, um die Log-Größe zu verringern und gleichzeitig die Klarheit und die besseren Konvertierungsmuster zu erhalten? Irgendwelche interessanten Hacks?

Edit: XMl-Datei nicht in den Codeblock.Updating bekommen. Irgendwelche Suggestionen?

+0

markieren Sie Code, drücken Sie Strg + K :) insgesamt einen großen Unterschied machen könnte. Dein html hat es gestoppt. –

Antwort

11

Ein Vorschlag für den RollingLogFileAppender ist, das minimale lockingModel zu verwenden. Bei dieser Einstellung ist die Protokolldatei nicht gesperrt, sondern sie wird für jeden Schreibvorgang geöffnet und geschlossen.

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
+0

Guter Anruf. Ich benutze das auch und es scheint mit meinem eigenen Log-Viewer zu helfen, so dass es auch die Datei durchsuchen kann. –

+3

'FileAppender.MinimalLock' ist nur notwendig, wenn Sie versuchen, mehrere Prozesse zu haben (Notiz - Prozesse, keine Threads; log4net ist bereits threadsicher) Schreiben Sie in dieselbe Protokolldatei. Sonst verlangsamt es nur die Dinge: "Diese Methode der Sperrung ist wesentlich langsamer als FileAppender.ExclusiveLock", von http://logging.apache.org/log4net/release/sdk/log4net.Appender.FileAppender.MinimalLock.html –

+2

sollte ich Erwähnen Sie auch, dass mehrere Prozesse, die in dieselbe Protokolldatei schreiben, normalerweise keine gute Idee sind. Aus der [FAQ] (http://logging.apache.org/log4net/release/faq.html#single-file): "Fragen Sie sich, ob Sie mehrere Prozesse in der gleichen Datei protokollieren müssen, dann nicht TU es ;-)". Es ist normalerweise eine bessere Idee, jedem Prozess eine eigene Protokolldatei zu geben, in die geschrieben werden kann. –

2

Dies kann ein wenig helfen, je nachdem, wie ähnlich log4j und log4net sind, würde ich denken, dass sie auf der gleichen Spezifikation basieren, aber ich weiß es nicht sicher.

Nun, ich kann Ihnen nicht sagen, was ich in meinem log4net Config haben, aber ich kann Ihnen sagen, was ich in meinem log4j config, ob das gut genug ist ...

<?xml version="1.0" encoding="UTF-8"?> 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 

    <!-- 
    <appender name="CHAINSAW_APPENDER" 
      class="org.apache.log4j.net.SocketAppender"> 
     <param name="RemoteHost" value="localhost" /> 
     <param name="Port" value="4445" /> 
     <param name="LocationInfo" value="true"/> 
     <param name="ReconnectionDelay" value="10000"/> 
    </appender> 
    --> 

    <appender name="FILE_APPENDER" 
     class="org.apache.log4j.RollingFileAppender"> 
     <param name="File" value="c:/dev/logs/OSB.log" /> 
     <param name="Append" value="true" /> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d [%t] %-5p [[[[%c]]]] (((%F:%L))) ___%C___ - %m%n"/> 
      </layout> 
    </appender> 

    <logger name="org.apache"> 
     <level value="WARN"/> 
    </logger> 

    <!-- 
    <logger name="com.conciliarpress.webapp.filter.GZIPFilte"> 
     <level value="WARN"/> 
    </logger> 

    <logger name="com.conciliarpress"> 
     <level value="DEBUG"/> 
    </logger> 

    <logger name="BibleFormControllerTest"> 
     <level value="DEBUG"/> 
    </logger> 

    <logger name="com.conciliarpress.webapp.action.sample.jmesa.JMesaSampleController"> 
     <level value="DEBUG"/> 
    </logger> 

    <logger name="com.conciliarpress.webapp.action.binding"> 
     <level value="DEBUG"/> 
    </logger> 

    <logger name="org.springframework.web.servlet.mvc"> 
     <level value="DEBUG"/> 
    </logger> 

    <logger name="org.directwebremoting"> 
     <level value="DEBUG"/> 
    </logger> 

    <logger name="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
     <level value="DEBUG"/> 
    </logger> 

    --> 

    <logger name="com.conciliarpress.dao.hibernate"> 
     <level value="DEBUG"/> 
    </logger> 

    <logger name="com.conciliarpress.service.impl"> 
     <level value="DEBUG"/> 
    </logger> 

    <logger name="com.conciliarpress.service.dwr"> 
     <level value="DEBUG"/> 
    </logger> 

    <logger name="com.conciliarpress.webapp.action"> 
     <level value="DEBUG" /> 
    </logger> 

    <root> 
     <level value="WARN" /> 
     <appender-ref ref="FILE_APPENDER"/> 
    </root> 

</log4j:configuration> 

Auch habe ich eine entsprechende Kettensäge Konfigurationsdatei:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd"> 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true"> 
    <plugin name="logFileReceiver" class="org.apache.log4j.varia.LogFilePatternReceiver"> 
    <param name="fileURL" value="file:///c:/dev/logs/OSB.log" /> 
    <param name="timestampFormat" value="yyyy-MM-d HH:mm:ss,SSS"/> 
    <param name="logFormat" value="TIMESTAMP [THREAD] LEVEL [[[[LOGGER]]]] (((FILE:LINE))) ___CLASS___ - MESSAGE"/> 
    <param name="name" value="DLA_M_LogFile" /> 
    <param name="tailing" value="true" /> 
    </plugin> 

    <root> 
     <level value="debug"/> 
    </root> 
</log4j:configuration> 

hier auch einige Informationen, die Sie die letzte Datei decifer helfen können: http://wiki.apache.org/logging-log4j/Configuring_a_log4j_RollingFileAppender_with_Chainsaw

7

Für die Protokollierung mit verschiedenen Farben bei der Anzeige auf der Konsole abhängig von der Nachrichtenebene (Debug, Info, Fehler oder fatal). Der zweite appender ist es auf einer Datei zu speichern:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> 
    </configSections> 

<log4net debug="false"> 
    <appender name="trace" type="log4net.Appender.TraceAppender, log4net"> 
    <layout type="log4net.Layout.PatternLayout,log4net"> 
     <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> 
    </layout> 
    </appender> 

<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender,log4net"> 
    <mapping> 
    <level value="ERROR" /> 
    <foreColor value="White" /> 
    <backColor value="Red" /> 
    </mapping> 
    <mapping> 
    <level value="DEBUG" /> 
    <foreColor value="White" /> 
    </mapping> 
    <mapping> 
    <level value="INFO" /> 
    <foreColor value="Green" /> 
    </mapping> 

    <layout type="log4net.Layout.PatternLayout"> 
    <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> 
    </layout> 
</appender> 

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender,log4net" > 
    <param name="File" value="Logs/NSCurrent.log" /> 
    <param name="AppendToFile" value="true" /> 
    <param name="RollingStyle" value="Date" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <datePattern value="yyyy-MM-dd" /> 
    <layout type="log4net.Layout.PatternLayout,log4net"> 
    <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> 
    </layout> 
</appender> 

    <root> 
    <priority value="DEBUG" /> 
    <appender-ref ref="RollingFile" /> 
    <appender-ref ref="ColoredConsoleAppender" /> 
    </root> 
</log4net> 
</configuration> 
4

ich eine ziemlich minimal log4net-Konfiguration laufen und es vorziehen, das XML-Format zu verwenden, aber eine Sache, würde ich vorschlagen, das Hinzufügen (für Web-Anwendungen) ist die ASP. NET Trace Appender. Sie müssen lediglich die folgenden hinzuzufügen:

<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" > 
    <layout type="log4net.Layout.PatternLayout" /> 
</appender> 

Dann nach unten an den Root-Logger, oder wo auch immer Sie sich entscheiden, es zu aktivieren:

<root> 
    <level value="WARN" /> 
    <appender-ref ref="XmlSchemaFileAppender" /> 
    <appender-ref ref="AspNetTraceAppender" /> 
</root> 

Dies ermöglicht es mir zusammen alle meine einschlägigen Debug-Daten zu erhalten, auf eine einzelne Seite, wenn ich einige Minuten ASP.NET-Details debuggen. Meistens habe ich den ASP.NET-Trace-Appender auskommentiert, um ihn zu deaktivieren, hat aber in einigen Fällen wirklich geholfen, besonders wenn Sie herausfinden wollen, welche spezielle Server-Post-Back-Methode das Aufhängen in Ihrer App verursacht .

26

Niemand erwähnte Kodierung. Es ist sehr wichtig, wenn Sie Nachrichten in Chinesisch, Japanisch, Arabisch oder in einer beliebigen Doppelbyte-Sprache protokollieren.Hier ist ein Beispiel:

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <encoding value="utf-8" /> 
    <!-- etc. --> 
</appender> 
+14

Sehr nützlicher Kommentar. Ich wünschte, es wäre der Standard. Wenn Sie jedoch value = "utf-8" verwenden, enthalten alle Dateien eine Stückliste, selbst wenn die Datei leer ist. Für eine typische Protokollierung gibt es normalerweise immer Inhalt, daher ist dies kein Problem. Dies ist jedoch für Fehler- und Warnungsprotokolle unerwünscht - die im Idealfall leer sein sollten - aber aufgrund der Stückliste immer noch eine Größe von 1 KB aufweisen. Sie müssen es also immer überprüfen, wenn wirklich ein Fehler darin enthalten ist. Um zu umgehen, verwenden Sie stattdessen . Dadurch wird die nicht benötigte Stückliste ausgelassen, sodass das leere Protokoll als 0 KB angezeigt wird. – Dono

+0

netter Tipp - danke. – nakhli

5

Protokolldateigröße zu reduzieren, könnten Sie versuchen, die ConversionPattern Einstellung:

hier ist das Format, das ich verwenden:

<layout type="log4net.Layout.PatternLayout,log4net"> 
    <!-- a reduced format, saves bit of log space: --> 
    <param name="ConversionPattern" value="%date{MM/dd HH:mm:ss,fff}-{%level}-%message%newline"/> 
    </layout> 

VOR:

2012 -06-05 10: 58: 40,819 [1] INFO Meine App [(null)] - Meine App - === Stern ting ....

NACH:

06/05 11: 17: 29,151- {INFO} -My App - === Start ...

Anmerkung: die Dokumentation von Apache scheint für log4net falsch zu sein - wie es sagt für Millisekunden SSS zu verwenden, während log4net verwendet fff

Eine kleine Einsparung pro Zeile

+1

In der Tat, fff ist es! – alterfox

Verwandte Themen