.net core3.1启用NLog记录日志

前言

在之前的文章我们已经把.net core api项目成功部署到linux系统,详情链接《.net core3.1项目部署到linux的docker》,接下来准备开始完善补齐我们的接口项目,一般.net项目记录日志信息的架包最常用的就是log4net跟NLog,根据自己喜好,本文使用的是NLog。

开始

1、NuGet添加依赖项
在这里插入图片描述

    <PackageReference Include="NLog" Version="4.7.5" />
    <PackageReference Include="NLog.Web.AspNetCore" Version="4.9.3" />

2、创建Nlog配置文件
在项目根目录创建一个nlog.config的文件

<?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"
      throwExceptions="false"
      internalLogLevel="Warn"
      internalLogFile="Logs\internal-nlog.txt">

  <!-- 启用asp.net核心布局渲染器 -->
  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>

  <targets>
    <!-- 写入文件配置 -->
    <!-- 将日志写入文件  -->
    <target xsi:type="File" name="allfile" fileName="Logs\nlog-all-${shortdate}.log"
            layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring} ${newline}" />

    <!-- 另一个文件日志,只有自己的日志。使用一些ASP.NET核心渲染器 -->
    <target xsi:type="File" name="ownFile-web" fileName="Logs\nlog-own-${shortdate}.log"
            layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action} ${newline}" />
  </targets>

  <rules>
    <!--所有日志,包括来自Microsoft的-->
    <!--minlevel 改为Trace 跟踪全部 Error 只捕获异常-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />

    <!--跳过非关键的Microsoft日志,因此只记录自己的日志-->
    <logger name="Microsoft.*" maxlevel="Info" final="true" />
    <!-- BlackHole without writeTo -->
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
  </rules>
</nlog>

3、启用复制到bin文件夹
手动编辑.csproj文件并添加

  <ItemGroup>
    <Content Update="nlog.config" CopyToOutputDirectory="PreserveNewest" />
  </ItemGroup>

4、修改program.cs

using System;
using NLog.Web;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Hosting;

public static void Main(string[] args)
{
    var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
    try
    {
        logger.Debug("初始化 main");
        CreateHostBuilder(args).Build().Run();
    }
    catch (Exception exception)
    {
        //NLog: 捕获设置错误
        logger.Error(exception, "由于异常而停止程序");
        throw;
    }
    finally
    {
        // 确保在应用程序退出之前刷新并停止内部计时器/线程(避免Linux上出现分段错误)
        NLog.LogManager.Shutdown();
    }
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
      .ConfigureWebHostDefaults(webBuilder =>
      {
          webBuilder.UseStartup<Startup>();
      })
      .ConfigureLogging(logging =>
      {
          logging.ClearProviders();
          logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
      })
      .UseNLog();  // NLog: 为依赖注入设置NLog

5、配置appsettings.json

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Trace",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

记住还要更新任何特定于环境的配置,以避免任何意外。appsettings.Development.json

6、开始写日志
在默认控制器中注入ILogger

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace TestAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController: ControllerBase
    {
        private readonly ILogger<ValuesController> _logger;
        public ValuesController(ILogger<ValuesController> logger)
        {
            _logger = logger;
            _logger.LogDebug(1, "NLog注入控制器");
        }

        // GET api/<ValuesController>/5
        [HttpGet("{id}")]
        [AllowAnonymous]
        public string Get(int id)
        {
            _logger.LogInformation("Hello, 这是一个测试输出日志!");
            return "value";
        }
    }
}

7、输出示例
在这里插入图片描述

参考官方文档
https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-3

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello,Mr.S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值