gpt4 book ai didi

c# - 如何使用带有 Serilog 的 postsharp 来分离日志记录方面?

转载 作者:太空宇宙 更新时间:2023-11-03 19:40:59 50 4
gpt4 key购买 nike

我是 AOP 的初学者,我尝试使用 PostSharpSeriLog 来记录我的 MVC 应用程序.

所以我找到这个 sample作为一个开始的例子,但我想知道如果在这个例子中它明确地使用记录器:

activity.Write(LogLevel.Warning, "The entity {id} has been marked for deletion.", item.Id);

商务舱 QueueProcessor , 那么这里的aspect值是多少呢!我仍然编写日志代码和业务代码!


有人可以帮助我使用以下方法分离 MVC 项目的注销吗PostSharp.Patterns.Diagnostics.Backends.Serilog?

最佳答案

你误解了这个例子,让我澄清一下。

示例代码中有两种日志记录方式。您找到了明显的一个,activity.Write(xxx)。使用像 PostSharp 这样的 AOP 框架不包括这种日志记录。这种日志记录可以看作是业务逻辑的一部分,因为它特定于正在发生的操作。

现在,另一方面:假设您要记录对应用程序中所有方法的每次调用。您想要记录何时调用该方法以及使用什么参数。此外,您还想记录返回值(如果有)。

想象必须为每个方法编写这样的东西:

bool SomeMethod(int input)
{
var sw = Stopwatch.StartNew();
logger.Write($"Started executing {nameof(SomeMethod)} at {DateTime.Now}. Value of {nameof(input)}: {input})";

... // some work
var returnValue = false;

sw.Stop();
logger.Write($"Finished executing {nameof(SomeMethod)}. It took {sw.ElapsedMilliseconds}ms. Returned value: {returnValue}");

return returnValue;
}

现在 that 是一个横切关注点,that 就是示例所展示的内容。此管道代码由 PostSharp 通过在 program.cs 中执行此操作来注入(inject):

using PostSharp.Patterns.Diagnostics;
using PostSharp.Patterns.Diagnostics.Backends.Serilog;
using PostSharp.Samples.Logging.BusinessLogic;
using Serilog;

// Add logging to all methods of this project.
[assembly: Log]
...

更多详情 here

现在,最后,让我们回到你的问题:

Could someone help me to separate the logging out of the MVC project using PostSharp.Patterns.Diagnostics.Backends.Serilog?

我不确定您对业务逻辑代码中自定义日志记录的任何 AOP 框架有何期望。你能扩展一下吗?还是以上说明就足够了?

编辑:解决您评论中的问题

  1. 我不认为 PostSharp 的示例是 DDD 示例。它们只是证明用于方面的记录器也可用于记录与业务相关的信息(实体已标记为删除。)在 DDD 中,如果此信息与某人或某物相关,则它将是可以使用方面记录的事件.
  2. 通过使用审计方面来捕获事件来创建审计跟踪无疑是正确的方法。至于表示层,您可以使用一些中间件来记录请求和响应,如演示的 here例如。在这种情况下,无需使用 PostSharp。根据您 DDD 应用程序中的事件代码,您也许能够在事件发送之前或之后拦截事件,因此您也可以在那里编写自己的日志记录,从而消除对 PostSharp 的需求。
  3. 您是否尝试过已标记为重复的问题的答案中所听的步骤?

关于c# - 如何使用带有 Serilog 的 postsharp 来分离日志记录方面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53400429/

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