log4net
Problemen met Log4Net oplossen
Zoeken…
Invoering
Log4net is een fail-stop logsysteem. Fail stop betekent dat het stopt met inloggen bij een interne uitzondering en door het ontwerp geen interactie heeft met de programmaflow. Dit wetende verklaart u het oplossen van problemen met log4net is niet zo eenvoudig. Als het loggen mislukt, merkt uw programma dit niet. U ziet veel vragen over: waarom werkt mijn log4net-logboekregistratie niet? Dit artikel legt de basisproblemen oplossen en de meest voorkomende oplossingen uit.
In de meeste gevallen is de eerste stap het inschakelen van interne foutopsporing voor log4net.
Schakel interne foutopsporing in
Er zijn 2 manieren om interne foutopsporing in log4net in te schakelen:
- Geef de optie log4net.Internal.Debug op in het configuratiebestand van de toepassing
- Schakel de interne debug van log4net programmatisch in
Geef de optie log4net.Internal.Debug op in het configuratiebestand van de toepassing
Dit is de voorkeursmethode om interne foutopsporing in te schakelen, voeg de sleutel log4net.Internal.Debug toe aan het bestand app.config van uw toepassing.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
</configuration>
Foutopsporingsregistratie wordt onmiddellijk gestart wanneer de toepassing wordt gestart.
Schakel interne debug van log4net programmatisch in
Een tweede manier is om dit programmatisch te doen. Stel de eigenschap log4net.Util.LogLog.InternalDebugging in op true:
log4net.Util.LogLog.InternalDebugging = true;
Interne foutopsporingslogboekoutput
Interne foutopsporingsberichten worden naar de console en naar de System.Diagnostics.Trace geschreven. Wanneer u uitvoer moet consoles, kunt u System.Console.Out omleiden. Of u kunt het traceerbericht omleiden naar een bestand:
<configuration>
...
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\tmp\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
...
</configuration>
Gebufferde appenders
Sommige log4net-appenders zijn gebufferde appenders. Deze appenders registreren alleen wanneer een bepaald aantal berichten wordt vastgelegd. Sommige voorbeelden zijn de SmtpAppender, RemotingAppender of de AdoNetAppender. Deze appenders hebben een instelling BufferSize:
<bufferSize value="100" />
Dit betekent dat de logger zal loggen als er 100 berichten in de buffer zijn. Als u de appender wilt testen, kunt u de bufferSize instellen op 1.
Als u wat de buffer moet worden leeggemaakt bij een fout, kunt u een evaluator gebruiken:
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR"/>
</evaluator>
Als aan de voorwaarde van de evaluator is voldaan, wordt de buffer leeggemaakt.
Configure () niet genoemd, of meerdere keren aangeroepen
Als u geen logboekregistratie ziet, kunt u controleren of Configure() in uw toepassing wordt aangeroepen. De eenvoudigste manier is om het als attribuut aan uw merk toe te voegen:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
Dan hoeft u log4net.Config.XmlConfigurator.Configure() nergens in uw configuratie toe te voegen. Of u kunt log4net.Config.XmlConfigurator.Configure() in een van uw opstartmethoden. Zorg ervoor dat u de configuratie slechts eenmaal aanroept.
Bestandsbijlage schrijft niet
Als u een bestandsappender hebt, moet u ervoor zorgen dat u naar een locatie schrijft waar de gebruiker de bestanden mag maken en bijwerken. Anders mislukt het loggen. U kunt dit controleren als u interne foutopsporing hebt ingeschakeld.