log4net配置使用

1.配置文件

app.config

 

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
  </startup>
  <appSettings>
    <!--log4net日志配置路径-->
    <add key="log4net" value="log4net.config"/>
    <!--日志是否开启 0不开启 1开启-->
    <add key="IsWriteLog" value="1"/>
  </appSettings>
</configuration>

log4net.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
  <log4net>
    <logger name="logerror">
      <level value="ERROR" />
      <appender-ref ref="ErrorAppender" />
    </logger>
    <logger name="loginfo">
      <level value="INFO" />
      <appender-ref ref="InfoAppender" />
    </logger>
    <logger name="logdebug">
      <level value="DUBUG"></level>
      <appender-ref ref="DebugAppender" />
    </logger>
    <logger name="logfatal">
      <level value="Fatal"></level>
      <appender-ref ref="FatalAppender" />
    </logger>
    <logger name="logwarn">
      <level value="WARN"></level>
      <appender-ref ref="WarnAppender" />
    </logger>
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <!--设置日志存储路径-->
      <param name="File" value="Data//WebLog//LogError//" />
      <!--是否追加到文件-->
      <param name="AppendToFile" value="true" />
      <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
      <param name="MaxSizeRollBackups" value="100" />
      <param name="MaxFileSize" value="1024" />
      <!--是否只写到一个文件中-->
      <param name="StaticLogFileName" value="false" />
      <!--这是按日期产生文件夹,并在文件名前也加上日期-->
      <param name="DatePattern" value="yyyyMM/dd&quot;.log&quot;" />
      <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
      <param name="RollingStyle" value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异常位置:[%thread] (%file:%line) %n消息描述:%message%n异常:%exception%n%n " />
      </layout>
    </appender>
    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
      <!--设置日志存储路径-->
      <param name="File" value="Data//WebLog//LogInfo//" />
      <!--是否追加到文件-->
      <param name="AppendToFile" value="true" />
      <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
      <param name="MaxSizeRollBackups" value="100" />
      <param name="MaxFileSize" value="1024" />
      <!--是否只写到一个文件中-->
      <param name="StaticLogFileName" value="false" />
      <!--这是按日期产生文件夹,并在文件名前也加上日期-->
      <param name="DatePattern" value="yyyyMM/dd&quot;.log&quot;" />
      <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
      <param name="RollingStyle" value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n日志时间:%d [%t] %n日志级别:%-5p %n消息描述:%c [%x] %n%m %n " />
      </layout>
    </appender>
    <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
      <!--设置日志存储路径-->
      <param name="File" value="Data//WebLog//LogDebug//" />
      <!--是否追加到文件-->
      <param name="AppendToFile" value="true" />
      <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
      <param name="MaxSizeRollBackups" value="100" />
      <param name="MaxFileSize" value="1024" />
      <!--是否只写到一个文件中-->
      <param name="StaticLogFileName" value="false" />
      <!--这是按日期产生文件夹,并在文件名前也加上日期-->
      <param name="DatePattern" value="yyyyMM/dd&quot;.log&quot;" />
      <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
      <param name="RollingStyle" value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异常位置:[%thread] (%file:%line) %n消息描述:%message%n异常:%exception%n%n " />
      </layout>
    </appender>
    <appender name="FatalAppender" type="log4net.Appender.RollingFileAppender">
      <!--设置日志存储路径-->
      <param name="File" value="Data//WebLog//LogFatal//" />
      <!--是否追加到文件-->
      <param name="AppendToFile" value="true" />
      <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
      <param name="MaxSizeRollBackups" value="100" />
      <param name="MaxFileSize" value="1024" />
      <!--是否只写到一个文件中-->
      <param name="StaticLogFileName" value="false" />
      <!--这是按日期产生文件夹,并在文件名前也加上日期-->
      <param name="DatePattern" value="yyyyMM/dd&quot;.log&quot;" />
      <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
      <param name="RollingStyle" value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异常位置:[%thread] (%file:%line) %n消息描述:%message%n异常:%exception%n%n " />
      </layout>
    </appender>
    <appender name="WarnAppender" type="log4net.Appender.RollingFileAppender">
      <!--设置日志存储路径-->
      <param name="File" value="Data//WebLog//LogWarn//" />
      <!--是否追加到文件-->
      <param name="AppendToFile" value="true" />
      <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
      <param name="MaxSizeRollBackups" value="100" />
      <param name="MaxFileSize" value="1024" />
      <!--是否只写到一个文件中-->
      <param name="StaticLogFileName" value="false" />
      <!--这是按日期产生文件夹,并在文件名前也加上日期-->
      <param name="DatePattern" value="yyyyMM/dd&quot;.log&quot;" />
      <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
      <param name="RollingStyle" value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异常位置:[%thread] (%file:%line) %n消息描述:%message%n异常:%exception%n%n " />
      </layout>
    </appender>
  </log4net>
</configuration>

2.Helper调用类

using System;
using log4net;

namespace LogService
{
    /// <summary>  
    /// LogHelper的摘要说明。   
    /// </summary>   
    public class LogHelper
    {
        /// <summary>
        /// 静态只读实体对象info信息
        /// </summary>
        public static readonly ILog Loginfo = LogManager.GetLogger("loginfo");

        /// <summary>
        ///  静态只读实体对象error信息
        /// </summary>
        public static readonly ILog Logerror = LogManager.GetLogger("logerror");

        /// <summary>
        ///  静态只读实体对象debug信息
        /// </summary>
        public static readonly ILog LogDebug = LogManager.GetLogger("logdebug");

        /// <summary>
        ///  静态只读实体对象fatal信息
        /// </summary>
        public static readonly ILog LogFatal = LogManager.GetLogger("logfatal");

        /// <summary>
        ///  静态只读实体对象warn信息
        /// </summary>
        public static readonly ILog LogWarn = LogManager.GetLogger("logwarn");

        /// <summary>
        ///  添加info信息
        /// </summary>
        /// <param name="info">自定义日志内容说明</param>
        public static void WriteInfo(object info)
        {
            try
            {
                if (Loginfo.IsInfoEnabled)
                {
                    Loginfo.Info(info);
                }
            }
            catch { }
        }

        /// <summary>
        /// 添加异常信息
        /// </summary>
        /// <param name="info">自定义日志内容说明</param>
        /// <param name="ex">异常信息</param>
        public static void WriteError(string info, Exception ex)
        {
            try
            {
                if (Logerror.IsDebugEnabled)
                {
                    Logerror.Error(info, ex);
                }
            }
            catch { }
        }

        /// <summary>
        /// 添加Debug信息
        /// </summary>
        /// <param name="info">自定义日志内容说明</param>
        /// <param name="ex">异常信息</param>
        public static void WriteDebug(string info, Exception ex)
        {
            try
            {
                if (LogDebug.IsDebugEnabled)
                {
                    LogDebug.Debug(info, ex);
                }
            }
            catch { }
        }

        /// <summary>
        /// 添加fatal信息
        /// </summary>
        /// <param name="fatal">自定义日志内容说明</param>
        public static void WriteFatal(object fatal)
        {
            try
            {
                if (LogFatal.IsFatalEnabled)
                {
                    LogFatal.Fatal(fatal);
                }
            }
            catch { }
        }

        /// <summary>
        /// 添加warn信息
        /// </summary>
        /// <param name="warn">自定义日志内容说明</param>
        public static void WriteWarn(object warn)
        {
            try
            {
                if (LogWarn.IsWarnEnabled)
                {
                    LogWarn.Warn(warn);
                }
            }
            catch { }
        }
    }
}

3.测试代码

using System;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using log4net.Config;

namespace LogService
{
    class Program
    {
        static void Main(string[] args)
        {
            //初始化日志文件 
            string state = ConfigurationManager.AppSettings["IsWriteLog"];
            //判断是否开启日志记录
            if (state == "1")
            {
                var path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + ConfigurationManager.AppSettings["log4net"];
                var fi = new FileInfo(path);
                XmlConfigurator.Configure(fi);
            }

            try
            {
                var x = 0;
                var q = 1 / x;
            }
            catch (Exception e)
            {
                LogHelper.WriteError("xx", e);
                LogHelper.WriteDebug("xx", e);
            }
            LogHelper.WriteInfo("info");
            LogHelper.WriteFatal("fatal");
            LogHelper.WriteWarn("warn");

            Console.WriteLine();
            Console.ReadLine();
        }
    }
}

 github地址:https://github.com/842549829/log4net

原文地址:https://www.cnblogs.com/liuxiaoji/p/9288148.html