.net 包装日志框架

.net 包装日志框架,.net,logging,log4net,enterprise-library,nlog,.net,Logging,Log4net,Enterprise Library,Nlog,在查找日志框架(log4net、NLog等)时,我发现它们中的大多数都符合非常基本的接口。通过在日志框架和代码之间使用适配器之类的工具,这些接口可以很好地创建一个抽象和单一契约。提供以下接口(汇总): 对于应用程序日志记录,我们不需要更具表现力和明确性的内容吗? 例如,我可能想记录更多字段。也许我想要一个“方法”或“上下文”字段?也许我真的不喜欢这些方法的命名约定。它们不是动词;违反我们标准的东西。这也可能提供了太多的灵活性——谁知道每个开发人员将如何处理日志记录呢 出于这个原因,我很想用更明确

在查找日志框架(log4net、NLog等)时,我发现它们中的大多数都符合非常基本的接口。通过在日志框架和代码之间使用适配器之类的工具,这些接口可以很好地创建一个抽象和单一契约。提供以下接口(汇总):

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

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

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

这是明智的做法吗?这种方法有缺点吗?

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

您考虑了FoDy而不是通用日志吗?跟踪、调试、致命等每个方法都有预期的“message”、“params”和“exception”重载。与Common.Logging一样,在日志库之间切换很容易

我看不出有什么好处。您并不是在抽象您指定的内容。带有对象消息的方法尽可能抽象。当然,您可以将API放在上面,以获得类型安全的API。您知道您的消息将被序列化为字符串,那么为什么必须有显式参数呢?使用匿名类型或“LogMessageType”。为日志创建一个新的API,但它是特定于应用程序的,而不是“抽象的”。看看:@StefanOssendorf:抱歉。更新问题。我想从本质上包装,而不是抽象。正确。另一种说法。当您使用抽象版本(Common.Logging)时,您将失去一些具体库的“更精确”特性(例如NLog或Log4Net)。所以你必须选择哪个更重要。我们使用Common.Logging并接受使用特定混凝土(我们世界中的NLog)的微小“损失”。。。。
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);