2017-06-05 3 views
0

Ich verwende AdoNetAppender, um die Protokolle in eine Datenbank zu schreiben.
Die Verbindung ist gut, da ich sehe, dass der Logger mit der Datenbank verbunden ist.
Darüber hinaus, wenn ich den Datenbanknamen in der Verbindung ändern, kann ich den Fehler in log4net Ablaufverfolgung sehen, so dass die Verbindung ist gut, aber immer noch die Datenbanktabelle ist leer.Log4net schreibt nicht in die Datenbank mit `AdoNetAppender`

hier ist die Konfigurationsdatei:

<log4net> 
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
    <bufferSize value="100" /> 
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionString value="data source=(localdb)\MSSQLLocalDB;initial catalog=LogsAffiliatePortal;integrated security=true;persist security info=True;" /> 
    <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> 
    <parameter> 
    <parameterName value="@log_date" /> 
    <dbType value="DateTime" /> 
    <layout type="log4net.Layout.RawTimeStampLayout" /> 
    </parameter> 
    <parameter> 
    <parameterName value="@thread" /> 
    <dbType value="String" /> 
    <size value="255" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%thread" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@log_level" /> 
    <dbType value="String" /> 
    <size value="50" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%level" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@logger" /> 
    <dbType value="String" /> 
    <size value="255" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%logger" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@message" /> 
    <dbType value="String" /> 
    <size value="4000" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@exception" /> 
    <dbType value="String" /> 
    <size value="2000" /> 
    <layout type="log4net.Layout.ExceptionLayout" /> 
    </parameter> 
</appender> 

    <root> 
    <level value="ALL" /> 
    <appender-ref ref="AdoNetAppender" /> 
    </root> 
    </log4net> 

Hier ist, wie Im das Protokoll verwenden:

public class Global : HttpApplication 
{ 
    private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

    void Application_Start(object sender, EventArgs e) 
    { 

     var configFile = ConfigurationManager.AppSettings.Get("MyLog4NetConfigFile"); 
     if (!string.IsNullOrEmpty(configFile)) 
      { 

      var f = HostingEnvironment.ApplicationPhysicalPath +Environment.ExpandEnvironmentVariables(configFile); 
        XmlConfigurator.Configure(new FileInfo(f)); 
     } 

       log.Debug("yes"); 
       log.Error("test"); 
    } 
} 
+0

Ihre Puffergröße wird auf '100' gesetzt, so dass Datensätze nur bei so vielen Protokollereignissen in die Datenbank geschrieben werden. Setzen Sie es zum Testen auf "1". – stuartd

+0

@stuartd - wenn du belohnt werden willst, poste es als Antwort. – SexyMF

+0

Einfach nur glücklich zu helfen .. – stuartd

Antwort

0

Ein häufiges Problem ist, dass Sie eine Log-Nachricht erwarten, aber log4net ist Pufferung. Ändern Sie pufferSize auf 1:

<bufferSize value="1" /> 

Alle Nachrichten werden direkt protokolliert.

Verwandte Themen