我经常对代码中必须包含的大量日志记录感到沮丧,这让我想知道是否有更好的做事方式。
我不知道这是否已经完成,或者是否有人提出了更好的主意,但我想知道是否有人知道有一种方法可以将记录器“注入(inject)”到应用程序中,以便它被动地监视线程并在流程发生时安静地记录流程,而无需执行以下操作:
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 个级别:致命、严重、信息、详细
最佳答案
您可以使用 PostSharp记录“周围”的方法。这正是 AOP 擅长的事情。您可能想从 Log4PostSharp 开始- 专门用于日志记录的插件。
关于c# - .NET 中是否可以进行被动日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/687867/