我不知道是否已经有人这样做过或者有没有更好的想法,但我想知道是否有一种方法可以“注入”一个记录器到应用程序中,以便它被动地监视线程并在发生过程时悄悄地记录,而无需执行像以下这样的操作:
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个不同的版本构建?
我经常使用四个级别:致命、关键、信息、详细。