सवाल एनएलओजी के साथ अपवाद लॉग करते समय स्टैक ट्रेस कैसे प्राप्त करें?


जब मैं एनएलओजी के साथ डिफ़ॉल्ट लेआउट का उपयोग करता हूं तो यह केवल अपवाद के नाम को प्रिंट करता है। मुझे बताया गया है कि log4jxmlevent लेआउट अपवाद के बारे में कुछ भी प्रिंट नहीं करता है। क्या लेआउट मेरी मदद करेगा?

उदाहरण कोड:

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

डिफ़ॉल्ट लेआउट आउटपुट:

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

log4jxmlevent आउटपुट:

<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


मूल




जवाब:


मुझे इनमें से एक का उपयोग करना पड़ा Logger. + स्तर + Exception विधि:

logger.ErrorException("ex", ex);

और एक कस्टम लेआउट

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

84
2018-01-14 12:31



क्या यह मौजूदा लेआउट के अतिरिक्त है? - Shane
@ शेन निश्चित रूप से, जब तक आपको केवल स्टैक ट्रेस की आवश्यकता न हो - Jader Dias
एफवाईआई, यह दृष्टिकोण बहिष्कृत है। github.com/NLog/NLog/wiki/How-to-Log-Exceptions - Clay
@Clay की टिप्पणी समझाते हुए: लॉगिंग लाइन अब बदल दी गई है logger.Error("Got exception.", ex); लेकिन 'कस्टम लेआउट' ठीक है - Julian
ध्यान दें कि दोनों का उपयोग ToString तथा StackTrace लॉग आउटपुट में stacktrace डुप्लिकेशन का कारण बनता है। ${exception:format=ToString} पर्याप्त होगा - Lu55


दूसरे तर्क के रूप में अपवाद लेने वाले ओवरलोड का उपयोग करें:

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

फिर आपके लेआउट में शामिल हैं ${exception} लेआउट रेंडरर:

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

सूत्रों का कहना है:


16
2017-12-31 22:03





जैसा कि दस्तावेज में है अपवाद लॉग कैसे करें, एनएलओजी 4.0 से शुरू, अपवाद को पहले पैरामीटर के रूप में पास करें Error, उदाहरण के लिए:

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

एनएलओजी विन्यास में (उदा web.config या app.config), शामिल ${exception:format=tostring} लेआउट में, उदाहरण के लिए:

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

12
2017-07-01 15:46



इस्तेमाल कर सकते हैं सशर्त फॉर्मेटिंग अपवादों के लिए लेआउट में। निम्नलिखित डिफ़ॉल्ट लेआउट के करीब है <target name="f" type="File" layout="${longdate}|${level:uppercase=true}|${message}${onexception:${newline}${exception:format=tostring}}"/>। - mcdon