我是AOP
的初学者,我尝试将PostSharp
与SeriLog
一起使用来记录我的MVC application
。
因此,我以这个sample示例为起点,但我想知道在此示例中是否像这样显式使用记录器:
activity.Write(LogLevel.Warning, "The entity {id} has been marked for deletion.", item.Id);
在业务类QueueProcessor中,那么方面在这里有什么价值!我仍然在编写记录代码和业务代码!
有人可以帮助我使用以下方法将注销从MVC项目中分离出来吗 PostSharp.Patterns.Diagnostics.Backends.Serilog ?
答案 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 :(得分:2)
在使用LogAttribute方面时,PostSharp会自动生成在执行方法之前和之后发出日志记录的代码。但是有时您会想要编写自己的记录。例如,您可能要记录自定义错误或警告。您可能希望即使禁用跟踪级别日志记录也显示此消息。但是启用该功能后,您希望此消息以正确的缩进显示在正确的上下文中。 对于这些情况,可以使用Logger类提供的方法。
在示例类中,手动添加了一些有关业务逻辑的自定义日志。
首先,您必须从此处下载: https://www.postsharp.net/download
安装插件时,请在Visual Studio中创建一个项目。 在解决方案资源管理器中,通过右键单击项目或代码文件,通过右键单击类或方法名称,可以将PostSharp添加到您的项目中。
默认配置和属性已添加到项目中。 之后,您将更改配置,格式,或者根据需要添加自定义方面类。
继续阅读这些文档将很有用: