我想做以下事情:
假设我在名为LoggingAspect的类中实现了日志记录方面。 我想配置一个完整的程序集,使用多播属性工具登录某个日志级别。现在假设我希望程序集中的特定类具有稍微不同的日志级别,我希望装饰整个类或该类中的特定方法,从而获得具有指定类或方法指定级别的日志消息。
我的问题是:
由于
答案 0 :(得分:0)
在阅读PostSharp文档后,似乎解决方案是使用aspect属性注释方法,然后指定AttributeReplace = true。这是我的问题的完整解决方案。
假设我在名为LoggingAspectAttribute的类中定义了一个日志记录方面,该类在构造函数上获取TraceLevel。在AssemblyInfo.cs上,我添加了以下定义:
[assembly: TracingAspect(TraceLevel.Info,
AttributeTargetTypes = "PostSharp2.*",
AttributeTargetTypeAttributes = MulticastAttributes.Public,
AttributeTargetMemberAttributes = MulticastAttributes.Private | MulticastAttributes.Public)]
PostSharp2只是我用来测试我的解决方案的程序集的名称。此定义导致我的所有跟踪都与Information TraceLevel一起使用。
要覆盖此定义,请执行以下操作:
[TracingAspect(TraceLevel.Warning, AttributeReplace = true)]
private static void Bar()
{
Console.WriteLine("Inside Bar");
}
这会导致Bar的跟踪消息与Warning TraceLevel一起使用,所有其他消息都保留在Information trace级别。
现在,如果我将省略AttributeReplace属性并保留属性注释,如下所示:
[TracingAspect(TraceLevel.Warning)]
private static void Bar()
{
Console.WriteLine("Inside Bar");
}
我会看到来自Bar的2条跟踪消息。一个具有信息级别,另一个具有警告级别。
希望能帮助某人。