我有一个可能会产生错误的存储过程。但是,NLog只编写这样文本消息
int 16:08:37.7139|ERROR|ConsoleApplication35.Program|System.Data.SqlClient.SqlException (0x80131904):将表达式转换为
数据类型时出现算术溢出错误。在System.Data.SqlClient.SqlConnection.OnError(SqlException异常时,布尔值为breakConnection,操作`1 wrapCloseInAction)
但是SqlException
也有一个LineNumber
属性
如何强制NLog也写入行号?是否有预定义的布局?
发布于 2018-08-08 05:30:40
选项1
您可以使用格式@
( NLog 4.5+)
${exception:format=@}
请参阅docs
格式-输出的格式。必须是以逗号分隔的异常属性列表:消息、类型、ShortType、ToString、方法、StackTrace、数据和
@
。此参数值不区分大小写。默认值: message
@
意味着将所有异常属性序列化为Json格式。在NLog 4.5中引入
注释:当使用"toString“格式时,它也可能是可用的:
${exception:format=ToString}
选项2
如果你需要更多的输出控制,例如只需要线号,你可以编写你自己的布局渲染器(继承自ExceptionLayoutRenderer
):
private class MyExceptionLayoutRenderer : ExceptionLayoutRenderer {
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
base.Append(builder, logEvent);
// Also write linenumber (C# 7 syntax) at the end.
if (logEvent.Exception is SqlException sqlException)
{
builder.AppendLine($"LineNumber: " + sqlException.LineNumber);
}
}
}
并尽快注册(例如app_start,main()):
LayoutRenderer.Register<MyExceptionLayoutRenderer>("myException"); //usage ${myException}
选项3
NLog 4.6.8引入了新的格式选项Properties
${exception:format=Message,Properties}
https://stackoverflow.com/questions/51727869
复制相似问题