在wpf中使用log4net.dll保存日志的两种方法

在wpf中使用log4net.dll保存日志有两种方法,一种是在App.config文件中设置log4net保存属性,第二种是使用本地log4net配置文件。以下是两种方法的详细描述

  1. 方法一,使用App.config配置

1.1 在nuget中添加log4net.dll
在这里插入图片描述
1.2 在configuration中添加以下代码

<configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>

<log4net>
  <appender name="DateFileAppender" type="log4net.Appender.RollingFileAppender">
    <!-- 相对路径:Logs 目录 -->
    <file value="Logs\log-" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyy-MM-dd&quot;.txt&quot;" /><!--日志文件格式为日期.txt-->
    <staticLogFileName value="false" /><!--是否为绝对路径-->>
    <maxSizeRollBackups value="10" /><!--每天最多10个备份文件--><!--比如只保留30天的log文件,必须用代码删除-->
    <maximumFileSize value="10MB" /><!--每个文件最大15兆-->&gt;
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>

  <root>
    <level value="DEBUG" />
    <appender-ref ref="DateFileAppender" />
  </root>
</log4net>
<appSettings>
  <add key="log4net.Internal.Debug" value="true" />
</appSettings>

关键参数含义可以看后面的备注

1.3 新建一个LogBase类用于专门写日志文件

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using log4net;
namespace Motion
{
    public class LogBase
    {
        private static ILog _log;
        public static ILog Log
        {
            get
            {
                if (_log == null)
                {
                    log4net.Config.XmlConfigurator.Configure(LogManager.GetRepository(System.Reflection.Assembly.GetEntryAssembly()));//使用App.Config中的日志配置信息
                    //log4net.Config.XmlConfigurator.Configure(new FileInfo("Log4Net.config"));//使用Log4Net.config中的配置
                    _log = LogManager.GetLogger(typeof(App));
                    _log.Info("Log初始化成功");
                }
                return _log;
            }
        }
        //public LogBase() 
        //{

        //}
        //public static readonly ILog Log = LogManager.GetLogger("RollingLogFileAppender");
        //public static readonly ILog Log = LogManager.GetLogger(typeof(App));


        //        log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。 
        //ALL 最低等级的,用于打开所有日志记录。
        //DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。 
        //INFO 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,
        //WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
        //ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。
        //FATAL 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。

        //TRACE designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。  
        //OFF 最高等级的,用于关闭所有日志记录。
        //如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来。例如,如果设置优先级为WARN,那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出,而INFO、DEBUG、TRACE、 ALL级别的log则会被忽略。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。

        #region DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。 
        public static void debug(string write)
        {

            Log.Debug("日志记录:" + write);
        }
        public static void debug(string write, Exception ex)
        {
            Log.Debug("日志记录:" + write + "。错误记载:" + ex.ToString());
        }
        #endregion
        #region INFO 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,
        /// <summary>
        /// 1
        /// </summary>
        /// <param name="write"></param>
        public static void Info(string write)
        {
            Log.Info("日志记录:" + write);
        }
        public static void Info(string write, Exception ex)
        {
            Log.Info("日志记录:" + write + "。错误记载:" + ex.ToString());
        }
        #endregion
        #region WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。,可以使用这个级别。
        public static void warn(string write)
        {
            Log.Warn("日志记录:" + write);
        }
        public static void warn(string write, Exception ex)
        {
            Log.Warn("日志记录:" + write + "。错误记载:" + ex.ToString());
        }
        #endregion

        #region ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。
        public static void error(string write)
        {
            Log.Error("日志记录:" + write);
        }
        public static void error(string write, Exception ex)
        {
            Log.Error("日志记录:" + write + "。错误记载:" + ex.ToString());
        }
        #endregion
        #region FATAL 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。
        public static void fatal(string write)
        {
            Log.Fatal("日志记录:" + write);
        }
        public static void fatal(string write, Exception ex)
        {
            Log.Fatal("日志记录:" + write + "。错误记载:" + ex.ToString());
        }
        //#endregion
        #endregion
    }
}

注意代码中的第19行
log4net.Config.XmlConfigurator.Configure(LogManager.GetRepository(System.Reflection.Assembly.GetEntryAssembly()));//表示从当前 WPF 应用的 App.config 中加载 log4net 的配置,并将其应用到日志系统中。

1.4使用

LogBase.Info(info);//常规日志
LogBase.error(info);//错误日志
LogBase.warn(info);//警告日志
  1. 方法二,使用本地配置
    2.1 参考上面的1.1添加dll
    2.2 在程序的debug目录新建Log4Net.config文件,在里面写入保存日志的设置
    根目录新建配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
  <appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
    <add key=" "/>
  </appSettings>
  <log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <file value="Logs\log-" />
    <datePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
    <appendToFile value="true" />
    <staticLogFileName value="false"/>
    <rollingStyle value="Composite" />
    <maxSizeRollBackups value="10"/>
    <maximumFileSize value="5MB"/>
  <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%L] - %m%n" />
   </layout>
</appender>

    <root>
      <level value="DEBUG" />
      <!--指定将此级别及以上的log打印到log文件中-->
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>
</configuration>

保存文件
2.3 参考1.3中新建LogBase类,代码一样,只要将19行的

log4net.Config.XmlConfigurator.Configure(LogManager.GetRepository(System.Reflection.Assembly.GetEntryAssembly()));//使用App.Config中的日志配置信息
                    //log4net.Config.XmlConfigurator.Configure(new FileInfo("Log4Net.config"));//使用Log4Net.config中的配置

替换为

//log4net.Config.XmlConfigurator.Configure(LogManager.GetRepository(System.Reflection.Assembly.GetEntryAssembly()));//使用App.Config中的日志配置信息
log4net.Config.XmlConfigurator.Configure(new FileInfo("Log4Net.config"));//使用Log4Net.config中的配置

这个替换起什么作用呢?其实很好理解,就是设置log4net保存日志时配置信息的来源,直接通过Log4Net.config来设置日志保存配置信息,好处是什么呢?也很简单,就是可直接修改Log4Net文件来改保存配置,而不需要修改代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值