2014-02-22 68 views
16

爲了能夠跟蹤哪些類/方法已寫入日誌,我正在使用NLog並遵循建議的模式,即在每個類上都有一個日誌聲明。我發現這對於每次寫入日誌都有一個頂層的「堆棧跟蹤」非常有用。在NLog中添加方法名稱

我的代碼中使用看起來像這樣:

class SomeClass { 

    private static readonly Logger logger = LogManager.GetCurrentClassLogger(); 
    void DoStuff() { 
     logger.Debug("stuff"); } 

} 

我最近有要求我的單個項目寫入到3個單獨的日誌文件,而要做到這一點,我添加了多個記錄器和目標,那麼具體: https://stackoverflow.com/a/21711838/191206

但是,現在在我的日誌文件中,我丟失了類名稱。現在它只是寫入我在NLog.config中指定的日誌名稱。我曾與一個電話視爲簡單的添加方法名自己

System.Reflection.MethodBase.GetCurrentMethod(); // use Name property 

或使用的東西在別人的思考像this

不過,我想知道如果NLOG有一些內置到這一點,我失蹤? Debug()方法我只能看到寫入字符串的能力,參數&可選擇格式化。

這是內置到NLog中的嗎?

+3

你檢查過['$ {調用點}'佈局渲染器](https://github.com/nlog/nlog/wiki/Callsite-Layout-Renderer)? – nemesv

+0

就是這樣 - 你可以用這個解決方案回答這個問題,所以我可以給你適當的信用?謝謝 – dferraro

回答

28

有一個built in layout renderer called ${callsite},您可以使用,包括你的日誌條目調用點信息(類名,方法名和源的信息):

<targets> 
    <target 
    name="task1File" 
    xsi:type="File" 
    layout="${callsite} - ${message}" 
    fileName="${basedir}../Data/debugLog1.txt" 
    archiveAboveSize ="5000000" 
    maxArchiveFiles="2"/> 
    <target 
    name="task2File" 
    xsi:type="File" 
    layout="${callsite} - ${message}" 
    fileName="${basedir}../Data/debugLog2.txt" 
    archiveAboveSize ="5000000" 
    maxArchiveFiles="2"/> 
</targets>