我有一个存储过程,可能会产生错误。 但是,NLog只写这样的短信
16:08:37.7139 |错误| ConsoleApplication35.Program | System.Data.SqlClient.SqlException (0x80131904):将表达式转换为数据的算术溢出错误 输入int。在 System.Data.SqlClient.SqlConnection.OnError(SqlException异常, 布尔值breakConnection,动作为1 wrapCloseInAction)
但是SqlException
也具有LineNumber
属性
如何强制NLog也写行号? 有预定义的布局吗?
答案 0 :(得分:0)
您可以使用for index,match in df.iterrows():
for name, shots in {'home_team_name':'home_team_shots',
'away_team_name':'away_team_shots'}:
if match[name] not in teams_shots:
#we have to setup an entry in the dictionary
teams_shots[name]=[]
teams_shots[name].append(match[shots])
home_shots_avg.append(None)
else:
home_shots_avg.append(np.mean(teams_shots[name]))
(NLog 4.5+)格式
@
请参见docs
format-输出格式。必须是用逗号分隔的异常属性列表:消息,类型,ShortType,ToString,方法,StackTrace,数据和
${exception:format=Message,@}
。此参数值不区分大小写。默认:消息
@
意味着将所有Exception-properties序列化为Json格式。在NLog 4.5中引入
注释:使用“ toString”格式时,它也可能可用:
@
如果您需要更多控制输出,例如仅行号,就可以编写自己的布局渲染器(继承自${exception:format=ToString}
):
ExceptionLayoutRenderer
并尽快注册它(例如app_start,main()):
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);
}
}
}