跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C#

.NET 项目实战:NLog 日志框架配置与封装

NLog 是 .NET 生态中灵活高效的日志框架。详细演示了从 NuGet 引入、NLog.config 核心配置到通用工具类封装的全过程。重点讲解了异步文件写入与彩色控制台输出的配置技巧,以及通过规则过滤冗余日志的方法。封装后的 LoggerHelper 简化了代码调用,提升了项目的可维护性与日志规范性。

GitMaster发布于 2025/2/4更新于 2026/8/2243 浏览
.NET 项目实战:NLog 日志框架配置与封装

.NET 项目实战:NLog 日志框架配置与封装

在 .NET 开发中,选择合适的日志框架至关重要。相比于 Log4Net,NLog 以其灵活的配置和强大的扩展性受到许多开发者的青睐。本文将介绍如何在项目中集成 NLog,配置核心规则,并封装一个通用的日志调用类以提升开发效率。

引入依赖

首先通过 NuGet 包管理器安装 NLog 和 NLog.Config 包。确保项目引用了必要的程序集。

配置文件详解

建议新建独立的 NLog.config 文件进行配置,避免与 web.config 或 appsettings.json 混用导致维护困难。以下是经过优化的配置示例,支持异步文件写入和彩色控制台输出。

<?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">
  <targets>
    <!-- 异步文件目标 -->
    <target name="asyncFile" xsi:type="AsyncWrapper">
      <target name="log_file" xsi:type="File"
              fileName="${basedir}/ProjectLogs/${shortdate}/${logger}-${level}-${shortdate}.txt"
              layout="${longdate} | ${message}${onexception:${exception:format=message}}\n${newline}\n${stacktrace}" 
              archiveFileName="${basedir}/archives/${logger}-${level}-${shortdate}-{#####}.txt"
              archiveAboveSize="102400"
              archiveNumbering="Sequence"
              concurrentWrites="true"
              = />
    
    
    
  

  
    
    
    
    
    
    
  

keepFileOpen
"false"
</target>
<!-- 彩色控制台目标 -->
<target name="colorConsole" xsi:type="ColoredConsole" layout="[${date:format=HH:mm:ss}]:${message} ${exception:format=message}" />
</targets>
<rules>
<!-- 忽略 Microsoft 内部库的 Info 级别日志,减少噪音 -->
<logger name="Microsoft.*" minlevel="Info" writeTo="" final="true" />
<!-- 默认所有日志写入异步文件 -->
<logger name="*" minlevel="Info" writeTo="asyncFile" />
<!-- Warn 及以上级别同时输出到控制台 -->
<logger name="*" minlevel="Warn" writeTo="colorConsole" />
</rules>
</nlog>

配置要点说明

  • Targets(目标):定义了日志输出的位置。这里使用了 AsyncWrapper 包裹 File 目标,利用异步机制提升性能,避免 I/O 阻塞主线程。archiveAboveSize 设置了归档阈值,超过 100KB 自动切割文件。
  • Rules(规则):控制日志流向。final="true" 表示匹配后不再继续向下匹配,用于过滤特定命名空间(如 Microsoft)的冗余日志。通配符 * 可匹配任意记录器名称。

封装日志工具类

为了避免在每个类中重复实例化 Logger,可以封装一个静态辅助类。这样调用时只需关注业务逻辑,无需关心底层实现细节。

using NLog;

namespace YourNamespace.Utils
{
    /// <summary>
    /// NLog 使用帮助类
    /// </summary>
    public class LoggerHelper
    {
        private readonly Logger _logger = LogManager.GetCurrentClassLogger();

        #region Debug
        public void Debug(string msg) => _logger.Debug(msg);
        public void Debug(string msg, Exception err) => _logger.Debug(err, msg);
        #endregion

        #region Info
        public void Info(string msg) => _logger.Info(msg);
        public void Info(string msg, Exception err) => _logger.Info(err, msg);
        #endregion

        #region Warn
        public void Warn(string msg) => _logger.Warn(msg);
        public void Warn(string msg, Exception err) => _logger.Warn(err, msg);
        #endregion

        #region Error
        public void Error(string msg) => _logger.Error(msg);
        public void Error(string msg, Exception err) => _logger.Error(err, msg);
        #endregion

        #region Fatal
        public void Fatal(string msg) => _logger.Fatal(msg);
        public void Fatal(string msg, Exception err) => _logger.Fatal(err, msg);
        #endregion
    }
}

在实际使用中,直接调用 new LoggerHelper().Error("操作失败", ex) 即可。由于 LogManager.GetCurrentClassLogger() 会根据当前类名自动创建记录器,不同模块的日志会自动区分,便于追踪问题来源。

运行效果验证

配置完成后,启动项目并触发日志记录。日志文件将按日期自动分类存储在 ProjectLogs 目录下,文件名包含记录器名称和日志级别。控制台则会实时显示警告及错误信息,方便调试阶段快速定位异常。

目录

  1. .NET 项目实战:NLog 日志框架配置与封装
  2. 引入依赖
  3. 配置文件详解
  4. 配置要点说明
  5. 封装日志工具类
  6. 运行效果验证
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python FastAPI 入门教程:从零跑通第一个接口
  • 10 个实用有趣的 Linux 命令行工具详解
  • 专为 Expo React Native 项目设计的微信 SDK 封装库
  • 前端 PWA:构建离线可用与可安装的 Web 应用
  • GitHub 精确搜索语法指南
  • DeepSeek-OCR-WEBUI 镜像实现 Mac 本地化 OCR 全流程
  • 22 个优质 Python 学习网站推荐
  • GitHub Copilot 性能优化:提升 AI 代码建议响应速度的实战策略
  • React 集成 Microi 吾码低代码平台开发指南
  • MATLAB 2025a 发布:深色模式与 Copilot AI 助手功能详解
  • 飞算 JavaAI 智能编程助手:重塑开发新模态
  • Spring AOP 详解:代理模式与动态代理核心原理
  • FLUX.1 镜像免配置部署:内置中文界面与中英双语 Web UI
  • Vue3 前端专属配置(VSCode settings.json + .prettierrc)
  • Circle Loss:统一 Softmax 与 Triplet 的优化视角
  • Python 属性描述符:原理与 ORM 实战
  • 百川 2-13B-Chat-4bits WebUI 部署:Supervisor 配置文件 baichuan-webui.conf 详解
  • OpenClaw 多飞书机器人绑定配置实战指南
  • 自然语言处理在客户服务领域的实战应用
  • AIGC 去 AI 味 Prompt 设计:从原理到实践

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online