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);
    }
}
(adsbygoogle = window.adsbygoogle || []).push({});