2013-03-20 9 views
7

Attualmente nel mio progetto log4net viene utilizzato per registrare tutte le eccezioni, informazioni, avvisi ecc. In un file di testo, ma ora quello che voglio è registrare tutti questi dettagli nel database tabella invece di file.
Per favore aiutatemi a fare questo.Come utilizzare l'utilità Log4Net per l'accesso al database utilizzando C#

Molte grazie in anticipo.

Configurazione:

<log4net> 
    <root> 
    <level value="DEBUG" /> 
    <appender-ref ref="ADONetAppender" /> 
    </root> 
    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"> 
    <bufferSize value="100" /> 
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionString value="server=xxxx; uid=xxxx; pwd=xxxx; database=xxxx" /> 
    <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> 
</log4net> 

Codice in Cs file:

private log4net.ILog log = log4net.LogManager.GetLogger(typeof(ImportGlobalIPVData)); 
log.Error("This is Error"); 

Ma nulla viene inserito nella tabella del log dopo l'utilizzo sopra il codice.

+2

Sicuramente questo è stato fatto molte volte prima (e documentato molte volte prima). Forse potresti descrivere cosa hai provato e perché sei bloccato. – Reddog

+0

Puoi condividere il link da dove posso ottenere i dettagli, perché non ho mai usato log4net prima. –

+0

Se è SQLServer, c'è un esempio a destra [qui] (http://stackoverflow.com/questions/3279524/storing-log4net-messages-in-sql-server) su StackOverflow. – nvoigt

risposta

4

Si può dare un'occhiata here, penso che questo è esattamente quello che ti serve.

Si noti che se si desidera utilizzare log4net da un'applicazione client e scrivere in un database, è possibile prendere in considerazione l'idea di inserire un servizio in mezzo. In tal caso puoi facilmente scrivere il tuo adattatore log4net che chiama il tuo LogService (fire and forget) che accede al tuo database (probabilmente usando MSMQ).

+0

Sì, da questo collegamento sono solo in grado di configurare il mio codice per scrivere il registro nel database ma ho notato che la tabella del registro non riflette immediatamente le voci del registro, Esiste qualche impostazione per riflettere immediatamente i registri nella tabella ?? –

+0

Ho notato un altro strano comportamento che quando salvo il file global.asax tutte le voci del registro sono visibili nella tabella, non so quale sia la connessione tra il file global.asax e il database? –

+4

Ho ottenuto la soluzione, poiché ho usato '' nella configurazione, motivo per cui i log non vengono immediatamente inseriti nella tabella. L'ho cambiato in '' e il mio problema è risolto. Grazie per la tua contrubuzione –

Problemi correlati