zoukankan      html  css  js  c++  java
  • Log4j日志框架学习零到壹(一)

    日志是系统开发过程中用于排查问题重要的记录。通常使用日志来记录系统运行的行为,什么时间点发生了什么 事情。Java中常用的莫过于Log4j框架了。下面主要围绕Log4j的基础知识Log4j的使用方式以及实际开发过程中使用slf4j+log4j做日志等几方面进行展开:

    (一)Log4j的基础知识

      log4j是java中常用的一种日志框架,可以用来控制日志的输出格式、输出位置等。输出位置可以是控制台、文件、数据库、指定服务器等。下面介绍的内容,主要是常用的一些配置方式。

      (1)常用日志级别

      log4j中提供了不同的日志级别,所谓日志级别,就是可以在不同的场景下控制日志的输出。通过日志级别的控制,可以将不同级别的日志输出到不同的位置。常用的日志级别主要有以下四种:

        DEBUG、INFO、WARN、ERROR

      他们的级别从左到右依次是从低到高。如果输出DEBUG级别的日志,那么DEBUG、INFO、WARN、ERROR级别的日志都会输出。

      通常通过控制日志级别将日志输出到不同的文件,便于异常情况的排查。

      (2)Log4j的配置方法

      使用Log4j需要配置log4j.properties配置文件(还可以使用xml格式配置,该部分以properties格式介绍)。

      下面介绍一下配置文件的配置方法,通过该部分的介绍,可以轻松读懂别人的配置文件,亦能自己配置配置文件。

    • log4j根配置
    log4j.rootLogger=WARN, Console, File1

        通过log4j.rootLogger配置整个应用的日志输出级别和输出位置。

          WARN指定了日志的输出级别,Console和File1指定了日志输出的位置,名称随便起,但是一般起的要有意义,以增强可读性。

        如果需要对具体的包、或者类单独控制日志的输出,可以按包进行配置,配置方式如下:

    log4j.logger.com.iot=DEBUG, File2
    

        改配置的意思是com.iot包下的所有类的日志输出级别是DEBUG,输出位置是File2。

    • log4j.appender配置

      appender是配置文件的输出位置,在根配置中,指定了文件的输出位置名字,那么该部分就是指定具体输出位置的形式

      log4j提供了四种常用的输出位置控制,他们是:

      • org.apache.log4j.ConsoleAppender  (输出到控制台)
      • org.apache.log4j.FileAppender  (输出到文件中)
      • org.apache.log4j.DailyRollingFileAppender(输出到文件中,但是每天产生一个日志文件)
      • org.apache.log4j.RollingFileAppender(输出到文件中,可以指定文件的大小,当达到指定的大小就会产生新的日志文件)

      通常使用第一种、第三种和第四种,第二种使用较少,因为只能往一个文件中写日志,日志会越来越大,查看不方便。

      使用方式:

    #Console
    log4j.appender.Console=org.apache.log4j.ConsoleAppender
    
    #RollingFile
    log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.RollingFile.File=../logs/jeesite/jeesite.log
    

      其中加红表粗的字体是根配置中指定的输出位置名,在这里具体指定了是用的输出实现。如果是输出到文件,需要指定文件的路径。

      这里特别强调,如果使用RollingFileAppender,需要指定文件的大小,和文件的个数;

      

        使用MaxFileSize指定文件的大小,即当日志文件大小大于1KB时,就会产生新的日志文件。但是硬盘空间有限,日志文件不能无限量的增加,所以需要限制文件的个数。

        使用MaxBackupIndex指定文件的个数,达到该个数之后,再次产生的日志文件会覆盖掉老的日志文件。

    • 日志的输出格式layout

      一个好的日志格式,可以一眼能发现关键信息所在。log4j提供了集中日志格式实现:

      • org.apache.log4j.HTMLLayout(以HTML表格形式布局)
      • org.apache.log4j.PatternLayout(自定义布局格式)
      • org.apache.log4j.SimpleLayout(简单的日志布局格式)
      • org.apache.log4j.TTCCLayout(包含日志产生的时间,线程,类别等信息)

        通常使用第二种自定义布局格式,通过layout指定具体的布局格式,使用方式:

    log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
    

        使用了自定义布局格式,就需要自定义布局格式,通过layout.ConversionPattern指定日志格式,如下所示:

    log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
    

      注:-5代表占5个字符,为了输出对齐使用。  

      其中各字母的含义如下:

    • 使用Threshold指定具体的日志级别

      在根配置中,指定了日志级别,该级别是对所有的输出位置进行控制的。但是比如我们需要将ERROR级别的日志输出到一个文件中,那么就需要通过Threshold来指定了。使用方法:

    log4j.appender.RollingFile.Threshold=ERROR
    

      

    (二)Log4j的使用方式

       上面介绍了Log4j的基础知识和常用的配置方式,那么在使用的过程中,有以下几个步骤:

      (1)导入log4j的jar包

      (2)按照需求编写log4j.properties配置文件

        例如:

    log4j.rootLogger=DEBUG, Console, File
    
    #Console
    log4j.appender.Console=org.apache.log4j.ConsoleAppender
    log4j.appender.Console.layout=org.apache.log4j.PatternLayout
    log4j.appender.Console.layout.ConversionPattern=%d %-5p [%c{5}] - %m%n
    
    #File
    log4j.appender.File=org.apache.log4j.FileAppender
    log4j.appender.File.File=E://servlet.log
    log4j.appender.File.layout=org.apache.log4j.PatternLayout
    log4j.appender.File.layout.ConversionPattern=%d %-5p [%c{5}] - %m%n

      (3)在web.xml中配置log4j

      • 通过servlet配置log4j

        编写一个servlet,令其随web应用的启动而启动。

        直接代码:

           web.xml配置: 

    <servlet>
          <servlet-name>log4jServlet</servlet-name>
          <servlet-class>Log4jServlet</servlet-class>
          <init-param>
            <param-name>log4j</param-name>
            <param-value>WEB-INF/log4j.properties</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup><!-- 指定servlet随web应用部署而自启动,值越小,优先级越高 -->
      </servlet>
      <servlet-mapping>
          <servlet-name>log4jServlet</servlet-name>
          <url-pattern>/log4jServlet.do</url-pattern>
      </servlet-mapping>

        Log4jServlet代码:

    public class Log4jServlet extends HttpServlet {
    
        @Override
        public void init() throws ServletException {
            super.init();
            String prefix = getServletContext().getRealPath("/");
            String log4jFile = getServletConfig().getInitParameter("log4j");
            String log4jConfigPath = prefix + log4jFile;
            PropertyConfigurator.configure(log4jConfigPath);
        }
    }
      • 通过listener启动

        直接上代码:

          web.xml文件:

    <context-param>
           <param-name>log4j</param-name>
           <param-value>WEB-INF/log4j.properties</param-value>
      </context-param>
         
      <listener>
          <listener-class>LogListener</listener-class>
      </listener>

        listener监听器实现代码:

    public class LogListener implements ServletContextListener {
        @Override
        public void contextDestroyed(ServletContextEvent servletContextEvent) {
            
        }
        @Override
        public void contextInitialized(ServletContextEvent servletContextEvent) {
            ServletContext ctx = servletContextEvent.getServletContext();
            String prefix = ctx.getRealPath("/");
            String log4jFile = ctx.getInitParameter("log4j");
            String log4jConfigPath = prefix + log4jFile;
            PropertyConfigurator.configure(log4jConfigPath);
            System.out.println("initialized log4j finish");
        }
    }

        如果使用spring,那么可以直接使用spring提供的log4j加载监听器,具体使用可查资料。

      (4)日志使用

      配置好上面的过程之后,就可以在代码中直接使用了,使用代码:

    private final static Logger logger = Logger.getLogger(LogServlet.class);
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            logger.debug("执行servlet");
            logger.info("执行servlet");
            logger.warn("执行servlet");
            logger.error("执行servlet");
            
       }

      上面的代码执行完,就会根据日志的配置,在预期的位置输出日志

    (三)实际开发过程中使用slf4j+log4j做日志

       上面内容讲完之后,就可以在开发过程中使用log4j框架进行日志输出了。但是通常在开发中我们经常会见到slf4j。

      SLF4J:即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。

         在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。

      有关slf4j的详细东西,这里不做过多介绍,只介绍如何使用slf4j+log4j实现日志记录。

      基本的配置和使用log4j相同,但是需要导入下面三个包

      

      使用的过程中,Logger类的定义如下:

    private final static org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(LogServlet.class);

      其他的和单独使用log4j没有什么区别。

      

  • 相关阅读:
    Solr&SpringDataSolr
    Redis简单介绍与使用
    ueditor文本编辑器
    FastDFS
    Vue.js快速入门
    分布式架构Duboo+Zookeeper的基础使用
    Linux基本操作&&Linux操作MySQL
    23种设计模式之代理模式(动态代理)
    23种设计模式之代理模式(静态代理)
    MongoDB入门培训 | 8周入门NoSQL No.1数据库
  • 原文地址:https://www.cnblogs.com/zhangyongJava/p/10012440.html
Copyright © 2011-2022 走看看