Antonio "tdj"

(C'è sempre un modo migliore)
posts - 312, comments - 268, trackbacks - 17

My Links

News





Tag Cloud

Article Categories

Archives

Post Categories

Image Galleries

Articoli

Blogs

Controlli WinForm free

Guide

Siti vari

Sviluppo

Configurare AdoNetAppender per SQL in log4net

AdoNetAppender è un appender, appunto, che serve per memorizzare i log in un database (cosa piuttosto comune).
Vediamo come configurarne uno per un database SQL Server (ma l’operazione è possibile anche per Access, Oracle, ecc…)

Configurazione del database

La tabella contenente i dati è strutturata così:

CREATE TABLE [dbo].[tbl_Log](
    [LogId] [int] IDENTITY(1,1) NOT NULL,
    [LogDate] [datetime] NOT NULL,
    [Thread] [nvarchar](255) NOT NULL,
    [LogLevel] [nvarchar](50) NOT NULL,
    [Logger] [nvarchar](255) NOT NULL,
    [LogMessage] [nvarchar](4000) NOT NULL,
    [LogInfo] [nvarchar](4000) NOT NULL,
    [Application] [nvarchar](50) NOT NULL,

 

Creiamo una stored procedure per l’inserimento dei dati:

 

CREATE PROCEDURE [dbo].[sp_WriteLog]
 
    @Thread nvarchar(255),
    @LogLevel nvarchar(50),
    @Logger nvarchar(255),
    @LogMessage nvarchar(4000),
    @LogInfo nvarchar(4000),
    @Application nvarchar(50)
AS
BEGIN
   SET NOCOUNT ON;
 
   INSERT INTO tbl_Log (
         LogDate
        ,Thread
        ,LogLevel
        ,Logger
        ,LogMessage
        ,LogInfo
        ,[Application]
        )
    VALUES
        (
         getdate()
        ,@Thread
        ,@LogLevel
        ,@Logger
        ,@LogMessage
        ,@LogInfo
        ,@Application
        )
END


Configurazione log4net

Il file .config per configurare un AdoNetAppender è il seguente:

 

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
    <param name="BufferSize" value="1"/>
    <param name="ConnectionType" value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    <param name="CommandType" value="StoredProcedure"/>
    <param name="CommandText" value="sp_WriteLog" />
    <parameter>
      <parameterName value="@LogDate"/>
      <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="%t"/>
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@LogLevel"/>
      <dbType value="String"/>
      <size value="50"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%p"/>
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@Logger"/>
      <dbType value="String"/>
      <size value="255"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%c"/>
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@LogMessage"/>
      <dbType value="String"/>
      <size value="4000"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%m"/>
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@LogInfo"/>
      <dbType value="String"/>
      <size value="4000"/>
      <layout type="log4net.Layout.ExceptionLayout"/>
    </parameter>
    <parameter>
      <parameterName value="@Application"/>
      <dbType value="String"/>
      <size value="50"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="MyApplicationName"/>
      </layout>
    </parameter>
  </appender>

 

Quello che bisogna specificare è il comando SQL da usare con i relativi parametri, inoltre ho utilizzato una Stored Procedure anzichè un comando INSERT.
Importante è il parametro BufferSize che imposta il numero di messaggi da “accumulare” prima di scriverli nel database. Un valore 10 significa, dunque, scrivere 10 messaggi per volta. Io ho specificato 1 così da scrivere immediatamente il messaggio di log.

Altri dettagli sulla configurazione di un AdoNetAppender li trovate qui.

Print | posted on venerdì 24 aprile 2009 00:28 | Filed Under [ Dev .NET ]

Feedback

Gravatar

# re: Configurare AdoNetAppender per SQL in log4net

Ma dove e come chiamare la Stored Procedure?
12/05/2009 20:16 | Epros
Gravatar

# re: Configurare AdoNetAppender per SQL in log4net

La store viene chiamata da log4net quando, da codice, scrivi log.Error(...). Tu non devi fare nulla.

13/05/2009 18:11 | Antonio "tdj" Catucci
Gravatar

# re: Configurare AdoNetAppender per SQL in log4net

Ma la connection string dove la definisci?
09/12/2010 17:23 | Leonardo
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET