我正在遵循http://doc.postsharp.net/add-logging中提到的步骤。 Visual Studio版本是2017年,并安装了PostSharp 5.0.28扩展。将控制台后端的日志方面添加到整个项目时,将添加GlobalAspect.cs文件,但输出不显示日志跟踪。但是当我将[Log]属性应用于方法时,会看到日志跟踪。为什么GlobalAspect中的定义不适用?
using PostSharp.Patterns.Diagnostics;
namespace ConsoleApp1
{
[Log(AttributeExclude = true)]
public class Program
{
static void Main(string[] args)
{
LoggingServices.DefaultBackend = new PostSharp.Patterns.Diagnostics.Backends.Console.ConsoleLoggingBackend();
}
public static void f()
{
}
}
}
我在console和dll的GlobalAspects.cs文件中有以下条目。虽然它在dll中工作,但控制台却没有。
[assembly: Log(AttributeTargetTypeAttributes=MulticastAttributes.Public, AttributeTargetMemberAttributes=MulticastAttributes.Public)]
答案 0 :(得分:0)
不幸的是,GlobalAspect似乎对控制台应用程序没有影响。在类库中,它确实工作得很好。
答案 1 :(得分:0)
在程序集级别应用[Log]
方面时,它会根据指定的规则传播到程序集中的方法。
您可以设置AttributeTargetTypeAttributes
,AttributeTargetMemberAttributes
等属性,以指定是否要定位公共,私有,实例,静态方法等。您还可以指定命名空间,类型和成员名称。
这些属性的默认值可能与您想要的不一致。您需要确保指定的属性与所需目标方法的特征匹配。
[Log(AttributeTargetTypeAttributes = MulticastAttributes.Public, AttributeTargetMemberAttributes = MulticastAttributes.AnyVisibility)]
您可以在此文档页面找到更多详细信息:http://doc.postsharp.net/attribute-multicasting