2010-05-14 10 views
5

sagen, dass ich meine log4net Loggers eingestellt minLevel und maxLevel-FATAL und DEBUG jeweils aber unter einem Szenario möchte ich die Log-Einträge in der WARN Ebene geschrieben stumm zu schalten, und halten alle anderen Ebenen im Bereich aktiv.Wegwerfen mehrere Protokollebenen innerhalb eines Bereichs mit log4net

Ist es möglich, "diskrete" Protokollebenen zu verwenden, anstatt einen Bereich unter Verwendung von minLevel und maxLevel anzugeben?

Ich nehme an, dies sollte einfach sein, aber ich habe nicht mit diesem Thema beschäftigen keine log4net docs oder Beispiele gefunden.

Antwort

7

können Sie die LevelMatchFilter auf Ihrem appender verwenden.

Beispiel:

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="DEBUG" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="INFO" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="ERROR" /> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
    ... 
</appender> 

Dieses Beispiel wird nur Druck DEBUG; INFO- und FEHLER-Meldungen. Es ist einfach, dies nach Ihren Bedürfnissen anzupassen.

Hinweis: die DenyAllFilter am Ende nicht vergessen.

+0

! Danke für die schnelle Antwort. Kann es programmatisch gemacht werden? Ich habe nur eine Möglichkeit gefunden, die Log-Ebene des Loggers (root) zu ändern, nicht jeden Appender. –

+0

Entschuldigung, ich habe deinen Kommentar verpasst. sollte auch programmatisch möglich sein. Hier können Sie sehen, wie alle Appen zu bekommen: http://stackoverflow.com/questions/3016108/change-log4net-conversion-pattern-or-layout-at-runtime/3031867#3031867 –

0

Verwenden LevelRangeFilter

<filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMax value="FATAL" /> 
    <levelMin value="ERROR" /> 
</filter> 
+2

Hey, als dass die natürliche Nutzung ist Form, ich habe diese Option versucht, aber es zwingt mich, auch die Nachrichten mit Ebenen * zwischen * FATAL und ERROR zu protokollieren, die ich nicht will (auch wenn ERROR und FATAL benachbart sind, gilt das Prinzip immer noch). Danke trotzdem! –

2

Es ist cool, wie log4net Filter alle kombiniert werden können, um die gewünschte Ausgabe zu erzielen. Alle Protokolleinträge haben standardmäßig eine "neutrale" Filterdisposition und log4net protokolliert standardmäßig alle Einträge, die neutral sind.

Was die LevelRangeFilter wird, ist tun, wenn der Pegel des Eintrags in diesem Bereich liegt, wird es die Filter Disposition auf „Accept“ (oder seine Disposition zu lassen, wie es, wenn die acceptOnMatch war Parameter false gesetzt ist), und es markiert alle Einträge außerhalb des Bereichs mit der Einstellung "Verweigern".

Die LevelMatchFilter wird die Disposition für die im levelToMatch Parameter angegebenen Filter auf „Akzeptieren“, es sei denn, die acceptToMatch-false gesetzt ist, dann wird es gesetzt Einträge passend zu „Deny“, wird nicht angepasste Einträge zu überlassen, was sie waren Vor.

Also, was können Sie tun, ist eine Kombination der beiden Filter verwenden zu bekommen, was Sie wollen:

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMax value="FATAL" /> 
     <levelMin value="ERROR" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="WARN" /> 
     <acceptOnMatch value="false" /> 
    </filter> 
</appender> 

Dies ermöglicht es Ihnen leicht hin- und herzuschalten die warnen Ebene ein und aus. Alle Einträge außerhalb des Bereichs sind bereits alle, die als „nicht erlaubt“ und die LevelMatchFilter wird hier markieren Einträge Warn-Ebene als auch auf Verweigern so die DenyAllFilter ist nicht erforderlich. Hey

Verwandte Themen