2015-10-19 199 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_ –