Log4Net的配置文件以及相应的读写操作类

Log4Net是一个常用的记录日志框架。本文示例C#使用Log4Net记录日志

Log4Net.config文件配置示例:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net-net-1.0"/>
  </configSections>
  <log4net>
    <root>
      <!--<level value="ALL"/>
            <appender-ref ref="LogFileAppender"/>-->
    </root>
    <logger name="commonlog" additivity="true">
      <!--通用写日志-->
      <appender-ref ref="LogFileAppender"/>
      <!--<level value="INFO" />
            <level value="DEBUG"/>-->
    </logger>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"  >
      <param name="File" value="D:\commonlog\"/>
      <param name="StaticLogFileName" value="false" />
      <param name="DatePattern" value="yyyy-MM-dd/yyyyMMdd.'txt'" />
      <!--必须加上'txt',保持其原意-->
      <param name="AppendToFile" value="true"/>
      <param name="RollingStyle" value="Date" />
      <param name="MaximumFileSize" value="1000KB"/>
      <param name="MaxSizeRollBackups" value="500" />
      <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n%d: %m"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG"/>
        <param name="LevelMax" value="ERROR"/>
      </filter>
    </appender>
   
    <logger name="customLog" additivity="true">
      <!--自定义写日志-->
      <appender-ref ref="customLog"/>
      <!--<level value="INFO" />
            <level value="DEBUG"/>-->
    </logger>
    <appender name="customLog" type="log4net.Appender.RollingFileAppender"  >
      <param name="File" value="D:\log\customLog\"/>
      <param name="StaticLogFileName" value="false" />
      <param name="DatePattern" value="yyyy-MM-dd/yyyyMMdd.'txt'" />
      <!--必须加上'txt',保持其原意-->
      <param name="AppendToFile" value="true"/>
      <param name="RollingStyle" value="Date" />
      <param name="MaximumFileSize" value="1000KB"/>
      <param name="MaxSizeRollBackups" value="500" />
      <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n%d: %m"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG"/>
        <param name="LevelMax" value="ERROR"/>
      </filter>
    </appender>
  </log4net>
</configuration>

新建窗体应用程序Log4NetDemo。添加对log4net.dll类库的引用。

窗体设计如下:

新建类LogHelper,源程序如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using log4net.Appender;
using log4net.Config;
using log4net.Layout;

namespace Log4NetDemo
{
    /// <summary>
    /// 日志基本类
    /// </summary>
    public class LogHelper
    {
        /// <summary>
        /// 加载配置日志文件
        /// </summary>
        public static void LoadLogConfig()
        {
            //启动Log4Net日志
            log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"));
        }
        public log4net.ILog loginfo = null;
        public LogHelper(string fileAppenderName)
        {
            loginfo = log4net.LogManager.GetLogger(fileAppenderName);
            m_fileAppenderName = fileAppenderName;
        }
        string m_fileAppenderName;
        /// <summary>
        /// 写日志【一般信息:Info】
        /// </summary>
        /// <param name="info"></param>
        /// <param name="fileFullName"></param>
        public void WriteLogInfo(string info, string fileFullName = "")
        {
            loginfo.Info(info);
        }

        /// <summary>
        /// 写日志【调试信息:Debug】
        /// </summary>
        /// <param name="info"></param>
        public void WriteLogDebug(string info)
        {
            loginfo.Debug(info);
        }
        /*private void ConfigLog(string fileFullName)
        {
            if (File.Exists(fileFullName))
            {
                //return;
                ;
            }//当天已经生成过
            FileAppender fileAppender = new FileAppender();
            fileAppender.File = fileFullName;
            fileAppender.Name = m_fileAppenderName;

            fileAppender.AppendToFile = true;
            PatternLayout patternLayout = new PatternLayout();
            patternLayout.ConversionPattern = "%d %message%newline";
            patternLayout.ActivateOptions();
            fileAppender.Layout = patternLayout;
            fileAppender.Encoding = Encoding.UTF8;
            fileAppender.ActivateOptions();
            BasicConfigurator.Configure(fileAppender);
        }*/
    }
}
 

新建类LogUtil,源代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using log4net;
using System.Reflection;

namespace Log4NetDemo
{
    public class LogUtil
    {
        /// <summary>
        /// 写通用日志
        /// </summary>
        static LogHelper logHelper = new LogHelper("commonlog");

        /// <summary>
        /// 写日志【调试信息:Debug】
        /// </summary>
        /// <param name="_message"></param>
        /// <returns></returns>
        public static bool WriteDebug(string _message)
        {
            try
            {
                logHelper.WriteLogDebug(_message);
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Debug:{ex.Message}");
                return false;
            }
        }

        /// <summary>
        /// 写日志【一般信息:Info】
        /// </summary>
        /// <param name="_message"></param>
        /// <returns></returns>
        public static bool WriteInfo(string _message)
        {
            try
            {
                Type type = MethodBase.GetCurrentMethod().DeclaringType;
                ILog m_log = LogManager.GetLogger(type);
                m_log.Info(_message);
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Info:{ex.Message}");
                return false;
            }
        }

        /// <summary>
        /// 写日志【警告:Warn】
        /// </summary>
        /// <param name="_message"></param>
        /// <returns></returns>
        public static bool WriteWarn(string _message)
        {
            try
            {
                Type type = MethodBase.GetCurrentMethod().DeclaringType;
                ILog m_log = LogManager.GetLogger(type);
                m_log.Warn(_message);
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Warn:{ex.Message}");
                return false;
            }
        }

        /// <summary>
        /// 写日志【一般错误:Error】
        /// </summary>
        /// <param name="_message"></param>
        /// <returns></returns>
        public static bool WriteError(string _message)
        {
            try
            {
                Type type = MethodBase.GetCurrentMethod().DeclaringType;
                ILog m_log = LogManager.GetLogger(type);
                m_log.Error(_message);
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error:{ex.Message}");
                return false;
            }
        }

        /// <summary>
        /// 写日志【致命错误:Fatal】
        /// </summary>
        /// <param name="_message"></param>
        /// <returns></returns>
        public static bool WriteFatal(string _message)
        {
            try
            {
                Type type = MethodBase.GetCurrentMethod().DeclaringType;
                ILog m_log = LogManager.GetLogger(type);
                m_log.Fatal(_message);
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Fatal:{ex.Message}");
                return false;
            }
        }
    }    
}
 

新建事件日志调用类RecordLogUtil,源程序如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Log4NetDemo
{
    /// <summary>
    /// 通用日志 与 自定义日志
    /// </summary>
    public class RecordLogUtil
    {
        /// <summary>
        /// 【通用日志】显示日志到界面上事件
        /// </summary>
        public static event Action<string> CommonEvent;
        /// <summary>
        ///  【通用日志】信息显示及写日志
        /// </summary>
        /// <param name="message">信息</param>
        /// <param name="toDisplay">是否显示</param>
        /// <param name="toWriteLog">是否写入</param>
        public static void LogToShow(string message, bool toDisplay, bool toWriteLog = true)
        {
            if (CommonEvent != null && toDisplay)
            {
                CommonEvent(message + "  " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            }
            if (toWriteLog)
            {
                //AppenderName为commonLog
                LogUtil.WriteDebug(message);
            }
        }

        #region 自定义日志信息--可根据log4Net配置文件配置节点
        public LogHelper logHelper = null;
        /// <summary>
        /// 自定义写日志:构造函数传入 log4net.Config 配置文件所使用的appender name
        /// </summary>
        /// <param name="fileAppenderName"></param>
        public RecordLogUtil(string fileAppenderName)
        {
            logHelper = new LogHelper(fileAppenderName);
        }
        /// <summary>
        /// 自定义写日志
        /// </summary>
        public event Action<string> CustomEvent;
        /// <summary>
        /// 异常信息显示及写日志
        /// </summary>
        /// <param name="message"></param>
        /// <param name="toDisplay"></param>
        public void ShowAndRecordLog(string message, bool toDisplay, bool toWriteLog = true)
        {
            if (CustomEvent != null && toDisplay)
            {
                CustomEvent(message + "  " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            }
            if (toWriteLog)
            {
                logHelper.WriteLogInfo(message);
            }
        }
        #endregion
    }
}
 

窗体FormLog4Net相关事件测试程序如下:

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

namespace Log4NetDemo
{
    public partial class FormLog4Net : Form
    {
        /// <summary>
        /// 自定义日志
        /// </summary>
        RecordLogUtil customMsg = new RecordLogUtil("customLog");
        public FormLog4Net()
        {
            InitializeComponent();
            //加载日志xml配置文件:Log4Net.config
            LogHelper.LoadLogConfig();
        }

        private void FormLog4Net_Load(object sender, EventArgs e)
        {
            RecordLogUtil.CommonEvent += MySystemMsg_LogEvent;
            customMsg.CustomEvent += CustomMsg_CustomEvent;
            //for (int i = 0; i < 24; i++)
            //{
            //    richTextBox1.AppendText((i * 102) + "\n");
            //}
        }

        private void CustomMsg_CustomEvent(string message)
        {
            MySystemMsg_LogEvent(message);
        }

        private void MySystemMsg_LogEvent(string message)
        {
            if (rtxtDisplay.TextLength >= 10240)
            {
                rtxtDisplay.Clear();
            }
            rtxtDisplay.AppendText(message + "\n");
            rtxtDisplay.ScrollToCaret();
        }

        private void btnCommonLogTest_Click(object sender, EventArgs e)
        {
            RecordLogUtil.LogToShow("【测试通用日志】Hello:" + new Random().Next(100, 1000), true);
        }

        private void btnCustomLogTest_Click(object sender, EventArgs e)
        {
            customMsg.ShowAndRecordLog("【测试自定义日志】World:" + new Random().Next(1000, 10000), true);
        }
    }
}
 

程序运行如图:

将在D:\commonlog和D:\log\customLog生成日志文件

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斯内科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值