log4net:将log实时显示在textbox中

1、把log4net.dll添加到项目引用中

2、修改AssemblyInfo.cs,添加如下行:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
3、修改配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
    </configSections>
    <log4net>
        <appender name="PatternFileAppender" type="SampleAppendersApp.Appender.PatternFileAppender, SampleAppendersApp">
            <file value="%date{yyyy-MM-dd}\%property{session}\output.log" />
            <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
        </appender>
        <root>
            <level value="ALL" />
            <appender-ref ref="PatternFileAppender" />
        </root>
    </log4net>
</configuration>

4、Form1的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using log4net.Core;

namespace WinFormDemo
{
    public partial class Form1 : Form
    {
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        private bool logWatching = true;
        private log4net.Appender.MemoryAppender logger;
        private Thread logWatcher;


        public Form1()
        {
            InitializeComponent();

            this.Closing += new CancelEventHandler(Form1_Closing);
            logger = new log4net.Appender.MemoryAppender();

            log4net.Config.BasicConfigurator.Configure(logger);

            logWatcher = new Thread(new ThreadStart(LogWatcher));
            logWatcher.Start();

        }

        void Form1_Closing(object sender, CancelEventArgs e)
        {
            logWatching = false;
            logWatcher.Join();

        }

        delegate void delOneStr(string log);
        void AppendLog(string _log)
        {
            if (txtLog.InvokeRequired)
            {
                delOneStr dd = new delOneStr(AppendLog);
                txtLog.Invoke(dd, new object[] { _log});
            }
            else
            {                
                StringBuilder builder;
                if (txtLog.Lines.Length > 99)
                {
                    builder = new StringBuilder(txtLog.Text);
                    builder.Remove(0, txtLog.Text.IndexOf('\r', 3000) + 2);
                    builder.Append(_log);
                    txtLog.Clear();
                    txtLog.AppendText(builder.ToString());
                }
                else
                {
                    txtLog.AppendText(_log);
                }
            }

        }

        private void LogWatcher()
        {
            while (logWatching)
            {
                LoggingEvent[] events = logger.GetEvents();
                if (events != null && events.Length > 0)
                {
                    logger.Clear();
                    foreach (LoggingEvent ev in events)
                    {
                        string line = ev.LoggerName + ": " + ev.RenderedMessage + "\r\n";
                        AppendLog(line);
                    }
                }
                Thread.Sleep(500);
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Random r = new Random();

            int x = r.Next(1, 4);

            switch (x)
            {
                case 1:
                    log.Info("通知:通知通知通知");
                    break;

                case 2:
                    log.Warn("警告:警告警告警告警告警告警告");
                    break;
                case 3:
                    log.Error("错误:错误错误错误错误错误错误错误错误错误");
                    break;
                case 4:
                    log.Fatal("严重:严重严重严重严重严重严重严重严重严重严重严重严重严重严重严重严重严重");
                    break;
            }
        }

    }
}
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值