Castle:如何在日志拦截器中获得正确的ILogger?

时间:2010-11-25 07:31:54

标签: castle-windsor

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

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

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

1 个答案:

答案 0 :(得分:4)

在构造函数中依赖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);
        //..
    }
}