zoukankan      html  css  js  c++  java
  • log4net使用简介

    以前一直用,感觉还可以,今天引入到新项目中,顺便温习一下吧。

    官网:http://logging.apache.org/log4net/download_log4net.cgi

    我用的版本是:1.2.13.0,我有这个dll我就不进行相关操作了,你可以去官网下载,也可以在nuget中下载,自己选不多说,我一会把代码发出来。

    参考的文章:http://www.cnblogs.com/jiajinyi/p/5884930.html   这里讲的很细,没事可以看看

    不多说用代码来说话。

    先来看看配置文件怎么配置:

    App.config

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
        </startup>
      <log4net>
        <!--数据日志-->
        <appender name="InfoRollingFileAppender" type="log4net.Appender.RollingFileAppender">
          <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
          <param name="File" value="LogInfo"/>
          <param name="AppendToFile" value="true"/>
          <!-- 切割最多文件数 -1表示不限制产生日志文件数-->
          <param name="MaxSizeRollBackups" value="-1"/>
          <!-- 每个文件的大小限制  -->
          <param name="MaximumFileSize" value="1MB"/>
          <!--<param name="rollingStyle" value="Date"/>-->
          <!-- RollingStyle Composite 综合  Size 按大小  Date 按时间 -->
          <param name="RollingStyle" value="Composite" />
          <param name="datePattern" value="yyyy-MM-dd.'Info.log'"/>
          <param name="staticLogFileName" value="false"/>
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%n%n%n 记录时间:%date %n日志级别:  %-5level %n出错类:%logger  %n错误描述:%message %newline%newline"/>
          </layout>
          <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="INFO"/>
            <param name="LevelMax" value="INFO"/>
          </filter>
        </appender>
        <!--错误日志-->
        <appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
          <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
          <param name="File" value="LogError"/>
          <param name="AppendToFile" value="true"/>
          <!-- 切割最多文件数 -1表示不限制产生日志文件数-->
          <param name="MaxSizeRollBackups" value="-1"/>
          <!-- 每个文件的大小限制  -->
          <param name="MaximumFileSize" value="1MB"/>
          <!-- RollingStyle Composite 综合  Size 按大小  Date 按时间 -->
          <param name="RollingStyle" value="Composite" />
          <param name="datePattern" value="yyyy-MM-dd.'error.log'"/>
          <param name="staticLogFileName" value="false"/>
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%n%n%n 记录时间:%date %n日志级别:  %-5level %n出错类:%logger  %n错误描述:%message %newline%newline"/>
          </layout>
          <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="ERROR"/>
            <param name="LevelMax" value="ERROR"/>
          </filter>
        </appender>
        <root>
          <level value="DEBUG"/>
          <!--文件形式记录日志-->
          <appender-ref ref="ErrorRollingFileAppender"/>
          <appender-ref ref="InfoRollingFileAppender"/>
        </root>
      </log4net>
    </configuration>
    这里我配置了日志分割,以前遇到过,出错时想去看日志,但日志太大打不开的尴尬局面,这里配置了1MB为一个日志文件
    <!-- 切割最多文件数 -1表示不限制产生日志文件数--> <param name="MaxSizeRollBackups" value="-1"/> <!-- 每个文件的大小限制 --> <param name="MaximumFileSize" value="1MB"/> <!-- RollingStyle Composite 综合 Size 按大小 Date 按时间 --> <param name="RollingStyle" value="Composite" />

    我写了个日志类,实际项目中我也是这么用的,可以直接用

    log.cs

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    [assembly: log4net.Config.XmlConfigurator(Watch = true)]
    namespace log4nettest
    {
        public static class Log
        {
            /// <summary>
            /// 一般错误
            /// </summary>
            /// <param name="message">消息</param>
            public static void Error(object message)
            {
                log4net.ILog log = log4net.LogManager.GetLogger(GetCurrentMethodFullName());
                log.Error(message);
    
            }
    
            /// <summary>
            /// 一般错误
            /// </summary>
            /// <param name="message">消息</param>
            /// <param name="exception">异常</param>
            public static void Error(object message, Exception exception)
            {
                log4net.ILog log = log4net.LogManager.GetLogger(GetCurrentMethodFullName());
                log.Error(message, exception);
            }
    
    
            /// <summary>
            /// 信息
            /// </summary>
            /// <param name="message">消息</param>
            public static void Info(object message)
            {
                log4net.ILog log = log4net.LogManager.GetLogger(GetCurrentMethodFullName());
                log.Info(message);
            }
    
            /// <summary>
            /// 信息
            /// </summary>
            /// <param name="message">消息</param>
            /// <param name="exception">异常</param>
            public static void Info(object message, Exception ex)
            {
                log4net.ILog log = log4net.LogManager.GetLogger(GetCurrentMethodFullName());
                log.Info(message, ex);
            }
    
            /// <summary>
            /// 警告
            /// </summary>
            /// <param name="message">消息</param>
            public static void Warn(object message)
            {
                log4net.ILog log = log4net.LogManager.GetLogger(GetCurrentMethodFullName());
                log.Warn(message);
            }
    
            /// <summary>
            /// 警告
            /// </summary>
            /// <param name="message">消息</param>
            /// <param name="exception">异常</param>
            public static void Warn(object message, Exception ex)
            {
                log4net.ILog log = log4net.LogManager.GetLogger(GetCurrentMethodFullName());
                log.Warn(message, ex);
            }
            static string GetCurrentMethodFullName()
            {
                try
                {
                    int depth = 2;
                    StackTrace st = new StackTrace();
                    int maxFrames = st.GetFrames().Length;
                    StackFrame sf;
                    string methodName, className;
                    Type classType;
                    do
                    {
                        sf = st.GetFrame(depth++);
                        classType = sf.GetMethod().DeclaringType;
                        className = classType.ToString();
                    } while (className.EndsWith("Exception") && depth < maxFrames);
                    methodName = sf.GetMethod().Name;
                    return className + "." + methodName;
                }
                catch
                {
                    return null;
                }
            }
        }
    }

    这里要说的是这句代码:

    [assembly: log4net.Config.XmlConfigurator(Watch = true)]

    log4net默认关联的是应用程序的配置文件App.config(BS程序是Web.config),可以使用程序集自定义属性来进行设置。下面来介绍一下这个自定义属性:
    log4net.Config.XmlConifguratorAttribute。
    mlConfiguratorAttribute有3个属性:
    ConfigFile: 配置文件的名字,文件路径相对于应用程序目录
    (AppDomain.CurrentDomain.BaseDirectory)。ConfigFile属性不能和ConfigFileExtension属性一起使用。
    ConfigFileExtension: 配置文件的扩展名,文件路径相对于应用程序的目录。ConfigFileExtension属性不能和ConfigFile属性一起使用。
    Watch: 如果将Watch属性设置为true,就会监视配置文件。当配置文件发生变化的时候,就会重新加载。
    如果ConfigFile和ConfigFileExtension都没有设置,则使用应用程序的配置文件App.config(Web.config)。

    测试类:

    class Program
        {
            static void Main(string[] args)
            {
                for (int i = 0; i < 10000; i++)
                {
                    Log.Error("error++++配置文件的名字,文件路径相对于应用程序目录");
                    try
                    {
                        int ii = 0 / 100;
                        int[] arr = new int[2];
                        arr[3] = 2;
                    }
                    catch (Exception ex)
                    {
                       Log.Error(ex.Message, ex);
                    }
                    Log.Info("info++++配置文件的名字,文件路径相对于应用程序目录");
                    
                }
                Console.Write("ok");
                Console.Read();
            }
        }

    下载代码

  • 相关阅读:
    Mac终端编写c语言程序方法
    X-code最常用快捷键
    类方法和实例方法区别
    一、SQL语句中的增、删、查、改
    从零开始,学习web前端之HTML基础
    图片 自适应 容器大小
    Java第二天 数据类型
    Java 第一天
    javascript的基础知识
    JavaScript(一)
  • 原文地址:https://www.cnblogs.com/itmu89/p/7155537.html
Copyright © 2011-2022 走看看