我在应用中实施NLog。日志所执行的数据库插入的配置包括此...
<parameter layout="${stacktrace:format=Raw}" name="@Stacktrace"/>
但是当写入日志项时,输出总是看起来像这样......
文件中偏移量为85的MethodName1:行:列:0:0
文件中偏移量为93的MethodName2:行:列:0:0
文件中偏移量为160的MethodName3:行:列:0:0
有人可以建议为什么缺少文件名和位置详细信息吗?
答案 0 :(得分:0)
如果您希望NLog显示文件名和行号,请务必将生成调试信息设置为完整或仅限pdb Advanced Compiler Settings对话框。
答案 1 :(得分:0)
您的${stacktrace}
是否包含任何有用的信息?例如,假设一个非常简单的程序,堆栈跟踪在StackTraceLayoutRenderer
执行它之前看起来就像这样。
logEvent.StackTrace.GetFrames()
{System.Diagnostics.StackFrame[14]}
[0]: {Write at offset 263 in file:line:column c:\Dev\NLogSrc\src\NLog\LoggerImpl.cs:76:17 }
[1]: {WriteToTargets at offset 161 in file:line:column c:\Dev\NLogSrc\src\NLog\Logger.cs:542:13 }
[2]: {Debug at offset 103 in file:line:column c:\Dev\NLogSrc\src\NLog\Logger1.cs:454:17 }
[3]: {Build at offset 232 in file:line:column c:\Dev\NLogSrc\src\ConsoleApplication1\Program.cs:43:17 }
[4]: {GetAnother at offset 77 in file:line:column c:\Dev\NLogSrc\src\ConsoleApplication1\Program.cs:25:17 }
[5]: {Main at offset 85 in file:line:column c:\Dev\NLogSrc\src\ConsoleApplication1\Program.cs:16:13 }
[6]: {_nExecuteAssembly at offset 0 in file:line:column <filename unknown>:0:0 }
[7]: {ExecuteAssembly at offset 107 in file:line:column <filename unknown>:0:0 }
[8]: {RunUsersAssembly at offset 40 in file:line:column <filename unknown>:0:0 }
[9]: {ThreadStart_Context at offset 112 in file:line:column <filename unknown>:0:0 }
[10]: {RunInternal at offset 180 in file:line:column <filename unknown>:0:0 }
[11]: {Run at offset 22 in file:line:column <filename unknown>:0:0 }
[12]: {Run at offset 65 in file:line:column <filename unknown>:0:0 }
[13]: {ThreadStart at offset 68 in file:line:column <filename unknown>:0:0 }
如果你看了第5项(我的代码)和第6项(运行时间(?)),那就有很大的不同
此渲染器默认为堆栈中的第一个项目,它不是源自NLog(#3)而TopFrames
配置项默认为3,所以我希望您的第一行有一些信息有价值的,而其他的可能会或可能不会。
在您的日志记录调用之前设置断点可能值得,并在您的即时窗口中尝试new System.Diagnostics.StackTrace(true).GetFrames()
,看看有什么值与您看到的值相比。