2012-02-07 17 views
11

Quando togli il database che esegue il backup di nlog, niente viene registrato e sembra che NLog inghiotti il ​​problema. C'è un modo per configurarlo per sollevare ed eccezione o almeno per accedere a un file di testo che la registrazione non è riuscita?Come forzare nlog a generare un'eccezione quando la registrazione al database fallisce?

Ecco quello che la mia configurazione assomiglia:

<?xml version="1.0" ?> 
<nlog autoReload="true" throwExceptions="true" internalLogFile="${basedir}/App_Data/nlog.txt" internalLogLevel="Debug" 
internalLogToConsole="true"> 

<targets> 
<!--Useful for debugging--> 
<target name="consolelog" type="ColoredConsole" 
layout="${date:format=HH\:mm\:ss}|${level}|${stacktrace}|${message}" /> 



<target name="databaselog" type="Database"> 

<dbProvider>System.Data.SqlClient</dbProvider> 

<!-- database connection parameters --> 
<!-- alternatively you could provide a single 'connectionstring' parameter --> 
<connectionString>Data Source=.\SQLEXPRESSZ;Initial Catalog=aspnetdb;Integrated Security=SSPI</connectionString> 

<commandText> 
insert into NLog_Error ([time_stamp],[level],[host],[type],[source],[logger],[message],[stacktrace],[allxml]) values(@time_stamp,@level,@host,@type,@source,@logger,@message,@stacktrace,@allxml); 
</commandText> 

<parameter name="@time_stamp" layout="${utc_date}" /> 
<parameter name="@level" layout="${level}" /> 
<parameter name="@host" layout="${machinename}" /> 
<parameter name="@type" layout="${exception:format=type}" /> 
<parameter name="@source" layout="${callsite:className=true:fileName=false:includeSourcePath=false:methodName=false}" /> 
<parameter name="@logger" layout="${logger}" /> 
<parameter name="@message" layout="${message}" /> 
<parameter name="@stacktrace" layout="${exception:stacktrace}" /> 
<parameter name="@allxml" layout="${web_variables}" /> 

</target> 

</targets> 

<rules> 

<logger name="*" minlevel="Info" writeTo="databaselog" /> 
</rules> 

</nlog> 

risposta

14

È possibile forzare NLog gettare un'eccezione quando il server SQL non è raggiungibile seguendo

<nlog throwExceptions="true"> 
... your nlog config 
</nlog> 

Maggiori informazioni qui,

http://nlog-project.org/2010/09/05/new-exception-handling-rules-in-nlog-2-0.html

È una nuova funzionalità in v2.0 quindi hai bisogno di v2.0.

Non funzionerà nelle versioni precedenti.

checkout Anche seguenti informazioni di configurazione

https://github.com/NLog/NLog/wiki/Logging-Troubleshooting

che permette di accedere NLog è proprio eccezioni in un file specificato.

2
  1. fa NLog.config hanno la proprietà "Copia in uscita Directory" impostato come "Copia sempre"?
  2. Penso che tu abbia sbagliato il file NLog.config: usi elementi invece di attributi all'interno del target (documentation). Dovrebbe essere qualcosa di simile:

<target 
    name="databaselog" 
    type="Database" 
    dbProvider="System.Data.SqlClient" 
    connectionString="Data Source=.\SQLEXPRESSZ;Initial Catalog=aspnetdb;Integrated Security=SSPI" 
    commandText="insert into NLog_Error ([time_stamp],[level],[host],[type],[source],[logger],[message],[stacktrace],[allxml]) values(@time_stamp,@level,@host,@type,@source,@logger,@message,@stacktrace,@allxml);"> 
    <parameter name="@time_stamp" layout="${utc_date}" /> 
    <parameter name="@level" layout="${level}" /> 
    <parameter name="@host" layout="${machinename}" /> 
    <parameter name="@type" layout="${exception:format=type}" /> 
    <parameter name="@source" layout="${callsite:className=true:fileName=false:includeSourcePath=false:methodName=false}" /> 
    <parameter name="@logger" layout="${logger}" /> 
    <parameter name="@message" layout="${message}" /> 
    <parameter name="@stacktrace" layout="${exception:stacktrace}" /> 
    <parameter name="@allxml" layout="${web_variables}" /> 
</target> 
+0

1) Non ce l'ha, ma ha funzionato ... grazie anche se l'ho impostato su Copia sempre ora. 2) La registrazione funziona davvero bene, ma il mio problema è che se spengo il server SQL, NLog non genererà eccezioni o log da nessuna parte che non è riuscito a accedere ai database. Voglio essere in grado di catturare e gestire le eccezioni di NLog. – m0s

Problemi correlati