2010-11-07 161 views
3

使用下面使用NLog的代碼片段如何使用Enterprise Library 5.0 Logging完成此操作?NLog到企業庫

private Logger _logger; 
    public NLogger() {    
     _logger = LogManager.GetCurrentClassLogger(); 
    } 

    public void Info(string message) { 
     _logger.Info(message); 
    } 

    public void Warn(string message) { 
     _logger.Warn(message); 
    } 

回答

5

您正在尋找這樣的事情:

private LogWriter _logger; 
public void EntLibLogger() 
{ 
    _logger = EnterpriseLibraryContainer.Current.GetInstance<LogWriter>(); ; 
} 

public void Info(string message) 
{ 
    LogEntry log = new LogEntry(); 
    log.Message = message; 
    log.Categories.Add("Information"); 
    log.Priority = Priority.Normal; 
    log.Severity = TraceEventType.Information; 
    _logger.Write(log); 
} 

public void Warn(string message) 
{ 
    LogEntry log = new LogEntry(); 
    log.Message = message; 
    log.Categories.Add("Warning"); 
    log.Priority = Priority.High; 
    log.Severity = TraceEventType.Warning; 
    _logger.Write(log); 
} 

public void Error(string message, int EventID, Dictionary<String,String> dictMessage) 
{ 
    LogEntry log = new LogEntry(); 
    log.Message = message; 
    log.Categories.Add("Error"); 
    log.Priority = Priority.Highest; 
    log.Severity = TraceEventType.Error; 
    log.EventId = EventID; 
    _logger.Write(log, dictMessage); 
} 

中的app.config設置的配置設置是繁瑣位。

我的建議是每個調用使EventID全球唯一(系統文檔始終包含帶有這些數字的電子表格和這些出現的項目/文件/行號)。這樣,如果應用程序處於生產狀態,則很可能會從日誌中獲得1行,並且必須能夠識別此日誌記錄調用來自源的位置。我通常爲調試目的添加一個本地變量及其值的字典。一個地方想要記錄以前的值,因此審計事件總是包含一個字典。

默認情況下,它在數據庫中記錄日誌的方式,Entlib將「類別」作爲字符串存儲在類別和日誌表中。嚴重性,優先級和EventID以整數形式存儲。 FormattedMessage是在格式化程序部分定義的大量東西,還包括字典的內容(鍵值對)(如果使用的話)。

分類是一個集合,因爲有可能是要記錄在數據庫中的一切一定時間,但某些消息也寫入到事件日誌和/或發送dev目錄下的文本消息讓他們的腰包垂直中儘快制定。我曾工作過的一個地方使用銥星尋呼機讓被指定的人知道服務器故障,因爲他們喜歡登山,他們經常沒有信號覆蓋存在。

+1

謝謝你的代碼和非常詳細的解釋。兩人對我的幫助很大。 – Mike 2010-11-08 04:34:27