【发布时间】:2015-03-11 01:29:24
【问题描述】:
在寻找日志框架(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);
这是否可取,这种方法有什么缺点吗?
【问题讨论】:
-
我没有看到优势。您不是在抽象您指定的内容。带有对象消息的方法尽可能地抽象。当然,您可以将您的 API 放在上面以获得类型安全的 API。你知道你的消息会被序列化成一个字符串,那为什么还要有显式的参数呢?使用匿名类型或“LogMessageType”。为日志构建一个新的 API,但它是特定于应用程序的,而不是“抽象的”。看看:github.com/damianh/LibLog
-
@StefanOssendorf:抱歉。更新的问题。我想从本质上进行包装,而不是抽象。
标签: .net logging log4net enterprise-library nlog