2015-12-29 33 views
0

我在使用NLog的Mono呼叫站點時遇到問題。行號缺失,就像調試信息文件(mdb)丟失一樣。但是mdb不會丟失。任何想法可能是錯誤的?呼叫站點不包含行號 - Linux上使用Mono的NLog

一些細節:

單聲道版本:

Mono JIT compiler version 3.12.1 (mono-3.12.0-branch/4cb3f77 Fri Jul 24 15:30:03 CST 2015) 

NLOG版本:

4.2.2 

C#代碼:

using NLog; 
using NLog.Targets; 
using NLog.Config; 

namespace TestMono.Verbose 
{ 
    public sealed class TestCallsite 
    { 
     public static void Main(string[] arguments) 
     { 
      LoggingConfiguration config = new LoggingConfiguration(); 

      ConsoleTarget consoleTarget = new ConsoleTarget(); 
      consoleTarget.Layout = "${message} - ${callsite}"; 
      config.AddTarget("console", consoleTarget); 

      LoggingRule rule1 = new LoggingRule("*", LogLevel.Debug, consoleTarget); 
      config.LoggingRules.Add(rule1); 

      LogManager.Configuration = config; 

      Logger logger = LogManager.GetLogger("Example"); 
      logger.Trace("trace log message"); 
      logger.Debug("debug log message"); 
      logger.Info("info log message"); 
      logger.Warn("warn log message"); 
      logger.Error("error log message"); 
      logger.Fatal("fatal log message"); 
     } 
    } 
} 

彙編命令:

mcs /reference:NLog /reference:NLog.dll test.cs -debug 

控制檯輸出:

>mono test.exe 
debug log message - TestMono.Verbose.TestCallsite.Main 
info log message - TestMono.Verbose.TestCallsite.Main 
warn log message - TestMono.Verbose.TestCallsite.Main 
error log message - TestMono.Verbose.TestCallsite.Main 
fatal log message - TestMono.Verbose.TestCallsite.Main 

應該有 「主」 之後是在托架上的行號。

編輯:

與.NET窗戶

控制檯輸出:調用單時

> .\ConsoleApplication1.exe 
debug log message - ConsoleApplication1.TestCallsite.Main(Program.cs:26) 
info log message - ConsoleApplication1.TestCallsite.Main(Program.cs:27) 
warn log message - ConsoleApplication1.TestCallsite.Main(Program.cs:28) 
error log message - ConsoleApplication1.TestCallsite.Main(Program.cs:29) 
fatal log message - ConsoleApplication1.TestCallsite.Main(Program.cs:30) 
+0

我認爲這是有關:http://stackoverflow.com/questions/19252938/can not-get-stacktrace-source-line-information-from-mono-dll – Julian

回答

1

使用--debug標誌:

> mono --debug test.exe 
+0

謝謝,但恐怕不是這樣 - 行號仍然丟失。 – Barbie

+0

對於我的情況(在macOS上將'NLog'與'mono'一起使用)就是這樣。添加'{$ callsite-linenumber'}只生成0,使用'--debug'開始發出正確的行號(動態類除外)。如果你還沒有嘗試過,這個答案不應該被解僱。 – Joe

0

NLOG設有獨立的佈局渲染調用點-電話號碼。不完全知道爲什麼它的獨立,而不是隻是在調用點佈局選項呈現 https://github.com/NLog/NLog/wiki/Callsite-line-number-layout-renderer

${callsite-linenumber:skipFrames=Integer} 

希望給你你需要什麼

+0

感謝您的回答。但是: 1. callsite-linenumber已經是callsite的一部分,因此如果您已經有了callsite,則不需要顯式調用callsite-linenumber。 2. callsite-linenumber對我的環境來說效果不佳,所以我猜想在Linux上使用Mono。 3. callsite正在顯示在windows + .net上運行的相同代碼的行號。我將使用Windows控制檯輸出編輯我的帖子以顯示不同點。 – Barbie

+0

我可以確認'$ {callsite}'和'$ {callsite-linenumber}'使用相同的代碼。後者是一個捷徑。 – Julian