应用程序日志记录最佳实践 - 如何管理散布在代码中的日志记录语句?
Application logging best practices - How to manage logging statements strewn all over your code?
我刚刚在 Whosebug 上阅读了 this post 并且我没有看到日志记录的一个方面。独立于特定的日志记录框架,人们如何处理这样一个事实,即大多数方法会导致 logging/trace 语句遍布整个代码,这使得实际查看代码库的内容变得更加困难。这只是生活的现实还是有 techniques/mechanisms 来解决这个问题,例如:
- 一种有选择地隐藏和显示所有日志记录和跟踪语句的方法
- 使用 class 或启用日志记录的方法属性
- ...?
我在 .NET/Visual 工作室工作,但我想我的问题一般适用。
最终,如果您想要 logging/tracing 在您的应用程序中,那么在您的源代码中就无法逃避该代码。
理论上,您可以使用面向方面的编程 (AOP
) 工具,例如 PostSharp 来挂钩 logging/tracing 调用,但要注意方法中的调用跟踪,例如
public void Foo()
{
Trace.WriteLine("About to call web service");
Trace.WriteLine("Updating database with data");
}
对于 "hide" 从视图中看到的内容,您无能为力。理论上你可以有一个用 Conditional
属性修饰的方法...
[Conditional("DEBUG")]
public void Trace(string message)
{
Trace.WriteLine(message);
}
...以便从 release
构建中删除该方法及其调用。但是,如果您需要为代码的发布版本进行日志记录,那不是很有帮助!
我刚刚在 Whosebug 上阅读了 this post 并且我没有看到日志记录的一个方面。独立于特定的日志记录框架,人们如何处理这样一个事实,即大多数方法会导致 logging/trace 语句遍布整个代码,这使得实际查看代码库的内容变得更加困难。这只是生活的现实还是有 techniques/mechanisms 来解决这个问题,例如:
- 一种有选择地隐藏和显示所有日志记录和跟踪语句的方法
- 使用 class 或启用日志记录的方法属性
- ...?
我在 .NET/Visual 工作室工作,但我想我的问题一般适用。
最终,如果您想要 logging/tracing 在您的应用程序中,那么在您的源代码中就无法逃避该代码。
理论上,您可以使用面向方面的编程 (AOP
) 工具,例如 PostSharp 来挂钩 logging/tracing 调用,但要注意方法中的调用跟踪,例如
public void Foo()
{
Trace.WriteLine("About to call web service");
Trace.WriteLine("Updating database with data");
}
对于 "hide" 从视图中看到的内容,您无能为力。理论上你可以有一个用 Conditional
属性修饰的方法...
[Conditional("DEBUG")]
public void Trace(string message)
{
Trace.WriteLine(message);
}
...以便从 release
构建中删除该方法及其调用。但是,如果您需要为代码的发布版本进行日志记录,那不是很有帮助!