【问题标题】:Castle: How can i get the correct ILogger in the logging interceptor?Castle:如何在日志拦截器中获得正确的 ILogger?
【发布时间】:2010-11-25 07:31:54
【问题描述】:

如果您在 Castle Windsor 中使用 LoggingFacility,如果您的类中有可选的记录器依赖项(Castle 可以将记录器注入的 ILogger 属性),容器将自动解析与您的类关联的记录器,但我该如何利用如果我想使用 AOP(拦截器方法)实现日志记录,该设施?我基本上想写这样的东西:

    public void Intercept(IInvocation invocation)
    {
        ILogger logger = LogManager.GetLogger(invocation.TargetType);
        //..
    }

但是Castle 框架中没有LogManager 可言。解决这个问题的最佳方法是什么?我应该忽略设施方法并直接在拦截器中使用 log4net 吗?

【问题讨论】:

    标签: castle-windsor


    【解决方案1】:

    在构造函数中依赖 Castle.Core.Logging.ILoggerFactory 并在 Intercept 方法中从工厂创建记录器

    public class LoggingInterceptor : IInterceptor
    {
        readonly ILoggingFactory loggingFactory;
    
        public LoggingInterceptor(ILoggingFactory loggingFactory)
        {
            this.loggingFactory = loggingFactory;
        }
    
        public void Intercept(IInvocation invocation)
        {
            ILogger logger = loggingFactory.Create(invocation.TargetType);
            //..
        }
    }
    

    【讨论】:

    • 在 Castle 的后续版本中,ILoggingFactory 被称为 ILoggerFactory
    猜你喜欢
    • 1970-01-01
    • 2010-10-24
    • 2019-10-20
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2016-11-15
    相关资源
    最近更新 更多