代码之家  ›  专栏  ›  技术社区  ›  Anyname Donotcare

如何使用postsharp和serilog来分离日志方面?

  •  0
  • Anyname Donotcare  · 技术社区  · 6 年前

    我是一个初学者 AOP 我试着用 PostSharp 具有 SeriLog 记录我的日志 MVC application .

    所以我找到了这个 sample 示例作为开始,但我想知道在这个示例中,它是否像这样显式地使用记录器:

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

    在商务舱 QueueProcessor 那么这方面的价值是什么呢?我仍然编写日志代码和业务代码!.


    有人能帮我用 postsharp.patterns.diagnostics.backends.serilog ?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Peter Bons    6 年前

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

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

    现在 那个 是一个跨领域的问题 那个 就是这个例子所展示的。这个管道代码是通过postsharp注入的,只需在 program.cs :

    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. 我不认为Postshap的例子是DDD的例子。它们仅仅表明用于方面的记录器也可以用于在DDD中记录与业务相关的信息(实体被标记为删除)。如果此信息与某人或某物相关,则它将是可以使用方面记录的事件。
    2. 通过使用审计方面来捕获事件来创建审计跟踪当然是正确的方法。至于表示层,您可以使用一些中间件来记录请求和响应,如 here 例如。在这种情况下,不需要使用postsharp。根据DDD应用程序中的事件代码,您也可以在事件发送之前或之后截取事件,这样您也可以在那里编写自己的日志,从而消除了对PostSharp的需要。
    3. 您是否尝试过在已标记为副本的问题的答案中聆听的步骤?
        2
  •  1
  •   Django    6 年前

    当使用logattribute特性时,postsharp会自动生成代码,在方法执行前后发出日志记录。但有时你会想写自己的记录。例如,您可能需要记录一个自定义错误或警告。即使禁用跟踪级别日志记录,也可能希望显示此消息。但是当它被启用时,您希望这个消息以正确的缩进显示在正确的上下文中。 对于这些场景,可以使用logger类提供的方法。

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


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

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

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

    继续阅读这些文件将非常有用:

    https://doc.postsharp.net/logging

    https://doc.postsharp.net/serilog