Soru NLog ile istisnaları kaydederken Yığın izini nasıl alabilirim?


NLog ile varsayılan düzeni kullandığımda, yalnızca istisnanın adını yazdırır. Ben log4jxmlevent mizannın istisna hakkında hiçbir şey basmadığını söylemiştim. Hangi düzen bana yardımcı olacak?

Örnek kod:

try
{
    throw new SystemException();
}
catch (Exception ex)
{
    logger.Error("oi", ex);
}

Varsayılan düzen çıkışı:

2011-01-14 09:14:48.0343|ERROR|ConsoleApplication.Program|oi

log4jxmlevent çıkışı:

<log4j:event logger="ConsoleApplication.Program"
           level="ERROR"
           timestamp="1295003776872"
           thread="9">
<log4j:message>oi</log4j:message>
<log4j:NDC />
<log4j:locationInfo class="ConsoleApplication.Program"
                    method="Void Main(System.String[])"
                    file="C:\Users\User\Documents\Visual Studio 2010\Projects\ConsoleApplication\ConsoleApplication\Program.cs"
                    line="21" />
<nlog:eventSequenceNumber>3</nlog:eventSequenceNumber>
<nlog:locationInfo assembly="ConsoleApplication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<log4j:properties>
  <log4j:data name="log4japp"
              value="true" />
  <log4j:data name="log4jmachinename"
              value="MACHINE" />
</log4j:properties>


44
2018-01-13 19:35


Menşei




Cevaplar:


Birini kullanmak zorundaydım Logger. + Seviye + Exception yöntemleri:

logger.ErrorException("ex", ex);

ve özel bir düzen

layout="${exception:format=ToString,StackTrace}${newline}"

84
2018-01-14 12:31



Bu mevcut bir düzene ek olarak mı? - Shane
@Shane kesinlikle, sadece yığın izine ihtiyacınız olmadıkça - Jader Dias
Bilginize, bu yaklaşım reddedildi. github.com/NLog/NLog/wiki/How-to-Log-Exceptions - Clay
@Clay yorumunu açıklamak: Günlüğe kaydetme çizgisi artık logger.Error("Got exception.", ex); ama 'özel düzen' iyi - Julian
Her ikisinin de kullanıldığını unutmayın. ToString ve StackTrace log çıkışında stacktrace çoğaltmasına neden olur. ${exception:format=ToString} Yeterli olacaktır - Lu55


İkinci bağımsız değişken olarak bir İstisna alan aşırı yükleri kullanın:

catch(Exception crap)
{
    log.Error("Something went horribly wrong.", crap);
}

Sonra düzeninizde ${exception} düzen oluşturucu:

<target ...
    layout="${longdate} ${message} ${exception:format=ToString}" />

Kaynaklar:


16
2017-12-31 22:03





Belgelendiği gibi İstisnalar Nasıl KaydedilirNLog 4.0 ile başlayarak, ilk parametreyi istisna Errorörneğin, bunun gibi:

logger.Error(ex, "Nickers!");

NLog yapılandırmasında (ör. web.config veya app.config), Dahil etmek ${exception:format=tostring} düzende, örneğin şöyle:

<target name="f" type="File" layout="${longdate} ${message} ${exception:format=tostring}"/> 

12
2017-07-01 15:46



Kullanabilirsiniz Koşullu biçimlendirme istisnalar için düzende. Aşağıdaki varsayılan düzen yakındır <target name="f" type="File" layout="${longdate}|${level:uppercase=true}|${message}${onexception:${newline}${exception:format=tostring}}"/>. - mcdon