تكوين NLOG لتسجيل الاستثناءات في إخراج XML؟

StackOverflow https://stackoverflow.com/questions/3460266

  •  27-09-2019
  •  | 
  •  

سؤال

حاليًا ، لدينا Nlog Spitting CSV فقط لإثبات أن لدينا NLOG بالفعل تسجيل الاستثناءات.

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" internalLogToConsole="true" internalLogToConsoleError="true">
<targets>
  <target name="file" xsi:type="File"  fileName="${specialfolder:folder=ApplicationData}/log.csv">
    <layout xsi:type="CSVLayout">
      <column name="User_Machine_Name" layout="${machinename}" />
      <column name="Time" layout="${date}" />
      <column name="Level" layout="${level}" />
      <column name="Message" layout="${message}" />
      <column name="Exception_Message" layout="${exception:format=Message}"/>
      <column name="Exception_Type" layout="${exception:format=Type}"/>
      <column name="Callsite_Class" layout="${callsite:methodName=false}" />
      <column name="Callsite_Method" layout="${callsite:className=false}" />
      <column name="Stack_Trace" layout="${stacktrace:format=DetailedFlat}"/>
    </layout>
  </target>
  <target name="console" xsi:type="Console"
    layout="${longdate}|${level}|${message}">
  </target>
</targets>
<rules>
  <logger name="*" minlevel="Trace" writeTo="file" />
</rules>

هذا يعمل كما هو متوقع باستثناء أنني بحاجة إلى الإخراج في XML. لقد بحثت من خلال وثائق NLOG والشيء الوحيد الذي وجدته هو أن هناك log4jxmleventlayout ولكن الوثائق لا تدخل في كيفية استخدامها. أنا جديد على Nlog ولا يمكنني العثور على الكثير من الموارد حول هذا الموضوع.

هل كانت مفيدة؟

المحلول

بقدر ما أستطيع أن أقول ، يحتوي log4jxmleventlayout على بعض الخصائص المرتبطة به (معلومات تتبع التتبع ، واتصال الفئة ، والوقت ، وما إلى ذلك) ، ولكن هذا يتعلق به. لقد بحثت في كيفية تضمين معلومات إضافية ، ولكن يبدو أن هذا غير ممكن.

يبدو التكوين المحتمل هكذا:

<target name ="xmlFile" xsi:type="File"
                fileName="${tempdir}/${processname}/log.xml"
                archiveFileName="${tempdir}/${processname}/archive/log_{#####}.xml"
                archiveAboveSize="10000000"
                layout="${log4jxmlevent:includeSourceInfo=true:includeCallSite=true:includeMDC=true:appInfo=true:includeNDC=true:includeNLogData=true}"/>

ومع ذلك ، فقد وجدت أن NLOG 2.0 فقط سوف يستفيد بالفعل من سمات مثل "ConserourceInfo". يبدو لي أنه في NLOG 1.0 ، عندما تم ضبطها على صحيح ، احتوت XML الناتجة فقط على التاريخ والمستوى والرسالة.

أحد أسباب عدم استخدام log4jxmleventlayout هو أنه لا يفعل أي شيء مع استثناءات ، أي إذا اتصلت

logger.ErrorException("This shouldn't happen", exception);

سوف يكتب المسجل "هذا لا ينبغي أن يحدث" ، لكن معلومات الاستثناء قد ولت.

ربما يكون من الممكن إنشاء غلاف XML مخصص حول البيانات التي تريدها. لم أفعل ذلك ، لكنني أفكر في الأمر ببساطة بسبب القيود حول log4jxmleventlayout.

نصائح أخرى

منذ NLOG 4.6 هناك تخطيط XML. مع هذا التصميم ، يمكنك تحديد XML الخاص بك. على سبيل المثال

<target name="xmlFile" xsi:type="File" fileName="${logFileNamePrefix}.xml" >
      <layout xsi:type="XmlLayout" includeAllProperties="false" elementName='logevent'>
              <attribute name="time" layout="${longdate}" />
              <attribute name="level" layout="${level:upperCase=true}"/>
              <element name="message" value="${message}" />
      </layout>
</target>

سيكتب:

<logevent time="2010-01-01 12:34:56.0000" level="ERROR">
   <message>hello, world</message>
</logevent>

نرى مستندات

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top