2013-12-13 204 views
2

我已經創建了一個通用實現ILogger並在此包裝器中實現了NLog實現方法。 我的問題是我已經在我的解決方案中啓用了整個namspace的錯誤嚴重性,但我也希望在「Employee」命名空間下的類的信息級別診斷,所以我有另一個規則設置此名稱空間下的類符合Info級別日誌記錄。但是,當我只記錄錯誤和致命的記錄這些命名空間下的類。當我調試我可以看到IsInfoEnabled()來爲這些類的記錄器實例爲false? 我覺得他們的方式我配置了我的包裝類似乎是錯誤的? 可以有人建議。日誌級別未啓用NLog日誌記錄器

通用ILogger接口 公共接口ILogger {

bool Trace(string message, params String[] args); 


    bool Info(string message, params String[] args); 


    bool Error(string message, params String[] args); 


    bool Fatal(string message, params String[] args); 


    bool Error(string message, Exception ex, String[] args); 


    bool Fatal(string message, Exception ex, params String[] args); 
} 

實施ILogger接口的

using NLog; 

class NLogImpl : ILogger 
{ 

    NLog.Logger logger = null; 


    public NLogImpl(string source) 
    { 
     logger = LogManager.GetLogger(source); 
    }   


    bool ILogger.Trace(string message ,params String[] args) 
    { 

     logger.Trace(BuildArgumentsWithMessage(message , args)); 
     return true; 
    }... 

使用通用ILogger 該類僅記錄錯誤和致命的消息,但沒有任何其他級別類即使在配置文件中,我已啓用Info此命名空間

public class MainTechDetails 
    { 
     private static ILogger logger = CommonLogger.GetLogger("MainTechDetails"); 

     public void LogMainTechDetails() 
     { 
     logger.Trace("Sample trace message"); 
     logger.Info("Sample informational message"); 
     logger.Error("Sample error message"); 
     logger.Fatal("Sample fatal error message"); 
     } 
    } 

我有一個目標和2條規則這一目標

<target xsi:type="File" 
      name="logFile" 
      fileName="D:\LogInformation.log" 
      layout="${date} ${callsite} ${message}"/> 
    </targets> 

    <rules> 
    <logger name="CustomLoggingNlog.Employee.*" minlevel="Info" writeTo="logFile" /> 
    <logger name="*" minlevel="Error" writeTo="logFile"/>  
    </rules> 

回答

1

它看起來像你有幾個問題:對「CustomLoggingNLog.Employee

  1. 已配置日誌記錄規則。 「和」「在您的示例應用程序中,您將檢索一個名爲」MainTechDetails「的記錄器,您應該根據完全命名空間限定名稱:CustomLoggingNLog.Employee.MainTechDetails檢索記錄器或者,如果您的泛型實現允許使用類型:

    CommonLogger.GetLogger(typeof運算(MainTechDetails));

  2. 你的包裝,如寫,將無法正常保持通話網站(如果你使用NLOG的調用點LayoutRenderer),而不是讓通話你在代碼的地方調用你的記錄器,你會從記錄器的內部得到調用網站,這可能不是很有用。請看我在這個問題中的答案,瞭解如何包裝NLog的例子。在調用點被保留:

Nlog Callsite is wrong when wrapper is used

祝你好運!

+0

嘿謝謝!它的工作。 – Somu