2012-02-07 2 views
11

Veritabanını destekleyen veritabanını kapattığımda, hiçbir şey günlüğe kaydedilir ve NLog sorunu yutuyor gibi görünüyor. Yükseltme ve istisna veya en azından oturum açan bir metin dosyasına oturum açmak için yapılandırmak için herhangi bir yolu var mı?Nlog, veritabanına günlüğe kaydetme başarısız olduğunda bir istisna atmaya nasıl zorlanır?

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

cevap

14
sql sunucusu burada

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

diğer bilgiler takip ederek ulaşılamaması zaman özel durum nlog zorlayabilir

,

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

Bu yeni bir özelliktir v2.0 böylece v2.0'a ihtiyacınız var.

Önceki sürümlerde çalışmaz.

Ayrıca nlog belirtilen bir dosyaya kendi istisnalar var log sağlayan yapılandırma bilgi

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

aşağıdaki ödeme.

2
  1. mu NLog.config "Kopya hep" olarak belirlenen özellik "Output Directory Kopyala" vardır: İşte

    benim yapılandırma benziyor ne?

  2. Yanlış NLog.config dosyasına sahip olduğunuzu düşünüyorum: hedef içindeki öznitelikler yerine öğeleri kullanırsınız (documentation). Böyle bir şey olmalı:

<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) Olmadı, ama işe yaradı ... Şimdi her zaman Kopyala'ya ayarladım. 2) Günlüğe kaydetme gerçekten iyi çalışıyor, ancak benim sorunum SQL Server'ı kapatırsam, NLog hiçbir özel durum atmaz veya veritabanlarına giriş yapamayacağı bir yere giriş yapamaz. NLog'un istisnalarını yakalamak ve ele almak istiyorum. – m0s