2015-10-19 203 views
3

我正在应用程序中实现NLog。对于DB插入的配置,日志也包括这...NLog中的堆栈跟踪不完整

<parameter layout="${stacktrace:format=Raw}" name="@Stacktrace"/> 

当一个日志项写入然而,输出总是看起来是这样的......

MethodName1偏移量85在文件:行:柱:0:0

MethodName2在文件偏移93:行:柱:0:0

MethodName3在抵消在文件160:行:柱:0:0

任何人都可以提出为什么文件名和位置的细节丢失?

回答

0

如果你想NLOG显示文件名和行号,请​​务必将生成调试信息PDB-仅Advanced Compiler Settings对话框到全部

+1

我已经检查并将解决方案中的项目设置为* Full *,所以不是这样。 –

+0

问题何时发生?调试时,发布时还是两者兼而有之? –

+0

调试。我还没有接近发布代码! :-) –

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(运行时(?)),有相当多的差异

enter image description here

此渲染默认为第一个项目堆栈不是源于NLog(#3),并且TopFrames配置项默认为3,所以我希望你的第一行有一些有价值的信息,而其他的可能或不可以。

在您的日志记录调用之前设置一个断点,并在您的直接窗口中尝试new System.Diagnostics.StackTrace(true).GetFrames()以查看您所看到的值和您看到的值。

+0

奇怪的是,我没有得到VS的任何东西......' [0]:{获取文件中的偏移量125:行:列<文件名未知>:0:0 [1]:{获取文件中的偏移204:行:列D:\ Repos \ ePin \ ePin.Infrastructure \ BusinessLogic \ CrudUowBase.cs:42:13 [2]:{获取文件中的偏移量172:line:column D:\ Repos \ ePin \ ePin.Infrastructure \ Services \ ServiceBase.cs:50:13 [3] :{在文件中的偏移量223处的SyncInvokeGet:行:列<文件名未知>:0:0 [4]:{在文件中的偏移1223处调用:行:列<文件名未知>:0:0 [5]在file:line:column :0:0'的偏移量623处调用开始。 –

+0

至少不是除f或者几行。 –

+0

通过更改我的布局以使用format = Flat并设置获取信息的帧数,我可以使用,尽管我不会强制NLog包含语句的文件名和行:列。感谢@Joe的指针,至少让我_something_ –