首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何设置NLog在日志中显示sqlexception行号?

如何设置NLog在日志中显示sqlexception行号?
EN

Stack Overflow用户
提问于 2018-08-07 21:21:17
回答 1查看 80关注 0票数 1

我有一个可能会产生错误的存储过程。但是,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也写入行号?是否有预定义的布局?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-08 05:30:40

选项1

您可以使用格式@ ( NLog 4.5+)

代码语言:javascript
复制
${exception:format=@}

请参阅docs

格式-输出的格式。必须是以逗号分隔的异常属性列表:消息、类型、ShortType、ToString、方法、StackTrace、数据和@。此参数值不区分大小写。默认值: message

@意味着将所有异常属性序列化为Json格式。在NLog 4.5中引入

注释:当使用"toString“格式时,它也可能是可用的:

代码语言:javascript
复制
${exception:format=ToString}

选项2

如果你需要更多的输出控制,例如只需要线号,你可以编写你自己的布局渲染器(继承自ExceptionLayoutRenderer):

代码语言:javascript
复制
 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()):

代码语言:javascript
复制
LayoutRenderer.Register<MyExceptionLayoutRenderer>("myException"); //usage ${myException}

选项3

NLog 4.6.8引入了新的格式选项Properties

代码语言:javascript
复制
${exception:format=Message,Properties}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51727869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档