使用依赖注入在 windows 服务中实现 log4net
Implement log4net in a windows service using dependency injection
如果在每 10 分钟运行一次的 windows 服务的日志文件中发生错误,我想写入错误。我正在使用 .net framework 4.6 并通过 autofac 使用依赖注入。我想使用 Microsoft.Extensions.Logging dll。
我在 Windows 服务中使用 ASP.Net 4.8 和用于 DI 的 Autofac 完成了此操作。我也不必在 AssemblyInfo.cs
中添加任何程序集信息,因为我将配置信息放在 app.config
中,而不是单独的配置文件中。
app.config 将其放在 app.config
文件的顶部,紧跟在 <configuration>
之后
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
log4net 配置 把它放在 app.config
文件的底部,就在 </configuration>
里面。它将打印到您的 visual studio 输出 window 和一个名为 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>
Program.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!");
}
如果在每 10 分钟运行一次的 windows 服务的日志文件中发生错误,我想写入错误。我正在使用 .net framework 4.6 并通过 autofac 使用依赖注入。我想使用 Microsoft.Extensions.Logging dll。
我在 Windows 服务中使用 ASP.Net 4.8 和用于 DI 的 Autofac 完成了此操作。我也不必在 AssemblyInfo.cs
中添加任何程序集信息,因为我将配置信息放在 app.config
中,而不是单独的配置文件中。
app.config 将其放在 app.config
文件的顶部,紧跟在 <configuration>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
log4net 配置 把它放在 app.config
文件的底部,就在 </configuration>
里面。它将打印到您的 visual studio 输出 window 和一个名为 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>
Program.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!");
}