gpt4 book ai didi

c# - .NET 中是否可以进行被动日志记录?

转载 作者:太空狗 更新时间:2023-10-29 18:12:59 26 4
gpt4 key购买 nike

我经常对代码中必须包含的大量日志记录感到沮丧,这让我想知道是否有更好的做事方式。

我不知道这是否已经完成,或者是否有人提出了更好的主意,但我想知道是否有人知道有一种方法可以将记录器“注入(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com