2 Stimmen

Log4Net protokolliert nicht (wahrscheinlich nicht initialisiert)

Ich spiele zum ersten Mal mit Log4Net und stoße auf Probleme. Ich habe verschiedene Anleitungen befolgt, aber ich konnte es nicht dazu bringen, etwas zu protokollieren. Lassen Sie mich Ihnen meinen Code zeigen und hoffentlich können Sie mir sagen, was ich falsch mache.

app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" 
             type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>  
  <log4net>    
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="CurrentLog.txt"/>
      <staticLogFileName value="true"/>
      <appendToFile value="true"/>
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd"/>
      <filter type="log4net.Filter.LevelRangeFilter">
        <acceptOnMatch value="true" />
        <levelMin value="DEBUG" />
        <levelMax value="FATAL" />
      </filter>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{dd MMM yyy HH:mm:ss} %level %message. %newline %exception" />
      </layout>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>
</configuration>

AssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(Watch=true)]

Präsentator.cs

An der Spitze der Klasse habe ich dies:

private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

Dann versuche ich, die Log-Variable später in der Klasse zu verwenden:

bool isDebugEnabled = log.IsDebugEnabled;
log.Debug("Failed to save", e);

Wann immer ich die isDebugEnabled ist sie falsch, wie alle anderen Variablen auch. isBlahEnabled wenn ich die Protokollvariable untersuche.

Mein Verdacht ist, dass ich meine app.config-Datei nicht richtig angeschlossen habe, da dies das erste Mal ist, dass ich versucht habe, eine zu verwenden. Ich habe sie erstellt, indem ich im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt geklickt, ein neues Element hinzugefügt, Anwendungskonfigurationsdatei ausgewählt und app.config benannt habe.

14voto

Waldo Bronchart Punkte 9393

Das hier funktioniert für mich:

app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    </configSections>
    <log4net>
      <appender name="Main" type="log4net.Appender.RollingFileAppender">
        <file value="${USERPROFILE}\My Documents\MyApp\Logs\Main.log" />
        <appendToFile value="false" />
        <maximumFileSize value="1GB" />
        <maxSizeRollBackups value="3" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date{ABSOLUTE} %-5level %-18logger %message%newline" />
        </layout>
      </appender>
      <root>
        <level value="DEBUG" />
        <appender-ref ref="Main" />
      </root>
    </log4net>
</configuration>

Vergewissern Sie sich auch, dass die Build-Aktion auf app.config wird eingestellt auf Keine und In Ausgabeverzeichnis kopieren ist auf "Kopieren, wenn neuer" . Sie können diese Einstellungen in den Dateieigenschaften festlegen.

Programm.cs

public static ILog Log;

static void Main(string[] args)
{
    // Setup Logging
    log4net.Config.XmlConfigurator.Configure();
    Log = LogManager.GetLogger("MyAwesomeApp");

    // ...
}

4voto

Rolfi Punkte 442

Nur um meine 2 Cent hinzuzufügen: Ich hatte das gleiche Problem, aber ich verwende die obige Konfiguration in separaten log4net.config (also habe ich auf allen Apps die gleiche Konfiguration), aber ich habe einfach vergessen, die Dateieigenschaft auf "Copy when newer" (oder so ähnlich, habe deutsche Version) zu setzen.

3voto

Will Westrop Punkte 351

Nur um meine 2p hinzuzufügen, falls dies jemandem hilft, der nach einer Lösung für dieses Problem sucht:

In meinem Fall habe ich zusätzlich zu Log4net das Paket NServicebus.Logging verwendet, und dieses Paket enthält Typen mit genau denselben Namen wie die in Log4net, die sich nur durch den Namensraum unterscheiden.

Durch die Korrektur der "using"-Anweisungen oder die vollständige Qualifizierung der Typnamen konnte das Problem zwar behoben werden, aber es war sehr schwer, das Problem zu erkennen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X