2008-12-19 15 views
5

Kennt jemand ein gutes Beispiel dafür, wie log4net eingerichtet wird, um den Anbieter system.data.sqlite zu verwenden?log4net und system.data.sqlite

Ich habe in letzter Zeit damit herum gespielt und ich dachte, ich hätte alles funktioniert. Es stellt eine erfolgreiche Verbindung zur Datenbank her und "schreibt" sie aus. Wenn ich jedoch die Tabellendaten anschaue, wird das Protokoll niemals tatsächlich gespeichert.

Antwort

0

Ich war auf der Suche, dass die gleiche Sache heute und fand http://sqlite.phxsoftware.com/forums/t/1667.aspx

Es ist eine Beispielkonfiguration von jemandem, der erfolgreich den System.Data.SQLite ADO-Provider (anstelle des anderen verwenden verwaltet, die in der offiziellen Apache dokumentiert Dokumente).

Hoffe, es führt Sie in die richtige Richtung.

11

Vergewissern Sie sich, die folgenden Literaturstellen:

  • log4net (natürlich)
  • System.Data.SQLite (man könnte über diese vergessen)

Schließen Sie das Projekt in Visual Studio und öffnen Sie das .csproject (oder das Äquivalent für VB) in einem Texteditor, und suchen Sie nach dem Referenzabschnitt. Meine sieht so aus:

<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\..\..\..\externals\log4net-1.2.10\bin\net\2.0\release\log4net.dll</HintPath> 
</Reference> 
<Reference Include="System" /> 
<Reference Include="System.Core"> 
    <RequiredTargetFramework>3.5</RequiredTargetFramework> 
</Reference> 
<Reference Include="System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\..\..\..\externals\sqlite.net\System.Data.SQLite.dll</HintPath> 
</Reference> 

Beachten Sie die Referenz für SQLite. In diesem Fall benötigen Sie folgenden Text: System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139 Dies ist der vollständige Name der Assembly, die die ADO.net-kompatiblen SQL-Verbindungsklassen hostet, worüber log4net tatsächlich abhängig ist.

Öffnen Sie Ihr Projekt in Visual Studio, stellen Sie sicher, dass Sie die .config-Datei haben, und öffnen Sie sie im XML-Texteditor. Es wird einfacher sein, hier meine Konfigurationsdatei einzufügen, als alles zu erklären. Beachten Sie, dass Sie hier den Assemblynamen verwenden werden.

Diese im configSections XML-Knoten:

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 

Als direkten XML childNode die Konfiguration, setzen Sie diesen XML-Abschnitt:

<log4net> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> 
     </layout> 
    </appender> 
    <appender name="sqlite" type="log4net.Appender.AdoNetAppender"> 
     <bufferSize value="100" /> 
     <connectionType value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> 
     <connectionString value="Data Source=log4net.db;Version=3;" /> 
     <commandText value="INSERT INTO Log (Date, Level, Logger, Message) VALUES (@Date, @Level, @Logger, @Message)" /> 
     <parameter> 
      <parameterName value="@Date" /> 
      <dbType value="DateTime" /> 
      <layout type="log4net.Layout.RawTimeStampLayout" /> 
     </parameter> 
     <parameter> 
      <parameterName value="@Level" /> 
      <dbType value="String" /> 
      <layout type="log4net.Layout.PatternLayout"> 
       <conversionPattern value="%level" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@Logger" /> 
      <dbType value="String" /> 
      <layout type="log4net.Layout.PatternLayout"> 
       <conversionPattern value="%logger" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@Message" /> 
      <dbType value="String" /> 
      <layout type="log4net.Layout.PatternLayout"> 
       <conversionPattern value="%message" /> 
      </layout> 
     </parameter> 
    </appender> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="ConsoleAppender" /> 
     <appender-ref ref="sqlite" /> 
    </root> 
</log4net> 

Als letzten Schritt müssen Sie sicherstellen, dass die sqlite-db-Datei, die Sie angegeben haben, existiert am angegebenen Speicherort. Eine Möglichkeit besteht darin, die Datenbank zu erstellen und sie als Ressource anzuhängen, die in den Ausgabeordner kopiert werden soll. Stellen Sie sicher, dass es den gleichen Namen wie angegeben hat (In diesem Fall log4net.db)

+0

Danke für die wirklich hilfreiche Antwort. Ich konnte den connectionType nicht herausfinden und hatte nicht daran gedacht, in die .csproj-Datei zu schauen. Das hat total für mich funktioniert! +1 – Dave