2011-12-05 52 views
0

我使用n日誌2.0和this interesting read後,我試圖這樣申請條件,一個簡單的佈局:n日誌有條件的佈局

layout="${message:when=logger==A}" 
layout="${message:when=logger=='A'}" 
layout="${message:when='logger==A'}" 

不僅這些都沒有任何影響,他們也沒有拋出錯誤看起來是這樣的條件,默默吞嚥某處(throwExceptions設置爲true)

  1. 如何有條件的佈局工作?他們甚至工作
  2. 如果出現錯誤/無法識別,nLog是否可以拋出異常?

這是完整的代碼,這是一個基本的控制檯應用程序。

main.cs:

class Program 
{ 
    static void Main(string[] args) 
    { 
    NLog.LogManager.GetLogger("A").Info("from A"); 
    NLog.LogManager.GetLogger("B").Info("from B"); 
    } 
} 

NLog.config(可執行目錄):

<?xml version="1.0" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     throwExceptions="true"> 

    <targets> 
    <target name="main" xsi:type="File" fileName="my.log" 
      deleteOldFileOnStartup="true" keepFileOpen="true" 
      layout="${callsite} ${message:when=logger=='A'}"/> 
    </targets> 

    <rules> 
    <logger name="*" minlevel="Trace" writeTo="main" /> 
    </rules> 
</nlog> 

輸出:

ConsoleApplication1.Program.Main from A -> this should only log ${callsite} 
ConsoleApplication1.Program.Main from B 
+0

你能告訴我完整的nlog配置嗎? – kolbasov

+0

@justips更新! – stijn

回答

1

謝謝!嘗試設置記錄器名稱:

<logger name="A" minlevel="Trace" writeTo="main" /> 
<logger name="B" minlevel="Trace" writeTo="main" /> 

現在有兩個記錄器,它們在代碼中可用 - 條件應該工作。

+0

這不會產生預期的效果:雖然它不會記錄來自任何記錄器的消息,但它會這樣做,因爲所有其他記錄器都會被拒絕,而不是因爲條件格式。我更新了這個問題,使其更加清晰。 – stijn

+0

如果我在使用GetLogger(「A」)時理解nlog配置,它必須配置爲。因此,您應該爲兩個記錄器添加配置。請參閱最新的答案。 – kolbasov

+0

這是不正確的,你可以使用通配符來選擇記錄器。 http://nlog-project.org/wiki/Configuration_file#Rules – stijn