• Log4Net五部曲


    本文主要讲述如何构建封装一个日志工具类,以及在该过程中遇到的问题,

    关于Log4Net的介绍,就不详细赘述了,更多详细的技术可参考http://www.cnblogs.com/kissazi2/p/3393595.html

    在我完成本功能的过程中也详细拜读了他的博客,讲解的很详细。接下来我将我自己完成的Log4Net做一个展示。在本系统中,存在一个基础类库存放LogHelper工具类以及其他一些工具类,一个Web项目Zone用于调用Log,输出log信息,其他不相干的就不介绍了。其实该功能是相对来说都大同小异。项目目录如下:

    引入log4net.dll文件

    首先需要在项目中引入log4net,引用->Nuget包管理->搜索log4net->Apache Log4net->安装即可,或直接在项目中引入log4net.dll文件

    二、创建log4net的工具类

    创建一个类库,Commons类库,创建一个基础类LogHelper,供其他地方调用

    具体代码如下:

     /// <summary>
        /// 日志
        /// </summary>
        public class LogHelper
        {
           //日志级别
            private const string ErrorLevel = "Error";
            private const string DebugLevel = "Debug";
            private const string InfoLevel = "Info";
            private const string FatalLevel = "Fatal";
            private const string WarningLevel = "Warn";
            static LogHelper()
            {
                var path = AppDomain.CurrentDomain.BaseDirectory + @"log4net.config";
                log4net.Config.XmlConfigurator.Configure(new FileInfo(path));
            }
            #region 获得ILog
            /// <summary>
            /// 根据Log等级获得log
            /// </summary>
            /// <param name="logLevel">Log等级</param>
            /// <returns></returns>
            public static ILog GetLog(string logLevel)
            {
                var log = log4net.LogManager.GetLogger(logLevel);
                return log;
            }
            #endregion
    
            #region Info 级别的日志
            public static void Info(string message)
            {
                var log = GetLog(InfoLevel);
                if (log.IsInfoEnabled)
                {
                    log.Info(message);
                }
            }
            #endregion
            #region Info 级别的日志
            public static void Info(string message,Exception ex)
            {
                var log = GetLog(InfoLevel);
                if (log.IsInfoEnabled)
                {
                    log.Info(message,ex);
                }
            }
            #endregion
    
            #region Debug 级别的日志
            public static void Debug(string message)
            {
                var log = GetLog(DebugLevel);
                if (log.IsDebugEnabled)
                {
                    log.Debug(message);
                }
            }
            #endregion
            #region Debug 级别的日志
            public static void Debug(string message,Exception ex)
            {
                var log = GetLog(DebugLevel);
                if (log.IsDebugEnabled)
                {
                    log.Debug(message,ex);
                }
            }
            #endregion
    
            #region Error 级别的日志
            public static void Error(string message)
            {
                var log = GetLog(ErrorLevel);
                if (log.IsErrorEnabled)
                {
                    log.Error(message);
                }
            }
            #endregion
            #region Error 级别的日志
            public static void Error(string message,Exception ex)
            {
                var log = GetLog(ErrorLevel);
                if (log.IsErrorEnabled)
                {
                    log.Error(message,ex);
                }
            }
            #endregion
    
            #region Fatal 级别的日志
            public static void Fatal(string message)
            {
                var log = GetLog(FatalLevel);
                if (log.IsFatalEnabled)
                {
                    log.Fatal(message);
                }
            }
            #endregion
            #region Fatal 级别的日志
            public static void Fatal(string message,Exception ex)
            {
                var log = GetLog(FatalLevel);
                if (log.IsFatalEnabled)
                {
                    log.Fatal(message,ex);
                }
            }
            #endregion
    
            #region Warn 级别的日志
            public static void Warning(string message)
            {
                var log = GetLog(WarningLevel);
                if (log.IsWarnEnabled)
                {
                    log.Warn(message);
                }
            }
            #endregion
            #region Warn 级别的日志
            public static void Waring(string message,Exception ex)
            {
                var log = GetLog(WarningLevel);
                if (log.IsWarnEnabled)
                {
                    log.Warn(message,ex);
                }
            }
            #endregion
        }

    三、在该类库的AssemblyInfo.cs文件末尾添加

    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]

    四、创建log4net.config

    在调用LogHelper的项目中,创建一个log4net.config,我这里使用的配置内容如下;

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
      </configSections>
      <log4net>
        <root>
          <!--控制级别由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
          <!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->
          <!--如果没有定义LEVEL的值,则缺省为DEBUG-->
          <level value="ALL"/>
        </root>
        <appender name="TestInfo" type="log4net.Appender.RollingFileAppender"  >
          <file value="log/Info/"/>
          <appendToFile value="true"/>
          <rollingStyle value="Composite" />
          <maxSizeRollBackups value="-1" />
          <maximumFileSize value="1MB" />
          <staticLogFileName value="false" />
          <DatePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date  %-5level  - %message%newline" />
          </layout>
        </appender>
        <appender name="TestError" type="log4net.Appender.RollingFileAppender">
          <file value="log/Error/" />
          <appendToFile value="true" />
          <rollingStyle value="Composite" />
          <maxSizeRollBackups value="-1" />
          <maximumFileSize value="1MB" />
          <staticLogFileName value="false" />
          <DatePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date  %-5level - %message%newline" />
          </layout>
        </appender>
        <appender name="TestDebug" type="log4net.Appender.RollingFileAppender">
          <file value="log/Debug/" />
          <appendToFile value="true" />
          <rollingStyle value="Composite" />
          <maxSizeRollBackups value="-1" />
          <maximumFileSize value="1MB" />
          <staticLogFileName value="false" />
          <DatePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date  %-5level - %message%newline" />
          </layout>
        </appender>
    
    
    
        <logger name="Info">
          <level value="ALL"/>
          <appender-ref ref="Info" />
          <appender-ref ref="TestInfo" />
        </logger>
        <logger name="Error">
          <level value="ALL"/>
          <appender-ref ref="Error" />
          <appender-ref ref="TestError" />
        </logger>
        <logger name="Debug">
          <level value="ALL"/>
          <appender-ref ref="Debug" />
          <appender-ref ref="TestDebug" />
        </logger>
      </log4net>
    </configuration>

    关于参数的详细配置,我就不做介绍了,可参考上文提到的博客中有详细介绍(注意,我在loghelper中虽然写了Warn和Fatal级别的日志,但在此配置中没有对这两个级别的日志做配置,故,项目不会产生这两个级别的日志)

    修改log4net.config文件的属性为"始终复制"

    五、在需要使用Log4Net的项目中添加该类库的引用(本系统就是Commons.dll)

    在需要打印log的地方使用。修改

    LogHelper.Info("产生LOG");//产生一条Info级别的Log信息

    运行项目会在该项目目录下产生log/Debug/当前日期.txt、log/Error/当前日期.txt、log/Info/当前日期.txt.

    在本文中红色标注的地方是可能出错的地方,如有异常一定要先检查这些

  • 相关阅读:
    SQL查询,所有的客户订单日期最新的前五条订单记录。
    session的原理
    @RequestMapping 注解用在类上面有什么作用?
    事务的概念,在JDBC编程中处理事务的步骤
    .Redis优势
    Spring框架中都用到了哪些设计模式?
    redis
    你为什么觉得自己能够在这个职位上取得成就?
    怎样理解团队?请举例并说明启示。
    物质待遇和工作条件是人们选择工作的重要因素之一,这次报考谈一谈你在选择工作时都考虑哪些因素?为什么?
  • 原文地址:https://www.cnblogs.com/kingkangstudy/p/7230818.html
Copyright © 2020-2023  润新知