1、准备扩展DLL
在 NuGet 包里下载以下 dll
Microsoft.Extensions.Hosting
Microsoft.Extensions.Hosting.Systemd
Microsoft.Extensions.Hosting.Windows
NLog.Web.AspNetCore
2、配置支持Windows和Linux
.NET CORE 在创建项目后,我们可以以注入的方式,添加到系统中去。在 CreateHostBuilder 方法中加入 Windows 和 Linux 的支持。
public static IHostBuilder CreateHostBuilder(string[] args)
{
//判断系统是Windows还是linux
bool IsWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
if (IsWindows)
return Host.CreateDefaultBuilder(args)
.UseWindowsService() //使用windows服务
.ConfigureServices((hostContext, services) =>
{
GlobalVariable.TcPServerIP = hostContext.Configuration.GetSection("TcpServer")["ip"];
GlobalVariable.TcpServerPort = hostContext.Configuration.GetSection("TcpServer")["port"];
services.AddHostedService<Worker>(); //添加Worker
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Information);
logging.AddConsole();
})
.UseNLog();//使用Nlog
return Host.CreateDefaultBuilder(args)
.UseSystemd()//使用Linux服务
.ConfigureServices((hostContext, services) =>
{
GlobalVariable.TcPServerIP = hostContext.Configuration.GetSection("TcpServer")["ip"];
GlobalVariable.TcpServerPort = hostContext.Configuration.GetSection("TcpServer")["port"];
services.AddHostedService<Worker>();//添加Worker
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Information);
}).UseNLog();//使用Nlog
}
3、添加日志功能
添加“nlog.cofig”文件
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true">
<targets>
<target name="defaultlog" xsi:type="File" keepFileOpen="false" encoding="utf-8"
fileName="${basedir}/logs/${shortdate}.log"
maxArchiveFiles="100"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}" />
<!--fileName值——表示在程序运行目录,分日志级别按天写入日志文件-->
<!--maxArchiveFiles值——日志文件最大数量,超出则删除最早的文件-->
<!--layout值——日志内容格式:时间+日志级别+LoggerName+日志内容-->
</targets>
<rules>
<!--支持将任意级别、任意LoggerName的日志写入target:defaultlog-->
<!--其中*就表示任意,可以改为"项目命名空间.*",则只输出对应命名空间下的日志。在Info级别尤为明显-->
<logger name="*" minlevel="trace" writeTo="defaultlog" />
</rules>
</nlog>
4、作业类添加日志功能支持
private readonly ILogger<Worker> _logger;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
try
{
_logger.LogInformation("执行业务代码......");
}
catch (Exception ex)
{
_logger.LogError(ex, ex.Message);
}
}