【问题标题】:Logging to multiple log files with Postsharp and log4net使用 Postsharp 和 log4net 记录到多个日志文件
【发布时间】:2012-06-20 20:59:29
【问题描述】:

我有一个从多个服务提供商那里获取数据(通常是 exe 文件和文本文件)的系统,我的系统获取这些数据并对其进行一些工作(基本上分析其行为)。

我正在使用Log4Net 生成日志文件,并且我希望为每个服务提供商提供单独的日志文件。

直到现在(因为我只有一个服务提供商)我使用Postsharp 来记录/跟踪我的系统。基本上我创建了包含以下代码的属性:

Public class LogAttribute : OnMethodBoundaryAspect 
{
     private static ILog = LogManager.GetLogger();

     public override void OnEntry(MethodExecutionEventArgs eventArgs)
     {
           //Log some stuff...
     }

     //some other code
}

我添加了这个或这种属性(我对不同的日志记录策略有不同的属性),并将这些属性附加到我想要记录的不同方法/程序集。

问题

我可以使用Postsharp根据使用被记录方法的服务解码相关的日志文件吗? (一些方法和类被不止一个服务提供商使用)。

如果我使用 Autofac 注入我的依赖项有帮助,那么也许我可以在运行时解决日志?

【问题讨论】:

    标签: .net c#-4.0 log4net autofac postsharp


    【解决方案1】:

    您可以根据当前类或命名空间明确选择不同的日志文件。我无法帮助您使用 Autofac 或 log4net,但关于 PostSharp,我建议:

    1. 将日志字段设为 [NonSerialized] 实例字段(而不是静态字段)。
    2. 重写 RuntimeInitialize 方法并根据需要初始化日志字段(您将收到目标方法的 MethodInfo 作为参数)

    【讨论】:

    • 10X 为您解答。但不幸的是,这还不够。当每个类都附加到特定的记录器时,您的建议会有所帮助,但是如果不同的提供者使用相同的类方法,我将无法知道哪个提供者调用了这个方法。
    • 我认为你应该更准确地回答你的问题。如果提供者依赖于正在执行的类的实例,我想该实例应该实现一个公开该接口的接口。然后,将args.Instance 投射到这个接口并从那里访问记录器。
    猜你喜欢
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 2011-02-12
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多