2017-02-22 234 views
0

我有以下NLOG配置文件NLOG配置無法正常運行

<?xml version="1.0" encoding="utf-8" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" 
     autoReload="true" 
     throwExceptions="false" 
     internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log"> 

    <!-- optional, add some variables 
    https://github.com/nlog/NLog/wiki/Configuration-file#variables 
    --> 
    <variable name="myvar" value="myvalue"/> 

    <!-- 
    See https://github.com/nlog/nlog/wiki/Configuration-file 
    for information on customizing logging rules and outputs. 
    --> 
    <targets> 
    <target 
     name="logfile" 
     xsi:type="File" 
     fileName="log.txt" 
     archiveFileName="log.{#}.txt" 
     archiveNumbering="DateAndSequence" 
     archiveAboveSize="1000000" 
     archiveDateFormat="yyyyMMdd" 
    /> 
    <target 
     name="byteArrayLogfile" 
     xsi:type="File" 
     fileName="log.ba.txt" 
     archiveFileName="log.ba.{#}.txt" 
     archiveNumbering="DateAndSequence" 
     archiveAboveSize="1000000" 
     archiveDateFormat="yyyyMMdd" 
     /> 
    <target 
     name="console" 
     xsi:type="Console" /> 
    </targets> 


    <rules> 
    <logger name="StackTraceLogger" minlevel="Warn" maxlevel="Error" writeTo="logfile" layout="${longdate}|${threadid}|${callsite-linenumber:skipFrames=Integer}|${level:uppercase=true}|${message}${newline}${exception:format=tostring}" final="true"/> 
    <logger name="ByteArrayLogger" minlevel="Debug" writeTo="byteArrayLogfile" layout="${longdate}|${threadid}|${level:uppercase=true}${newline}${message}" final="true"/> 
    <logger name="Ctrack.DMT.*" minlevel="Debug" writeTo="logfile" layout="${longdate}|${threadid}|${callsite-linenumber:skipFrames=Integer}|${level:uppercase=true}|${logger}|${message}" /> 
    <logger name="Ctrack.DMT.*" minlevel="Trace" writeTo="console" layout="${longdate}|${threadid}|${callsite-linenumber:skipFrames=Integer}|${level:uppercase=true}|${logger}|${message}" /> 
    <logger name="ServerForm.*" minlevel="Debug" writeTo="logfile" layout="${longdate}|${threadid}|${callsite-linenumber:skipFrames=Integer}|${level:uppercase=true}|${logger}|${message}" /> 
    <logger name="ServerForm.*" minlevel="Trace" writeTo="console" layout="${longdate}|${threadid}|${callsite-linenumber:skipFrames=Integer}|${level:uppercase=true}|${logger}|${message}" /> 
    </rules> 
</nlog> 

的宗旨是:

  1. 從類庫或跟蹤級別+在WinForm送什麼控制檯
  2. 發送從調試級別的類庫或winform的所有內容到日誌文件
  3. 發送任意從ByteArrayLogger荷蘭國際集團以byteArrayLogfile
  4. 從ExceptionLogger發送一切日誌文件,使用稍有不同的佈局

每類有以下了頂部:

private static Logger logger = LogManager.GetCurrentClassLogger(); 
private static Logger loggerEL = LogManager.GetLogger("ExceptionLogger"); 
private static Logger loggerBA = LogManager.GetLogger("ByteArrayLogger"); 

步驟對數異常

string message = "Exception while trying to save " + Name + " to the database."; 
logger.Error("{0}|{1}", MethodName, message); 
loggerEL.Error(ex, "{0}|{1}", MethodName, message); 

蹤跡可以被移出到一個單獨的文件在不久的將來

事情是不是工作

  • 沒有線程ID。有趣的是沒有失蹤|分離器
  • 沒有行號。有趣的是沒有失蹤|分隔符
  • 異常不在日誌文件中。他們應該在文件中,但使用不同的佈局
  • 控制檯顯示DEBUG級別的項目

此外,智能感知是突出佈局,並說The 'layout' attribute is not declared作爲警告。

+0

接受朱利安答案。將發佈有關更新後的更改和問題的新問題 – Hecatonchires

回答

0

此外,Intellisense高度關注佈局,並聲稱'layout'屬性未被聲明爲警告。

在這種情況下,這也是錯誤。該layout應該在<target>,而不是在<logger>

所以

<targets> 
    <target 
     name="logfile" 
     xsi:type="File" 
     fileName="log.txt" 
     archiveFileName="log.{#}.txt" 
     archiveNumbering="DateAndSequence" 
     archiveAboveSize="1000000" 
     archiveDateFormat="yyyyMMdd" 
layout="${longdate}|${threadid}|${callsite-linenumber:skipFrames=Integer}|${level:uppercase=true}|${message}${newline}${exception:format=tostring}" 
    /> 
    ... 

<rules> 
    <logger name="StackTraceLogger" minlevel="Warn" 
      maxlevel="Error" writeTo="logfile" final="true" /> 
    ... 
</rules> 
+0

好吧,這主要是工作。在更仔細地查看wiki頁面後,必須將'$ {callsite-linenumber:skipFrames = Integer}'更改爲'$ {callsite-linenumber:skipFrames = 0}'。仍然沒有記錄異常 – Hecatonchires

+0

可能這個問題在你的記錄器規則中。建議先用最簡單的規則先測試一下。 – Julian