如何使用带有Seri​​log的postharp来区分日志记录方面?

时间:2018-11-20 19:43:05

标签: c# asp.net-mvc aop postsharp serilog

我是AOP的初学者,我尝试将PostSharpSeriLog一起使用来记录我的MVC application

因此,我以这个sample示例为起点,但我想知道在此示例中是否像这样显式使用记录器:

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

在业务类QueueProcessor中,那么方面在这里有什么价值!我仍然在编写记录代码和业务代码!


有人可以帮助我使用以下方法将注销从MVC项目中分离出来吗 PostSharp.Patterns.Diagnostics.Backends.Serilog

2 个答案:

答案 0 :(得分:3)

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

示例代码中有两种日志记录。您找到了明显的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;
}

现在那个是一个横切关注点,而那个是该示例演示的内容。只需在program.cs中执行以下操作,即可通过PostSharp注入此管道代码:

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

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

  

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

我不确定您对任何AOP框架对业务逻辑代码中的自定义日志记录会有什么期望。您能对此进行扩展吗?还是上面的澄清就足够了?

修改:根据您的评论解决问题

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

答案 1 :(得分:2)

  

在使用LogAttribute方面时,PostSharp会自动生成在执行方法之前和之后发出日志记录的代码。但是有时您会想要编写自己的记录。例如,您可能要记录自定义错误或警告。您可能希望即使禁用跟踪级别日志记录也显示此消息。但是启用该功能后,您希望此消息以正确的缩进显示在正确的上下文中。   对于这些情况,可以使用Logger类提供的方法。

在示例类中,手动添加了一些有关业务逻辑的自定义日志。


首先,您必须从此处下载: https://www.postsharp.net/download

安装插件时,请在Visual Studio中创建一个项目。 在解决方案资源管理器中,通过右键单击项目或代码文件,通过右键单击类或方法名称,可以将PostSharp添加到您的项目中。

默认配置和属性已添加到项目中。 之后,您将更改配置,格式,或者根据需要添加自定义方面类。

继续阅读这些文档将很有用:

https://doc.postsharp.net/logging

https://doc.postsharp.net/serilog