将NLog target设置为RichTextBox的注意事项,NLog版本4.2.1

1 篇文章 0 订阅

将NLog target设置为RichTextBox的注意事项,NLog版本4.2.1

NLog是一个功能强大的logging工具,它可以很方便地定义不同的target将日志输出到不同的位置。我在使用中需要将日志输出到窗口控件中,在网上搜了一下,有几篇貌似是我需要的文章,但都是几年前的,NLog版本是2.0的,先试一试能不能用。按照文中所写,在C#工程中添加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">

<targets>
    <target name="control"
            xsi:type="RichTextBox"
            controlName="txtLogger"
            formName="P5Form"
            useDefaultRowColoringRules="true"
            layout="${longdate}-${level}    ${message}    ${onexception:||${exception}||${stacktrace}}"/>
</targets>
<rules>
    <logger name="*" minlevel="Info" writeTo="control" />
</rules>
</nlog>

在工程中添加NLog.dll,再在代码中加入:

protected static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
...
logger.Debug("这是一条Debug信息.");
...

OK啦,运行程序,期待正确的结果^_^。

但是控件中并没有任何输出啊!一定是什么地方出问题了。

在GitHub上找到源码NLog/NLog,在examples/targets/Configuration File/RichTextBox/Simple/中找到NLog.config,打开发现配置文件并没有问题。

难道是我下载的NLog.dll有问题吗?在项目“引用”中打开NLog,发现NLog.Targets中确实没有RichTextBoxTarget。再搜索RichTextBoxTarget,找到NLog.Windows.Forms,这里有与Windows Form相关的target。下载源代码,编译得到NLog.Windows.Forms.dll,加入项目。其它部分都不用改动,直接运行程序,结果还是不正常!

可是库文件确实没问题了啊!再找找问题。发现有人问过相同的问题,这就好办啦,点进去一看,原来是

protected static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

的问题。在构造logger对象时,Form.Name=”P5Form”和RichTextBox.Name=”txtLogger”必须存在且创建完毕。因此将代码改为:

protected static NLog.Logger logger = null;
...
public P5Form_Load(object sender, EventArgs e)
{
    if (logger == null)
        logger = NLog.LogManager.GetCurrentClassLogger();
}

继续编译运行程序,这次结果终于正常了。

总结

  1. 由于NLog版本发生变化,其代码结构也有变化。项目中必须同时添加NLog.dll和NLog.Windows.Forms.dll。
  2. NLog.config中target必须设置正确,Form名称、RichTextBox名称必须与配置文件中一致。
  3. 项目代码中必须保证logger对象在窗体、控件创建完毕后才能构造。即:
protected static NLog.Logger logger = null;
...
public XXForm_Load(object sender, EventArgs e)
{
    if (logger == null)
        logger = NLog.LogManager.GetCurrentClassLogger();
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值