Fork me on GitHub

log4net 在 winform当中的使用

二话不说首先通过NUGET导入

 

 

 完成导入以后需要做一些配置,log4net的配置可以直接加入到App.config当中,也可以自己单独创建一个配置文件。

在App.config当中默认会包含一个startup区域。一般来说配置放在startup前面就可以。

log4net的配置分为两个模块一个是注册配置,如下面代码:

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

另外还有一块是对应的配置信息:

<log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name="File" type="log4net.Util.PatternString" value="Log4Net.test" />
      <!--是否是向文件中追加日志-->
      <param name="AppendToFile" value="true" />
      <!--log保留天数-->
      <param name="MaxSizeRollBackups" value="10" />
      <!--日志文件名是否是固定不变的-->
      <param name="StaticLogFileName" value="false" />
      <!--日志文件名格式为:2008-08-31.log-->
      <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n %loggername" />
      </layout>
    </appender>
    <!-- 控制台前台显示日志 -->
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
      <mapping>
        <level value="ERROR" />
        <foreColor value="Red, HighIntensity" />
      </mapping>
      <mapping>
        <!-- 对不同的级别的日志按照不同的颜色在控制台展示-->
        <level value="Info" />
        <foreColor value="Green" />
      </mapping>
      <mapping>
        <level value="ERROR" />
        <foreColor value="Red" />
      </mapping>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%n%date{HH:mm:ss,fff} [%-5level] %m" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Info" />
        <param name="LevelMax" value="Fatal" />
      </filter>
    </appender>
    <root>
      <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
      <level value="all" />
      <appender-ref ref="ColoredConsoleAppender" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>

配置内容至少包括两个模块一个是appender 另一个是root,并且里边的配置要互相呼应才可以准确的完成配置。

目前常用的log4net支持的介质分类有一下

RollingFileAppender 文件日志
AdoNetAppender 数据库日志

ColoredConsoleAppender 控制台日志

到这里为止配置工作计算结束。

在完成配置以后需要写一个日志辅助类具体代码如下
public  class LogHelper
    {
        public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("信息日志");
        public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("错误日志");

        public static void SetConfig()
        {
            log4net.Config.XmlConfigurator.Configure();
        }

        public static void SetConfig(FileInfo configFile)
        {
            log4net.Config.XmlConfigurator.Configure(configFile);
        }

        public static void Info(string str)
        {
            loginfo.Info(str);
        }
        public static void Error(string str)
        {
            loginfo.Error(str);
            logerror.Error(str);
        }
        public static void Error(string str, Exception e)
        {
            logerror.Error(e.ToString(), e); 
            //StackTrace
        }

        public static void Warn(string str)
        {
            loginfo.Warn(str);
            logerror.Warn(str);
        }
    }

其实网上可以找到很多代码。我们这里主要用于演示就简单写一下。

在Program.cs 当中注册配置

static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {

            log4net.Config.XmlConfigurator.Configure();
            BindExceptionHandler();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        /// <summary>
        /// 绑定程序中的异常处理
        /// </summary>
        private static void BindExceptionHandler()
        {
            //设置应用程序处理异常方式:ThreadException处理
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            //处理UI线程异常
            Application.ThreadException +=
                new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);

            //处理未捕获的异常
            AppDomain.CurrentDomain.UnhandledException +=
                new UnhandledExceptionEventHandler(Application_UnhandledExceptionEventHandler);

        }

        private static void Application_UnhandledExceptionEventHandler(object sender, UnhandledExceptionEventArgs e)
        {
            LogHelper.Error("程序异常", e.ExceptionObject as Exception);
        }

        private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
        {
            LogHelper.Error("程序异常", e.Exception as Exception);
        }
         
    }
log4net.Config.XmlConfigurator.Configure(); 是注册配置信息
BindExceptionHandler();是一个自定义函数
主要功能就是捕捉到异常,然后如果log4net来记录日志信息。
以上就是主要的配置和代码了。

演示部分


演示过程就准备一个按钮

 

 代码如下:

private void button1_Click(object sender, EventArgs e)
        {
            LogHelper.Info("这里用户点击了按钮");
            int a = 10;
            int b = 0;
            int c = a / b;
             
        }

这里演示两种情况一种是 LogHelper.Info("这里用户点击了按钮");

主动记录日志,另一种是写了一个除零错误。

我们目前演示程序当中写了两个介质,一个是控制台另一个是日志文件,具体结果如下

控制台显示的日志

 

日志文件显示的日志

 

 到这里为止在winform上使用log4net的完整过程都已经演示到了。

如有不足欢迎指正

 

 




 

 

posted @ 2021-03-04 09:34  太阳出来遇到大海  阅读(435)  评论(0)    收藏  举报