将 log4net 与 Autofac 结合使用
Using log4net with Autofac
我正在尝试将 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(...)
) 的 class。因此,您无法在没有父项 class 的情况下解析 ILog
。您必须在组件中注入 ILog
。
public class MyComponent
{
public MyComponent(ILog logger)
{
this._logger = logger;
}
private readonly ILog _logger;
public void Do()
{
this._logger.Info("Log4net OK");
}
}
在应用程序启动中(Global.asax.cs for Asp.net,MVC):
// ...
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");
我正在尝试将 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(...)
) 的 class。因此,您无法在没有父项 class 的情况下解析 ILog
。您必须在组件中注入 ILog
。
public class MyComponent
{
public MyComponent(ILog logger)
{
this._logger = logger;
}
private readonly ILog _logger;
public void Do()
{
this._logger.Info("Log4net OK");
}
}
在应用程序启动中(Global.asax.cs for Asp.net,MVC):
// ...
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");