2017-10-23 6 views
1

Ich denke, ich konfiguriere (oder verstehe) etwas nicht richtig. Ich habe zwei Appender, die dieselben Einträge loggen wollen, aber auf unterschiedlichen Loglevels. Ich habe eine Hilfsmethode für meine Protokollierung erstellt.Log4net mehrere Appender verschiedene Protokollstufen

public class LogHelper 
{ 
    public static ILog GetLogger([CallerFilePath]string filename = "") 
    { 
     return LogManager.GetLogger(filename); 
    } 
} 

dann in meinen Klassen, nenne ich

private ILog log = LogHelper.GetLogger(); 

Hier mein app.config ist:

<log4net> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" value="%property{StoragePath}\logs\" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Date" /> 
    <datePattern value="MMddyyyy'.log'" /> 
    <staticLogFileName value="false" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date{dd/MM/yyyy HH:mm:ss} %level - %message%newline%exception" /> 
    </layout> 
    </appender> 
    <appender name="WebApiAppender" type="<footype>"> 
    <threshold value="USERPLAY"/> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMin value="USERPLAY" /> 
    </filter> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%m %property{Stream}" /> 
    </layout> 
    </appender> 
    <root> 
    <level value="INFO" /> 
    <appender-ref ref="RollingFileAppender" /> 
    <appender-ref ref="WebApiAppender" /> 
    </root> 

Die Protokollierung alles funktioniert, aber meine Schwelle auf meinem WebApiAppender wird nicht berücksichtigt. Es ist Standard auf der Root-Ebene. Dies erzeugte weit mehr Informationen, die ich auf mein Webapi treffen möchte. jede Hilfe wird sehr geschätzt.

EDIT:

Beachten Sie auch, dass ich einige benutzerdefinierte Protokollebenen verwenden. So ist die ‚USERPLAY‘ in der Schwelle

Benutzerdefinierte Log-Stufe:

static readonly Level ReconnectLevel = new Level(65000, "RECONNECT"); 
static readonly Level UserPlayLevel = new Level(45001, "USERPLAY"); 
static readonly Level ScheduledPlayLevel = new Level(45002, "SCHEDULEDPLAY"); 
static readonly Level UserStopLevel = new Level(45003, "USERSTOP"); 
static readonly Level ScheduledStopLevel = new Level(45004, "SCHEDULEDSTOP"); 
static readonly Level LocalBreakLevel = new Level(47000, "LOCALBREAK"); 
static readonly Level StationIdLevel = new Level(47001, "STATIONID"); 
static readonly Level GameEndLevel = new Level(47002, "GAMEEND"); 
static readonly Level WebApiLevel = new Level(35000, "WEBAPI"); 

Antwort

1

hinzugefügt haben Sie Ihre benutzerdefinierte Ebene in die Konfigurationsdatei? Log4net muss wissen, wo Ihr benutzerdefiniertes Level mit den vordefinierten Werten verglichen wird, die es bereits kennt.

<level> 
    <name value="USERPLAY" /> 
    <value value="35000" /> 
</level> 
+0

ok, also habe ich die Einträge hinzugefügt und ich habe immer noch das gleiche Problem. –

+0

Welchen Wert haben Sie für das USREPLAY-Level verwendet? INFO glaube ich ist 40000 – Mander

+0

Ich habe die benutzerdefinierten Log-Ebenen zum ursprünglichen Beitrag als Referenz hinzugefügt @Mander –