[C#] 将NLog输出到RichTextBox,并在运行时动态修改日志级别过滤

作者: zyl910

一、缘由

NLog是一个很好用的日志类库。利用它,可以很方便的将日志输出到 调试器、文件 等目标,还支持输出到窗体界面中的RichTextBox等目标。
而且它还支持在运行时修改配置,例如可用于实现这样的需求——在界面上做个下拉框,可动态调整RichTextBox的日志级别过滤。

二、输出到RichTextBox

2.1 办法

首先,项目中需要加入NLog的程序包。既用 NuGet 下载这些包——

  • NLog
  • NLog.Config
  • NLog.Windows.Forms

随后便可修改 NLog.config 文件,增加RichTextBox目标了。
这时有2点需注意——

  1. RichTextBox的target配置中,formName是“RichTextBox所在窗体的类名”,controlName是“该窗体中的RichTextBox控件名”。区分大小写,需要完全一致。
  2. 在NLog加载配置前,需要确保该RichTextBox已存在。

若以上2条中有任意一条不符时,NLog会自动弹出一个含RichTextBox的小窗口来显示日志,而不是你所指定的RichTextBox。
这2中,第1条是很容易实现的,就是第2条稍微麻烦一点。它的处理诀窍是,不要做静态初始化,而是要等到窗体的Load事件时才初始化Logger对象,且保证该窗体是首个使用NLog的类。这是因为NLog是在首次被使用时,才加载配置文件的。

即不能这样写——

private static Logger logger = LogManager.GetCurrentClassLogger();

而是要这样写——

private static Logger logger = null; private void MainForm_Load(object sender, EventArgs e) { if (null == logger) { logger = LogManager.GetCurrentClassLogger(); } }

2.2 范例

假设窗体名(formName)为MainForm,RichTextBox控件名为rtbLog。那么 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"  xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"  autoReload="true"  throwExceptions="false"  internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log"> <targets async="true"> <target xsi:type="Debugger" name="debugger" layout="${longdate} ${level:uppercase=true} [${threadname}] ${message} ${onexception:${exception:format=tostring} ${newline}}" /> <target xsi:type="File" name="f"  fileName="${basedir}/logs/${shortdate}.log"  layout="${longdate} ${level:uppercase=true} [${threadname}] ${message} ${onexception:${exception:format=tostring} ${newline}}"  encoding="utf-8" /> <target xsi:type="RichTextBox" name="richTextBox"  layout="${longdate} ${level:uppercase=true} [${threadname}] ${message} ${onexception:${exception:format=Message}}"  autoScroll="true"  maxLines="1000"  formName="MainForm"  controlName="rtbLog"  useDefaultRowColoringRules="false" /> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="debugger" /> <logger name="*" minlevel="Info" writeTo=

转载于:https://www.cnblogs.com/cjm123/p/8904773.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值