使用下面使用NLog的代码段,如何使用Enterprise Library 5.0 Logging完成此操作?
private Logger _logger;
public NLogger() {
_logger = LogManager.GetCurrentClassLogger();
}
public void Info(string message) {
_logger.Info(message);
}
public void Warn(string message) {
_logger.Warn(message);
}
答案 0 :(得分: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将“category”存储为类别和日志表中的字符串。严重性,优先级和EventID存储为整数。 FormattedMessage是在formatters部分中定义的大量内容,还包括字典的内容(键值对) - 如果使用的话。
类别是一个集合,因为有时您可能希望记录数据库中的所有内容,但某些消息也会写入事件日志和/或向开发人员发送文本消息以使他们的范围垂直向上工作。我工作过的一个地方使用了铱星寻呼机让指定的人知道服务器出现问题,因为他们喜欢登山,他们经常在没有小区覆盖的地方。