当前位置: 代码网 > it编程>编程语言>Asp.net > 在C#项目中使用NLog进行日志记录的方法步骤

在C#项目中使用NLog进行日志记录的方法步骤

2025年12月26日 Asp.net 我要评论
一、整体流程(核心步骤)使用 nlog 的核心流程可总结为:安装 nuget 包 → 配置 nlog.config → 代码中初始化 / 使用 logger → 验证日志

一、整体流程(核心步骤)

使用 nlog 的核心流程可总结为:安装 nuget 包 → 配置 nlog.config → 代码中初始化 / 使用 logger → 验证日志输出,下面分项目类型详细说明。

二、控制台 / 桌面应用(最基础场景)

步骤 1:安装 nlog 包

打开项目的 nuget 包管理器,安装核心包:

# .net cli 命令(推荐)
dotnet add package nlog
# 或 nuget 包管理器控制台
install-package nlog

步骤 2:添加 nlog.config 配置文件

三、asp.netcore web 应用(主流场景)

  1. 在项目根目录新建 nlog.config 文件(右键文件 → 属性 → 复制到输出目录 → 选择「始终复制」);
  2. 粘贴以下基础配置(支持控制台 + 文件输出,可直接复用):
<?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"  <!-- 配置修改后自动生效,无需重启 -->
      throwconfigexceptions="true"> <!-- 开发时开启,配置错误抛异常 -->

  <!-- 变量定义:简化重复配置 -->
  <variable name="logdir" value="${basedir}/logs"/>
  <variable name="loglayout" value="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${exception:format=tostring}"/>

  <!-- 输出目标:控制台 + 按天分割的文件 -->
  <targets>
    <!-- 控制台输出(开发调试) -->
    <target name="console" xsi:type="console" layout="${loglayout}"/>
    <!-- 文件输出(生产环境核心) -->
    <target name="file" xsi:type="file" 
            filename="${logdir}/${shortdate}.log"  <!-- 日志路径:项目目录/logs/2025-12-25.log -->
            archiveevery="day"  <!-- 按天归档 -->
            maxarchivefiles="30"  <!-- 保留30天日志 -->
            encoding="utf-8"
            layout="${loglayout}"/>
  </targets>

  <!-- 日志规则:所有info及以上级别输出到控制台+文件 -->
  <rules>
    <logger name="*" minlevel="info" writeto="console,file" />
  </rules>
</nlog>

步骤 1:c# 代码中使用 nlog

using nlog;

namespace nlogdemo
{
    class program
    {
        // 核心:创建logger(推荐每个类一个,用当前类名命名,便于定位日志来源)
        private static readonly ilogger _logger = logmanager.getcurrentclasslogger();

        static void main(string[] args)
        {
            try
            {
                // 1. 输出不同级别的日志(按需选择)
                _logger.info("程序启动成功,开始执行业务逻辑");
                _logger.warn("注意:当前内存使用率超过80%");

                // 模拟业务操作
                var userid = 1001;
                _logger.info($"用户 {userid} 发起查询请求");

                // 2. 模拟异常,记录带堆栈的错误日志(核心场景)
                throw new invalidoperationexception("数据库查询超时");
            }
            catch (exception ex)
            {
                // 第一个参数:异常对象(自动记录堆栈);第二个参数:自定义日志消息
                _logger.error(ex, "执行业务逻辑时发生错误");
            }
            finally
            {
                // 释放nlog资源(控制台应用结束时建议调用)
                logmanager.shutdown();
            }
        }
    }
}

步骤 2:验证效果

  1. 运行程序,控制台会输出日志内容;
  2. 查看项目输出目录(如 bin/debug/net8.0/logs),会生成以当天日期命名的 .log 文件,包含完整日志。

步骤 3:安装适配包

dotnet add package nlog.web.aspnetcore

步骤 4:配置 nlog.config

复用上面的 nlog.config 文件(无需修改,直接复制到项目根目录,设置「始终复制」)。

步骤 5:program.cs 中集成 nlog

using nlog;
using nlog.web;

var builder = webapplication.createbuilder(args);

// 1. 清除.net默认日志提供器,启用nlog
builder.logging.clearproviders();
builder.host.usenlog(); // 注册nlog到asp.net core依赖注入

// 2. 添加mvc等服务(常规操作)
builder.services.addcontrollerswithviews();

var app = builder.build();

// 3. 中间件配置(常规操作)
app.userouting();
app.useendpoints(endpoints => endpoints.mapcontrollers());

app.run();

步骤 6:controller/service 中使用

通过依赖注入获取 ilogger(asp.net core 推荐方式):

using microsoft.aspnetcore.mvc;
using microsoft.extensions.logging;

namespace nlogwebdemo.controllers
{
    [apicontroller]
    [route("api/[controller]")]
    public class usercontroller : controllerbase
    {
        // 注入ilogger(泛型参数为当前类,便于日志定位)
        private readonly ilogger<usercontroller> _logger;

        public usercontroller(ilogger<usercontroller> logger)
        {
            _logger = logger;
        }

        [httpget("{id}")]
        public iactionresult get(int id)
        {
            // 记录普通日志
            _logger.loginformation("接收到用户查询请求,id:{userid}", id);

            try
            {
                // 模拟业务逻辑
                if (id <= 0)
                {
                    throw new argumentexception("用户id不能为负数");
                }
                return ok(new { id = id, name = "张三" });
            }
            catch (exception ex)
            {
                // 记录错误日志
                _logger.logerror(ex, "查询用户信息失败,id:{userid}", id);
                return badrequest("查询失败");
            }
        }
    }
}

四、关键注意事项

  1. 配置文件属性:务必将 nlog.config 的「复制到输出目录」设为「始终复制」,否则程序运行时找不到配置;
  2. 日志级别控制
    • trace/debug:开发环境调试用,生产环境建议关闭(配置中 minlevel 设为 info);
    • info/warn:生产环境常规记录;
    • error/fatal:必须记录,用于排查问题;
  3. 异常日志规范:记录错误时务必传入 exception 对象,否则会丢失堆栈信息,无法定位问题;
  4. 性能优化:文件日志建议开启 concurrentwrites="true"(多线程安全),keepfileopen="false"(避免文件锁定)。

总结

  1. 核心步骤:安装包 → 配置 nlog.config(定义输出目标 / 规则)→ 代码中创建 / 注入 ilogger → 输出不同级别日志(异常日志务必传 exception 对象);
  2. 项目适配:控制台应用直接用 logmanager.getcurrentclasslogger()asp.net core 需集成依赖注入并调用 usenlog()
  3. 关键规范:每个类对应一个 logger(便于定位日志来源),异常日志必须包含堆栈信息,生产环境合理设置日志级别。

以上就是在c#项目中使用nlog进行日志记录的方法步骤的详细内容,更多关于c# nlog进行日志记录的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com