包装日志框架

时间:2015-01-13 06:40:39

标签: .net logging log4net enterprise-library nlog

在寻找日志框架(log4net,NLog等)时,我发现它们大多数都符合一个非常基本的界面。通过在日志记录框架和代码之间使用适配器和诸如此类的东西,Common.Logging接口可以很好地创建抽象和单一契约。 Common.Logging提供以下界面(总结):

void Trace(object message);  
void Debug(object message);  
void Info(object message);  
void Warn(object message);  
void Error(object message);  
void Fatal(object message); 

对于应用程序日志记录,我们不想要更具表现力和更明确的内容吗?

例如,我可能想记录更多字段。也许我想要一个"方法"或"上下文"领域?也许我真的不喜欢这些方法的命名惯例。它们不是动词;违反我们标准的东西。这也提供了太多的灵活性 - 谁知道每个开发人员将如何处理日志记录。

出于这个原因,我很想用更明确的内容包装Common.Logging

void LogTrace(string context, string message, string parameters);
void LogDebug(string context, string message, string parameters);
void LogInfo(string context, string message, string parameters);
void LogWarning(string context, string message, string parameters);
void LogError(string context, string message, string parameters);
void LogError(string context, string message, string parameters, Exception ex);
void LogFatal(string context, string message, string parameters);
void LogFatal(string context, string message, string parameters, Exception ex);

这是否可取,这种做法有任何缺点吗?

2 个答案:

答案 0 :(得分:1)

通过在不同的日志框架周围使用包装器,您将只使用日志框架的常用功能。每个日志记录框架都有其优点和缺点,在大多数情况下,您应该根据日志记录的要求选择日志框架并查看这些点。

答案 1 :(得分:1)

您是否考虑过Fody下的Anotar而不是Common.Logging? Trace,Debug,Fatal等每个方法都有预期的'message','params'和'exception'重载。与Common.Logging一样,很容易在日志记录库之间切换。