Backend - C# 的日志 NLog日志
目录
一、注入依赖和使用 logger
二、配置记录文件
1.安装插件 NLog
2.创建 nlog.config 配置文件
3. Programs配置日志信息
4. 设置 appsettings.json 的 LogLevel
5. 日志设定文件和日志级别的优先级
(1)常见的日志级别优先级
(2)日志设定文件优先级
三、方便调试查看日志
一、注入依赖和使用 logger
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Diagnostics;
using Microsoft.AspNetCore.Mvc;
namespace ASPNetAPI.Controllers
{
public class ErrorController控制器名: Controller
{
private ILogger<ErrorController控制器名> logger;
public ErrorController控制器名(ILogger<ErrorController控制器名> logger) { // 构造函数里注入ILogger服务(控制器名作为泛型参数)
this.logger = logger;
}
}
[AllowAnonymous]
[Route("Error")]
public IActionResult Error()
{
var exceptionHandlerPathFeature = HttpContext.Features.Get<IExceptionHandlerPathFeature>();
// 记录logger
logger.LogError($"路径:{exceptionHandlerPathFeature.Path},产生错误:{exceptionHandlerPathFeature.Error}");
return View("Error");
}
}
二、配置记录文件
1.安装插件 NLog
VS菜单的“专案” > 管理NuGet套件 > 查找到NLog.Web.AspNetCore,安装。
2.创建 nlog.config 配置文件
(1)文件名是nlog.config
(2)放在专案根目录下(项目启动时自动加载该文件)
(3)内容如下:
<?xml version="1.0" encoding="utf-8"?>
<nlog xmlns="http://nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- 定义日志输出目标 -->
<targets>
<!-- 控制台输出 -->
<target name="console" xsi:type="Console" layout="${longdate} ${level} ${message} ${exception}" />
<!-- 文件输出。fileName若为相对位置,则产生的logs文件夹会放在专案的bin\Debug\net8.0中,也可设置绝对位置:D:\TestLogs\${shortdate}.log -->
<target name="logfile" xsi:type="File" fileName="logs/${shortdate}.log"
layout="${longdate} ${level} ${message} ${exception}" />
<!-- 可选:可以定义更多的目标,如数据库、事件日志、邮件等 -->
</targets>
<!-- 定义日志规则 -->
<rules>
<!--常见的日志级别有:Trace < Debug < Info < Warn < Error < Fatal -->
<!-- 控制台输出规则:记录所有级别的日志 -->
<logger name="*" minlevel="Info" writeTo="console" />
<!-- 文件输出规则:记录所有级别的日志 -->
<logger name="*" minlevel="Trace" writeTo="logfile" />
<!-- 可选:可以为不同的 logger 定义不同的规则 -->
</rules>
</nlog>
(4)设置属性
右击nlog.config文件,选择“属性”。将“复制到输出目录”设定为“有更新時才复制”。
3. Programs配置日志信息
using NLog.Web;
var builder = WebApplication.CreateBuilder(args);
// 配置 NLog
builder.Logging.ClearProviders(); // 清除默认的日志提供程序
// builder.Logging.AddConsole(); // 添加控制台日志(暂无用)
// builder.Logging.AddDebug(); // 添加调试日志(暂无用)
// builder.Logging.AddEventSourceLogger(); // 添加事件源日志(暂无用)
builder.Host.UseNLog(); // 使用 NLog 作为日志提供程序
4. 设置 appsettings.json 的 LogLevel
注意:
若要使用的是appsettings.Development.json的内容,需要先判定launchSettings.json中设定的ASPNETCORE_ENVIRONMENT是否为Development(若值是Production生产环境,则appsettings.Development.json不起作用,而是appsettings.Production.json起作用,若无appsettings.Production.json,则是appsettings.json起作用)
内容如下:
{
"Logging": {
"LogLevel": {
"Default": "Warning", // 针对所有日志,设置记录等级
// "Microsoft.AspNetCore": "Warning" // 针对Microsoft的日志
}
},
"ConnectionStrings": {
"MusicConn": "Host=10.XXX.X.XX;Database=数据库DB;User Id=用户名;Password=密码;"
}
}
5. 日志设定文件和日志级别的优先级
(1)常见的日志级别优先级
针对nlog.config文件:Trace < Debug < Info < Warn < Error < Fatal
针对appsettings.json文件:Trace < Debug < Information < Warning < Error < Critical
(2)日志设定文件优先级
nlog.config < appsettings.json
三、方便调试查看日志
VS菜单的“工具” > 选项 > 帧错调试 > 输出视窗 > 将“一般输出设定的内容”进行修改(只打开所有调试输出和异常消息,其他都关闭)。
改成 |