2010-11-07 127 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