作为Windows服务或者Linux守护进程,还需要添加一些配置。
内置的日志记录想要写入本地文件中,需要自己写一些实现。为了写本地的日志文件,我集成了常用的log4net第三方插件,非常方便。
支持 Windows服务 或 Linux守护进程
-
若要支持Windows服务,需要NuGet安装
Microsoft.Extensions.Hosting.WindowsServices
。
-
若要支持Linux守护进程,需要NuGet安装
Microsoft.Extensions.Hosting.Systemd
。
-
还需要在程序入口添加配置。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService() //++支持Windows服务
.UseSystemd() //++支持Linux守护进程
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>(); //每添加一个托管服务类,都需要在此处添加配置。
});
}
内置的Logging
详见官方文档。
集成log4net
- NuGet安装
Microsoft.Extensions.Logging.Log4Net.AspNetCore
。
2.项目根目录下,添加log4net.config
文件。
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="logs/logs.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10000KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
</layout>
</appender>
<root>
<appender-ref ref="RollingFileAppender" />
<level value="DEBUG" />
</root>
</log4net>
- 在项目入口处添加log4net配置。
public static void Main(string[] args)
{
var log4NetConfig = new XmlDocument();
log4NetConfig.Load(File.OpenRead("log4net.config")); //++读取log4net配置文件
var repo = log4net.LogManager.CreateRepository(Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy)); //++创建log4net仓储
log4net.Config.XmlConfigurator.Configure(repo, log4NetConfig["log4net"]); //++配置log4net
var host = CreateHostBuilder(args).Build(); //++主机托管对象
var logger = host.Services.GetRequiredService<ILogger<Program>>(); //++获取 ILogger 实例
logger.LogInformation("Host created."); //++打印Information级别的日志
host.Run(); //运行
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService() //支持Windows服务
.UseSystemd() //支持Linux守护进程
.ConfigureLogging((hostingContext, logging) =>
{
// The ILoggingBuilder minimum level determines the
// the lowest possible level for logging. The log4net
// level then sets the level that we actually log at.
logging.AddLog4Net(); //++添加log4net
logging.SetMinimumLevel(LogLevel.Debug); //++设置最低级别为Debug
})
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>(); //每添加一个托管服务类,都需要在此处添加配置。
});
}
这样,就能输出日志文件了,开发环境下生成的日志文件位于\dotnet5-winservice-demo\bin\Debug\net5.0\logs\logs.txt
。
内容如下:
INFO 2020-12-30 18:25:24,682 [1 ] dotnet5_winservice_demo.Program - Host created.
INFO 2020-12-30 18:25:24,699 [1 ] dotnet5_winservice_demo.Worker - Worker running at: 12/30/2020 18:25:24 +08:00
INFO 2020-12-30 18:25:24,708 [1 ] Microsoft.Hosting.Lifetime - Application started. Press Ctrl+C to shut down.
INFO 2020-12-30 18:25:24,709 [1 ] Microsoft.Hosting.Lifetime - Hosting environment: Development
INFO 2020-12-30 18:25:24,711 [1 ] Microsoft.Hosting.Lifetime - Content root path: D:\Documents\Codes\dotnet5-winservice-demo\dotnet5-winservice-demo
INFO 2020-12-30 18:25:25,720 [4 ] dotnet5_winservice_demo.Worker - Worker running at: 12/30/2020 18:25:25 +08:00
INFO 2020-12-30 18:25:26,744 [8 ] dotnet5_winservice_demo.Worker - Worker running at: 12/30/2020 18:25:26 +08:00
INFO 2020-12-30 18:25:27,752 [4 ] dotnet5_winservice_demo.Worker - Worker running at: 12/30/2020 18:25:27 +08:00
INFO 2020-12-30 18:25:28,766 [8 ] dotnet5_winservice_demo.Worker - Worker running at: 12/30/2020 18:25:28 +08:00