2008-12-19 14 views
5

¿Alguien sabe de un buen ejemplo sobre cómo configurar log4net para usar el proveedor system.data.sqlite?log4net y system.data.sqlite

He estado jugando con eso últimamente y pensé que lo tenía todo funcionando. Hace una conexión exitosa a la base de datos y la "escribe". Sin embargo, cuando miro los datos de la tabla, en realidad nunca confirma el registro.

Respuesta

0

yo estaba buscando la misma cosa hoy y encontré http://sqlite.phxsoftware.com/forums/t/1667.aspx

Es una configuración de ejemplo de alguien que logró utilizar con éxito el proveedor System.Data.SQLite ADO (en lugar de la otra que se documenta en el Apache oficial documentos).

Espero que lo lleve en la dirección correcta.

11

Asegúrate de que tienes las siguientes referencias del conjunto:

  • log4net (obviamente)
  • System.Data.SQLite (que podría olvidarse de éste)

Cierre el proyecto en Visual Studio y vuelva a abrir el proyecto .cs (o equivalente para VB) en un editor de texto, y busque la sección de referencias. El mío se ve así:

<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> 

Observe la referencia para SQLite. En este caso necesita este texto: System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139 Este es el nombre completo del ensamblado que aloja las clases de conexión sql compatibles con ADO.net, que es de lo que realmente depende Log4net.

Vuelva a abrir su proyecto en Visual Studio, asegúrese de tener el archivo .config y ábralo en el editor de texto XML. Será más fácil pegar mi archivo de configuración aquí que explicar todo. Observe que va a usar el nombre del ensamblado aquí.

poner esto en el nodo configSections XML:

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

Como childNode XML directa de configuración, poner esta sección XML:

<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> 

Como último paso que tiene que asegurarse de que el El archivo sqlite db que especificó existe previamente en la ubicación especificada. Una forma de hacerlo es crear la base de datos y adjuntarla como un recurso para copiar a la carpeta de salida. Asegúrese de que tenga el mismo nombre que el especificado (en este caso log4net.db)

+0

Gracias por la respuesta realmente útil. No pude entender connectionType y no pensé en buscar en el archivo .csproj. ¡Esto funcionó por completo para mí! +1 – Dave