NLog使用

news2025/1/10 20:10:30

Nlog 日志组件的使用

这个博文关注 .net framework下的NLog日志组件的使用. 在项目中需要将日志写到日志文件中, 另外一些重要信息要显示在界面上. 使用 NLog 可以轻松做到这点.NLog wiki 页面

nuget 安装两个主要组件

  • NLog
  • NLog.Windows.Forms

使用总结

  1. 日志文件 layout 按照 json 结构化的格式输出, 方便以后分析
  2. 两个 RichTextBox 用来显示日志. 一个用来显示较多的日志, 设置行数为 2000; 另一个用来显示最新的日志, 显示最近3行, 日志格式也有详略不同, 使用 NLog 可以很容易做到行数控制, 另外还提供 error 高亮显示.
  3. RichTextBox 日志target 中的 formName 和 controlName 必须和Winform designer上的名称完全一致, 包括大小写. 另外, RichTextBox 组件所在窗体的 logger 成员变量不应该在声明变量的时候就完成初始化, 而应该在窗体 Load 事件中完成初始化, 这样能确保窗体实例化发生在 logger 实例化之前, NLog.Windows.Forms 组件才能正常工作, 否则 RichTextBox 无法正常输出日志.

log level

对于 warn 和 error 不太好区分, Nlog 文档给出了一个很好的区分规则, 如果参数验证或者是可恢复的临时失败记录为warn就可以了, 如果是功能失败登记为 error.

Logger 的初始化代码

// private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger(); //不能直接初始化
private static readonly NLog.Logger Logger =null ; 

private void Form1_Load(object sender, EventArgs e)
{
    if (_logger == null)
    {
        _logger = NLog.LogManager.GetCurrentClassLogger();
    }
}

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"
      throwConfigExceptions="true">

	<targets async="true">
		<!--此部分中的所有目标将自动异步-->

		<!--项目日志保存文件路径说明fileName="${basedir}/保存目录,以年月日的格式创建/${shortdate}/${记录器名称}-${单级记录}-${shortdate}.txt"-->
		<target name="file" xsi:type="File"
                fileName="${basedir}/logs/${shortdate}/${processname}-${shortdate}.txt"
                concurrentWrites="true"
                keepFileOpen="false"
                encoding="utf-8">
			<layout xsi:type="JsonLayout">
				<attribute name="time" layout="${longdate}" />
				<attribute name="level" layout="${level:uppercase=true}" />
				<attribute name="threadname" layout="${threadname}" />
				<attribute name="message" layout="${message}" />
				<attribute name="properties" encode="false">
					<layout type='JsonLayout' includeEventProperties="true" maxRecursionLimit="2" />
				</attribute>
				<attribute name='exception' layout='${exception:format=ToString,StackTrace}' />
			</layout>
		</target>

		<!--在主界面的 richTextBox 中显示日志-->
		<target  name="logRichbox" xsi:type="RichTextBox"
          layout="${time} ${level:uppercase=true} [${threadname}] ${message} ${onexception:${exception:format=Message}}"
          autoScroll="true"
          maxLines="2000"
          formName="FrmMain"
          controlName="logRichbox"
          useDefaultRowColoringRules="true" />

		<!--在主界面的 richTextBox 中显示日志-->
		<target  name="singleLineLogRichbox" xsi:type="RichTextBox"
          layout="${level:uppercase=true}  ${message} ${onexception:${exception:format=Message}}"
          autoScroll="true"
          maxLines="2"
          formName="FrmMain"
          controlName="singleLineLogRichbox"
          useDefaultRowColoringRules="true" />
	</targets>

	<!--规则配置-->
	<rules>
		<logger name="*" minlevel="Info" writeTo="file,logRichbox,singleLineLogRichbox" />
	</rules>
</nlog>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/561767.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

程序员的 Windows 工具箱「GitHub 热点速览」

作者&#xff1a;HelloGitHub-小鱼干 如何精简 Windows 并快速配置开发环境呢&#xff1f;本周特推的 winutil 是一个程序员的 Windows 工具箱&#xff0c;它提供了开发工具的一键安装以及减少系统垃圾的功能&#xff0c;一切为了简洁、高效。同样高效的还有 C 日志库 spdlog&a…

对讲机亚音是什么?有什么作用?

一、对讲机亚音是什么&#xff1f; 对讲机亚音又被称为亚音频。是比音频信号频率更低的一种特殊信号&#xff0c;目的在于检查信号是否合法&#xff0c;是否对信号进行响应。 亚音是一种特殊的振幅信号&#xff0c;人耳无法感觉也无法听闻到这些信号&#xff0c;所以对于无线…

mac mongodb 安装及配置

1.官网下载地址&#xff1a;MongoDB: The Developer Data Platform | MongoDB 2.下载好压缩包&#xff0c;解压后放在想放的地方&#xff0c;例如&#xff1a; /Users/xiaokeai/environment/mongodb-macos-x86_64-5.0.18 3.打开终端后&#xff0c;在家目录中打开.bash_profil…

Linux系统编程学习 NO.4 ——基础指令学习、操作系统时间的概念、文件压缩包的概念

1.时间相关的概念以及指令 1.1.时间相关的指令 1.1.1.date指令 date可以指定时间显示的格式&#xff1a;date 指定格式 选项 %H&#xff1a;小时 %M&#xff1a;分钟 %S&#xff1a;秒数 %Y&#xff1a;年份 %m&#xff1a;月份 %d&#xff1a;日 %F:相当于%Y-%m-%d %X:相当…

java网络编程从0到1快速上手

目录 网络编程概述 网络基础 网络编程的目的 网络通信要素概述 通信要素1&#xff1a;ip地址及端口号 IP 地址&#xff1a;InetAddress 端口号 InetAddress类 通信要素2&#xff1a;网络协议 网络协议概述 TCP/IP协议簇 TCP 和 UDP ​Socket Socket类的常用构造…

都什么年代了你还不学习postgreSQL(入门篇)

postgreSQL学习 一&#xff0c;简介 1.什么是postgresql https://www.postgresql.org/#官网​ PostgreSQL 是一个功能强大的开源对象关系数据库系统&#xff0c;它使用和扩展了 SQL 语言&#xff0c;并结合了许多安全存储和扩展最复杂数据工作负载的功能。PostgreSQL的起源可…

消息队列对比

目录 什么是消息队列 常用的消息队列工具对比 1 、ActiveMQ 2 、RabbitMQ 3、Kafka 4、 RocketMQ 什么是消息队列 消息队列是分布式应用间交换信息的重要组件&#xff0c;消息队列可驻留在内存或磁盘上, 队列可以存储消息直到它们被应用程序读走。通过消息队列&#xff0…

docker 镜像和容器

一、简述 win系统常用Ghost技术来做镜像&#xff0c;把系统和系统上安装的应用程序一起打包做备份&#xff0c;在别的电脑上安装这个GHO镜像则会有和源系统一摸一样的系统和应用。 docker功能类似&#xff0c;而且是分层的&#xff0c;在拉取镜像时候可见。 docker镜像拉取下…

4、js - 闭包

1、闭包的概念 闭包&#xff1a;函数嵌套函数&#xff0c;内层函数访问了外层函数的局部变量。 // 闭包 function func1() {let a 9;let b 8;function func2() {console.log("a", a); // a 9}func2(); } func1(); 分析&#xff1a; 需要访问的变量会被放到闭包…

用YOLOv5和MobileViTs骨干网络革新目标检测:高效准确AI视觉的未来

目录 一、YOLOv51、YOLOv5介绍2、YOLOV5的整体架构图3、MobileViT介绍 二、YOLOv5与MobileViT的结合1、YOLOv5网络结构回顾2、MobileViT网络结构介绍3、YOLOv5替换骨干网络为MobileViT的优势 三、MobileViT的细节与实现1、ViT与MobileNetV3的结合2、MobileViT网络结构细节3、Mo…

最高奖金100万!第二届广州·琶洲算法大赛火热报名中

第二届广州琶洲算法大赛以“优选AI算法 让世界更智能”为主题&#xff0c;聚焦前沿 AI 技术&#xff0c;推进算法领域的学术交流、人才培养、技术发展及应用&#xff0c;面向算法领域的开发者、创业机构、企事业单位&#xff0c;招募具有原创性、独创性、引领性的算法模型和应用…

c++ 11标准模板(STL) std::map(二)

定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…

【JavaScript】ES6新特性(3)

10. Symbol 使用 Symbol&#xff0c;表示独一无二的值 每个 Symbol 是不一样的 不能进行运算 可以显式调用 toString() 可以隐式转换 boolean <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-eq…

华为OD机试真题 Java 实现【寻找相似单词】【2023Q2 200分】

一、题目描述 给定一个可存储若干单词的字典&#xff0c;找出指定单词的所有相似单词&#xff0c;并且按照单词名称从小到大排序输出。 单词仅包括字母&#xff0c;但可能大小写并存&#xff08;大写不一定只出现在首字母&#xff09;。 相似单词说明&#xff1a; 给定一个…

TCP是面向字节流的协议

TCP字节流 之所以会说 TCP 是面向字节流的协议&#xff0c;UDP 是面向报文的协议&#xff0c;是因为操作系统对 TCP 和 UDP 协议的发送方的机制不同&#xff0c;也就是问题原因在发送方。 为什么 UDP 是面向报文的协议&#xff1f; 当用户消息通过 UDP 协议传输时&#xff0c;…

从C语言到C++_12(string相关OJ题)

上一篇已经讲了string类的接口函数&#xff0c;然后根据查文档刷了一道力扣415字符串相加&#xff0c; 这篇继续跟着查文档来刷力扣题&#xff0c;体会C刷题的方便。 目录 917. 仅仅反转字母 - 力扣&#xff08;LeetCode&#xff09; 代码解析&#xff1a; 387. 字符串中的…

SSRS rdlc报表 一 创建报表

环境 vs2019 fromwork4.5 第一步 安装rdlc报表插件 vs2019使用rdlc&#xff0c;需要安装扩展插件&#xff0c;扩展→扩展管理→联机&#xff0c;搜索rdlc&#xff0c;安装Microsoft RDLC Report Designer&#xff0c;我在安装过程中&#xff0c;安装了很久都没安装成功&…

构建高可用性的核心服务层:Coupang电子商务应用程序的技术实践

随着Coupang电子商务平台用户数量的快速增长&#xff0c;构建一个高可用性的核心服务层成为了关键任务。本文将介绍Coupang如何通过统一的NoSQL数据存储、缓存层和实时数据流等技术和策略&#xff0c;构建一个高可用性的核心服务层&#xff0c;以满足日益增长的数据流量需求&am…

保姆式教学--教室友从买服务器到怎么搭建内网隧道

本文转载于&#xff1a;https://blog.csdn.net/qq_39739740/article/details/127604642 一、购买云服务器 怎么购买&#xff1f; 三个主流厂商&#xff1a;华为云、腾讯云、阿里云 --------拿阿里云举例。 首先第一步、我们要百度搜索 阿里云→进入官网→选择最便宜的服务器&…

python+django音乐推荐网站vue

为此开发了本音乐推介网站 &#xff0c;为用户提供一个基于音乐推介网站&#xff0c;同时方便管理员&#xff1b;首页、个人中心、用户管理&#xff0c;类型信息管理、乐器类型管理、歌曲信息管理、戏曲信息管理、MV专区管理、付费音乐管理、订单信息管理、音乐文件管理、论坛管…