0

我想做以下事情:

假设我在一个名为 LoggingAspect 的类中实现了一个日志记录方面。我想使用多播属性工具配置整个程序集以在某个日志级别记录。现在假设我希望程序集中的特定类具有稍微不同的日志级别,我想装饰整个类或该类中的特定方法,从而获得具有指定类或方法指定级别的日志消息。

我的问题是:

  1. 是否可以在 PostSharp 中做到这一点?
  2. 如果可以,请具体说明如何?

谢谢

4

1 回答 1

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 的跟踪消息带有警告跟踪级别,而所有其他消息都保留在信息跟踪级别。

现在,如果我将省略 AttributeReplace 属性并保留属性注释,如下所示:

[TracingAspect(TraceLevel.Warning)]
private static void Bar()
{
    Console.WriteLine("Inside Bar");
}

我将看到来自 Bar 的 2 条跟踪消息。一个具有信息级别,另一个具有警告级别。

希望对某人有所帮助。

于 2012-06-15T16:39:27.837 回答