如何注入Log4Net日志通过城堡.温莎在NServiceBus

本文关键字:城堡 NServiceBus 日志 何注入 注入 Log4Net | 更新日期: 2023-09-27 18:08:31

我希望NServiceBus使用Castle.Windsor容器提供的日志记录器,而不是我自己直接提供它。有办法做到这一点吗?

public class EndPointConfig : IConfigureThisEndpoint, IWantCustomInitialization, IWantCustomLogging
{
    private ILogger _logger = NullLogger.Instance;
    public ILogger Logger
    {
        get { return _logger; }
        set { _logger = value; }
    }

    public void Init()
    {
        SetLoggingLibrary.Log4Net(null, Logger);
        Configure.With()
            .CastleWindsorBuilder(Host.Init.CreateSubsystems())
            .RunTimeoutManager()
            .UseNHibernateTimeoutPersister();
    }
}

Host.Init.CreateSubsystems()返回一个Castle.Windsor容器,带有一个注册的记录器。

如何注入Log4Net日志通过城堡.温莎在NServiceBus

如果你提供了一个已经启动的容器,并且有一个注册到CastleWindsorBuilder的logger,那么就没有别的事可做了:NServiceBus将根据log4net配置使用你的logger设置(单独的文件或在app.config中根据logger在容器中的注册)

SetLoggingLibrary。Log4Net (null,记录器);不需要。

public class MessageEndpoint : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
    public void Init()
    {
        var container = new WindsorContainer();
        var installerFactory = new MyInstallerFactory();
        container.Install(FromAssembly.This(installerFactory));
        var logger = container.Resolve<ILogger>();
        logger.Debug("Container bootstrapped");
        Configure.With()
                 .DisableTimeoutManager()
                 .CastleWindsorBuilder(container)
                 .JsonSerializer();
        logger.Debug("Bus configured");
    }
}