使用NLogloggingexception时如何获取堆栈跟踪?
当我使用NLog的默认布局时,它只打印exception的名称。 我已经被告知log4jxmlevent布局不会打印任何exception。 什么布局会帮助我?
示例代码:
try { throw new SystemException(); } catch (Exception ex) { logger.Error("oi", ex); }
默认布局输出:
2011-01-14 09:14:48.0343|ERROR|ConsoleApplication.Program|oi
log4jxmlevent输出:
<log4j:event logger="ConsoleApplication.Program" level="ERROR" timestamp="1295003776872" thread="9"> <log4j:message>oi</log4j:message> <log4j:NDC /> <log4j:locationInfo class="ConsoleApplication.Program" method="Void Main(System.String[])" file="C:\Users\User\Documents\Visual Studio 2010\Projects\ConsoleApplication\ConsoleApplication\Program.cs" line="21" /> <nlog:eventSequenceNumber>3</nlog:eventSequenceNumber> <nlog:locationInfo assembly="ConsoleApplication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <log4j:properties> <log4j:data name="log4japp" value="true" /> <log4j:data name="log4jmachinename" value="MACHINE" /> </log4j:properties>
我必须使用Logger.
+级别+ Exception
方法:
logger.ErrorException("ex", ex);
和自定义布局
layout="${exception:format=ToString,StackTrace}${newline}"
使用带有Exception的重载作为第二个参数:
catch(Exception crap) { log.Error("Something went horribly wrong.", crap); }
然后在布局中包含${exception}
布局渲染器:
<target ... layout="${longdate} ${message} ${exception:format=ToString}" />
资料来源:
正如“ 如何loggingexception”中所述 ,从NLog 4.0开始,将exception作为第一个parameter passing给Error
,例如:
logger.Error(ex, "Nickers!");
在NLogconfiguration中(例如在web.config
或app.config
),在布局中包含${exception:format=tostring}
,例如:
<target name="f" type="File" layout="${longdate} ${message} ${exception:format=tostring}"/>
- 如何检查一个uristring是否有效
- SqlDateTime.MinValue!= DateTime.MinValue,为什么?
- 寻找.NET的命令行参数parsing器
- Gacutil.exe成功添加程序集,但程序集不能在资源pipe理器中查看。 为什么?
- 删除entity framework中的所有实体
- AssemblyVersion,AssemblyFileVersion和AssemblyInformationalVersion之间有什么区别?
- 如何使用LINQ来select具有最小或最大属性值的对象
- 如何编写自动缩放到系统字体和dpi设置的WinForms代码?
- 从C#中的.resx文件读取string