使用依赖项注入在windows服务中实现log4net



如果在每10分钟运行一次的windows服务的日志文件中发生错误,我想写一个错误。我使用的是.net框架4.6,并使用autofac的依赖注入。我想使用Microsoft.Extensions.Logging dll。

我在Windows服务中完成了这项工作,使用ASP.Net 4.8和Autofac for DI。我也不必在AssemblyInfo.cs中添加任何程序集信息,因为我将配置信息放在app.config中,而不是单独的配置文件中。

app.config将其放在<configuration>之后的app.config文件的顶部

<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>

log4net配置将其放在app.config文件的底部,就在</configuration>内部。它将打印到您的visual studio输出窗口和名为myservice.log 的文件中

<log4net>
<root>
<level value="ALL" />
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<appender name="console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message%newline" />
</layout>
</appender>
<appender name="file" type="log4net.Appender.RollingFileAppender">
<file value="myservice.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>

程序.cs

static void Main()
{
ContainerBuilder cb = new ContainerBuilder();
cb.RegisterType<MyService>().AsSelf().InstancePerLifetimeScope();
log4net.Config.XmlConfigurator.Configure();
ServiceBase.Run(container.Resolve<MyService>());
}

MyService.cs

private readonly ILog _logger;
public MyService(ILog logger)
{
InitializeComponent();
_logger = logger;
_logger.Info("Hello World!");
}

最新更新