包装日志记录框架

Wrapping Logging Frameworks

在寻找日志框架(log4net、NLog 等)时,我发现它们中的大多数都符合一个非常基本的接口。 Common.Logging interfaces are a good away to create an abstraction and single contract, through the use of adapters and whatnot, between logging frameworks and your code. 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); 

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

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

出于这个原因,我很想用更明确的东西来包装 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);

这种方法可取吗?这种方法有什么缺点吗?

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

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