2017-02-22 139 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