.NET Microsoft.Extensions.Logging + NLog 记录日志到文件

最近想了解下面向对象开发,选择C# 语言 以及NET6.0
日志是开发中最常用的功能,本文记录下其中日志使用方法,理解不全的地方后续再学习补充

环境

  • Ubuntu 22.04.2 LTS
  • dotnet 6.0.411

准备工作

# https://learn.microsoft.com/zh-cn/dotnet/core/tools/dotnet-new-sdk-templates#web-others
# 使用worker模板创建一个项目,
# 项目能快速生成一个后台服务模板
dotnet new worker --use-program-main
# 安装NLog针对MicrosoftExtensions扩展
dotnet add package NLog.Extensions.Logging

.NET Microsoft.Extensions.Logging + NLog 记录日志到文件_第1张图片## 添加日志功能

1. 根目录添加一个nlog.conf



<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogFile="example.log"
      internalLogLevel="Info" >
   
  
  <targets>
    
    <target xsi:type="File" name="logfile" fileName="example.log"
            layout="${longdate}|${level}|${message} |${all-event-properties} ${exception:format=tostring}" />
    <target xsi:type="Console" name="logconsole"
            layout="${longdate}|${level}|${message} |${all-event-properties} ${exception:format=tostring}" />
  targets>

  
  <rules>
    
    <logger name="*" minlevel="Trace" writeTo="logfile,logconsole" />
  rules>
nlog>

2. 注册服务

        IHost host = Host.CreateDefaultBuilder(args)
            .ConfigureServices(services =>
            {
                services.AddHostedService<Worker>();
                # 只用加以下一段
                services.AddLogging((builder) =>
                {
                    builder.ClearProviders(); 
                    builder.AddNLog();
                });
                # 只用加以下一段结束
            })
            .Build();

3. 使用

模板中的wroker已自动注入进去,不需要修改

public class Worker : BackgroundService
{
    private readonly ILogger<Worker> _logger;

    public Worker(ILogger<Worker> logger)
    {
        _logger = logger;
        # 直接使用logger
        # _logger.LogInformation()
        # _logger.........
    }
}

完整修改如下

Program.cs

namespace dotnet_demo;
using NLog.Extensions.Logging;

public class Program
{
    public static void Main(string[] args)
    {
        IHost host = Host.CreateDefaultBuilder(args)
            .ConfigureServices(services =>
            {
                services.AddHostedService<Worker>();
                services.AddLogging((builder) =>
                {
                    builder.ClearProviders(); 
                    builder.AddNLog();
                });
            })
            .Build();

        host.Run();
    }
}

Worker.cs

namespace dotnet_demo;

public class Worker : BackgroundService
{
    private readonly ILogger<Worker> _logger;

    public Worker(ILogger<Worker> logger)
    {
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            _logger.LogInformation("正在执行任务,时间是: {time}", DateTimeOffset.Now);
            await Task.Delay(1000, stoppingToken);
        }
    }
}

效果

.NET Microsoft.Extensions.Logging + NLog 记录日志到文件_第2张图片

TODO

.NET Framework ASP.NET Core .NET Core Console中使用方法参考文档
https://github.com/NLog/NLog

  • 修改配置日志文件自动归档

你可能感兴趣的:(.NET,.net,microsoft,java)