【用.NET5写Windows服务】二、基础配置及集成log4net

作为Windows服务或者Linux守护进程,还需要添加一些配置。
内置的日志记录想要写入本地文件中,需要自己写一些实现。为了写本地的日志文件,我集成了常用的log4net第三方插件,非常方便。

支持 Windows服务 或 Linux守护进程

  • 若要支持Windows服务,需要NuGet安装Microsoft.Extensions.Hosting.WindowsServices
    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

  1. NuGet安装Microsoft.Extensions.Logging.Log4Net.AspNetCore
    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>
  1. 在项目入口处添加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

猜你喜欢

转载自blog.csdn.net/danding_ge/article/details/111995218