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

本文介绍了如何在Ubuntu22.04.2LTS上使用C#和.NET6.0进行面向对象开发,并通过NLog进行日志记录。首先,使用worker模板创建项目,然后安装NLog和MicrosoftExtensions的扩展。接着,配置nlog.config文件以写入文件和控制台,设置日志规则。在服务中注册NLog,并在Worker类中注入并使用日志。文章还提到了参考NLog文档来了解更多的.NET框架下的日志使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近想了解下面向对象开发,选择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

在这里插入图片描述## 添加日志功能

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

<?xml version="1.0" encoding="utf-8" ?>
<!-- XSD manual extracted from package NLog.Schema: https://www.nuget.org/packages/NLog.Schema-->
<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" >
   <!-- example.log文件名可以修改 -->
  <!-- the targets to write to -->
  <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 to map from logger name to target -->
  <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);
        }
    }
}

效果

在这里插入图片描述

TODO

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

  • 修改配置日志文件自动归档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值