【发布时间】:2010-10-15 19:55:30
【问题描述】:
我经常对代码中必须包含的大量日志记录感到沮丧,这让我想知道是否有更好的处理方式。
我不知道这是否已经完成,或者是否有人提出了更好的主意,但我想知道是否有任何人知道将记录器“注入”到应用程序中,以便它被动地监视线程并在进程发生时安静地记录进程,而无需执行以下操作:
public void MyProcess(int a, string b, object c)
{
log(
String.Format(
"Entering process MyProcess with arguments: [a] = [{0}]; [b] = [{1}]; [c] = [{2}]",
a.ToString(),
b,
c.ToString()
);
try
{
int d = DoStuff(a)
log(
String.Format(
"DoStuff({0}) returned value {1}",
a.ToString(),
d.ToString()
)
);
}
catch (Exception ex)
{
log(
String.Format("An exception occurred during process DoStuff({0})\nException:\n{1}",
a.ToString(),
ex.ToString())
)
}
}
如果我可以对我的记录器说,那就太好了:
Monitor(MyClass.MyMethod)
然后它将监视该方法内部发生的所有事情,包括传入的参数以及传递给这些方法的方法调用和值、发生的异常等。
过去有没有人实现过类似的东西?它甚至可以被实施吗?以这种方式登录只是一个白日梦吗?
我很想设计一些可以做到这一点的东西,但我什至不知道从哪里开始。当然,我也不想重新发明轮子,如果已经完成了,如果有人能指出我正确的方向,那就太好了。
如有任何建议,我们将不胜感激......
编辑:我想我会评论一个关于日志中所需详细程度的答案。经常需要提供可配置的日志记录级别,这样如果配置指定了详细的日志记录,那么所有内容都会被记录,而如果配置了关键日志记录,那么只会记录某些信息以及异常。如果配置了致命日志记录,则只会记录导致应用程序死亡的信息。这样的事情是可配置的,还是 AOP 需要 3 或 4 个不同的构建,具体取决于日志记录级别的数量?
我经常使用 4 个级别:致命、关键、信息、详细
【问题讨论】:
-
这可以在运行时进行配置,但是在运行时运行的记录器仍然会接收所有信息,然后必须决定记录什么。如果您不希望将所有信息的开销传递给记录器,那么唯一的方法就是使用不同的构建。
标签: c# .net asp.net vb.net .net-3.5