9

現在、NLogが実際に例外をログに記録していることを証明するために、NLogがCSVファイルを吐き出している。

<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を初めて使用しますが、このテーマに関するリソースをあまり見つけることができません。

4

2 に答える 2

10

私の知る限り、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}"/>

ただし、実際に「includeSourceInfo」などの属性を使用するのはNLog2.0のみであることがわかりました。NLog 1.0では、これらがtrueに設定されている場合、結果のxmlには日付、レベル、およびメッセージのみが含まれているように見えました。

Log4JXmlEventLayoutを使用しない理由の1つは、例外を除いて何も実行しないことです。

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

ロガーは「これは起こらないはずです」と書き留めますが、例外情報はなくなります。

たぶん、必要なデータの周りにカスタムxmlラッパーを作成することが可能でしょう。私はそうしていませんが、Log4JXmlEventLayoutの周りの制限のためにそれについて考えています。

于 2010-08-11T17:28:35.680 に答える
1

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}" />
              <element name="exception_type" layout="${exception:format=Type}"/>
      </layout>
</target>

書くだろう:

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

ドキュメントを参照してください

于 2019-06-14T23:21:12.327 に答える