当出现异常时,似乎有很多关于如何记录额外信息的信息和文档,但是我在尝试创建一个本质上是异常蜜罐的目标时遇到了麻烦.我只想查看写入exceptions.log文件的特定目标的所有异常的副本,而不是筛选各种日志文件以查看是否记录了任何异常.
我该怎么做呢?
wag*_*ghe 18
我不能说我实际上已经尝试过这个,但你可以使用when过滤器和条件来实现你想要的.
以下是该condition页面的示例:
<rules>
<logger name="*" writeTo="file">
<filters>
<when condition="length(message) > 100" action="Ignore" />
<when condition="equals('${logger}','MyApps.SomeClass')" action="Ignore" />
<when condition="(level >= LogLevel.Debug and contains(message,'PleaseDontLogThis')) or level==LogLevel.Warn" action="Ignore" />
<when condition="not starts-with('${message}','PleaseLogThis')" action="Ignore" />
</filters>
</logger>
</rules>
Run Code Online (Sandbox Code Playgroud)
为了实现您的目标,您可以filter这样做:
<rules>
<logger name="*" writeTo="file">
<filters>
<when condition="length('${exception}') > 0" action="Log" />
</filters>
</logger>
</rules>
Run Code Online (Sandbox Code Playgroud)
想法是,如果异常字符串的长度> 0,您只想记录消息.一些when condition示例使用NLog LayoutRenderer语法(例如${message}),而一些示例不使用(例如message).我不确定哪种情况正确或在哪种情况下使用哪种语法.我上面直接发布的示例可能会导致仅在存在异常时才记录消息.您还应该能够进行配置,以便"正常"记录到一个目标的消息,并且只有在存在异常时才会记录到"ExceptionHoneypotTarget"的消息.
也许是这样的:
<rules>
<logger name="*" writeTo="ExceptionHoneypot">
<filters>
<when condition="length('${exception}') > 0" action="Log" />
</filters>
</logger>
<logger name="*" writeTo="file">
</logger>
</rules>
Run Code Online (Sandbox Code Playgroud)
正如我早些时候提到的那样,我实际上并没有尝试过这一点,但似乎你应该能够做到这一点,希望与上面所示类似.
或者,您可以在HoneypotTarget周围使用FilteringWrapper.配置可能如下所示:
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="Honeypot" xsi:type="FilteringWrapper"
condition="length('${exception}')>0">
<target xsi:type="File" fileName="${basedir}/Honeypot.txt" />
</target>
<target name="normal" xsi:type="File" fileName="${basedir}/Log.txt" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="Honeypot,normal" />
</rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)
我基于FilteringWrapper对来自一个例子例子在这里.它的工作方式,如果我的配置正确,是所有消息都将记录到"Log.txt",具有非空异常的消息将记录到"Honeypot.txt".
请注意,如果您只想要例外,则过滤器应为:
<when condition="length('${exception}') = 0" action="Ignore" />
Run Code Online (Sandbox Code Playgroud)