Log4net日志配置及应用

本文详细解读了log4net配置文件的设置,包括RollingFileAppender的参数配置,并介绍了如何使用log4net创建一个定制的日志类,提供不同级别的日志记录功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

log4net配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <!--log4net配置-->
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
  </configSections>
  <!--log4net配置-->
  <log4net>
    <!--定义输出到文件中-->
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--定义文件存放位置-->
      <!--file可以指定具体的路径 D://logfile.txt。-->
      <file value="log\\logfile.txt"/>
      <level value="All"></level>
      <!--如果放在Debug下,当然名字你可以改 -->
      <!--<file value="log//logfile.txt"/>-->
      <appendToFile value="true"/>
      <rollingStyle value="Date"/>
      <!--备份log文件的个数最多10个-->
      <maxSizeRollBackups value="10" />
      <!--每个log文件最大是10M,如果超过10M将重新创建一个新的log文件,并将原来的log文件备份。-->
      <maximumFileSize value="10MB" />
      <datePattern value="yyyy-MM-dd'.txt'"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--输出格式-->
        <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
        <conversionPattern value="记录时间:%date %n线程ID:[%thread] %n日志级别:%-5level %n所在类:%logger property:[%property{NDC}] - %n信息描述:%message%newline"/>
      </layout>
    </appender>
    <!--定义日志的输出媒介-->
    <root>
      <!--指定将此级别及以上的log打印到log文件中-->
      <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
      <!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->
      <!--如果没有定义LEVEL的值,则缺省为DEBUG-->
      <level value="ALL"/>
      <!--文件形式记录日志-->
      <appender-ref ref="LogFileAppender"/>
    </root>
  </log4net>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

设置配置文件属性

在这里插入图片描述
实现日志类

using log4net;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;

//关联配置文件
[assembly:log4net.Config.XmlConfigurator(ConfigFile ="log.config",Watch =true)]
namespace SSmart_RD2021_09_Logger
{
    public class Logger
    {
        ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

        #region Debug
        public virtual void DebugLog(string msg)
        {
            AddLogMessage($"{LoggerTypeEnum.Debug}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
            _log.Debug(msg);
        }
        public virtual void DebugLog(string msg, Exception ex)
        {
            AddLogMessage($"{LoggerTypeEnum.Debug}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
            _log.Debug(msg, ex);
        }
        #endregion

        #region Info
        public virtual void InfoLog(string msg)
        {
            AddLogMessage($"{LoggerTypeEnum.Info}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
            _log.Info(msg);
        }
        #endregion

        #region Warn
        public virtual void WarnLog(string msg)
        {
            AddLogMessage($"{LoggerTypeEnum.Warn}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
            _log.Warn(msg);
        }

        public virtual void WarnLog(string msg, Exception ex)
        {
            AddLogMessage($"{LoggerTypeEnum.Warn}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
            _log.Warn(msg, ex);
        }
        #endregion

        #region Error
        /// <summary>
        /// 添加Error级别日志
        /// </summary>
        /// <param name="sender">错误源</param>
        /// <param name="msg">错误说明</param>
        public virtual void ErrorLog(object sender,string msg)
        {
            //AddLogMessage($"{LoggerTypeEnum.Error}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
            _log.Error($"{msg}|{sender}");
        }

        /// <summary>
        /// 添加Error级别日志
        /// </summary>
        /// <param name="msgToView">要在界面日志框中显示的消息</param>
        /// <param name="ex">错误信息</param>
        public virtual void ErrorLog(string msgToView, Exception ex)
        {
            //LogMsgToView = $"{DateTime.Now.ToString("HH:mm:ss")} | {msg}";
            AddLogMessage($"{LoggerTypeEnum.Error}:{DateTime.Now.ToString("HH:mm:ss")}|{msgToView}");
            _log.Error(msgToView, ex);
        }
        public virtual void ErrorLog(Exception ex)
        {
            _log.Error(ex);
        }

        #endregion

        #region Fatal
        public virtual void FatalLog(string msg)
        {
            AddLogMessage($"{LoggerTypeEnum.Fatal}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
            _log.Fatal(msg);
        }
        public virtual void FatalLog(string msg, Exception ex)
        {
            AddLogMessage($"{LoggerTypeEnum.Fatal}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
            _log.Fatal(msg, ex);
        }
        public virtual void FatalLog(Exception ex)
        {
            _log.Fatal(ex);
        }
        #endregion

        /// <summary>
        /// 向界面绑定的日志信息集合中添加日志(界面最多显示30条日志信息)
        /// </summary>
        /// <param name="logMsg"></param>
        private void AddLogMessage(string logMsg)
        {
            if (LogMessages==null)
            {
                LogMessages = new ObservableCollection<string>();
            }
            if (LogMessages.Count<=30)
            {
                LogMessages.Add(logMsg);
            }
            else
            {
                LogMessages.RemoveAt(0);
                LogMessages.Add(logMsg);
            }
        }
        public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;
        private static ObservableCollection<string> _logMessages;
        /// <summary>
        /// 用于向界面显示时绑定的日志信息源
        /// </summary>
        public static ObservableCollection<string> LogMessages
        {
            get { return _logMessages; }
            set
            {
                _logMessages = value;
                StaticPropertyChanged?.Invoke(null,new PropertyChangedEventArgs(nameof(LogMessages)));
            }
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值