gpt4 book ai didi

c# - 将 log4net 与 Autofac 结合使用

转载 作者:行者123 更新时间:2023-12-02 00:04:49 24 4
gpt4 key购买 nike

我正在尝试将 log4net 与 Autofac 一起使用。我粘贴了此代码 http://autofac.readthedocs.org/en/latest/examples/log4net.html ,和我正在做的 Program.cs/Main()

var iocBuilder = new ContainerBuilder();
iocBuilder.RegisterModule(new LoggingModule());
var iocContainer = iocBuilder.Build();

现在我想立即尝试一下(在下一行),向日志文件写入一行简单的内容。我该怎么做?

我正在考虑这样的事情

var ls = iocContainer.Resolve<LoggingModule>();
ls.Info("the logging is working");

非常感谢

最佳答案

要获取ILog,log4net需要知道使用记录器的类(LogManager.GetLogger(...))。因此,如果没有父类,您就无法解析 ILog。您必须将 ILog 注入(inject)组件内。

public class MyComponent
{
public MyComponent(ILog logger)
{
this._logger = logger;
}

private readonly ILog _logger;

public void Do()
{
this._logger.Info("Log4net OK");
}
}

在应用程序启动中(用于 Asp.net、MVC 的 Global.asax.cs):

// ...
log4net.Config.XmlConfigurator.Configure();
// ...
iocBuilder.RegisterModule(new LoggingModule());
iocBuilder.RegisterType<MyComponent>().AsSelf();

// ...

MyComponent c = iocContainer.Resolve<MyComponent>();
c.Do();

另一个解决方案是为Object注册一个ILog并解析ILog。在这种情况下,不需要该模块。

//在 DI 容器构建器中:

log4net.Config.XmlConfigurator.Configure();
/// ...
ContainerBuilder cb = new ContainerBuilder()
cb.Register(c => LogManager.GetLogger(typeof(Object))).As<ILog>();
IContainer container = cb.Build();

//在我们需要使用记录器的函数中:

ILog logger = container.Resolve<ILog>();
logger.Info("log4net OK");

关于c# - 将 log4net 与 Autofac 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29125250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com