zoukankan      html  css  js  c++  java
  • Log4j学习总结

    日志在任何程序系统是不可缺少的。而开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录功能。更多的介绍可以参考下列链接。

    学习参考链接:

    官网Log4j 1.x

    官网Log4j 2.x

    我自己学习过程中,是创建一个maven项目,以1.2.17版本为例,在pom.xml 文件中增加以下配置: maven会自动下载log4j-1.2.17.jar 到项目中

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    

    接下来是,配置文件, 支持两种格式的配置文件:

    .xml文件

    .properties文件 (使用的较多), Log4j.properties文件

     ### 设置###
    log4j.rootLogger = debug,stdout,D,E
    
    ### 输出信息到控制抬 ###
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target = System.out
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
    
    ### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
    log4j.appender.D = org.apache.log4j.RollingFileAppender
    ### 文件目录及文件 ###
    log4j.appender.D.File = E://logs/log.log
    ### 最大文件大小 ###
    log4j.appender.D.MaxFileSize = 100kb
    ### 备份文件个数 ###
    log4j.appender.D.MaxBackupIndex = 10
    ### 往后追加 ###
    log4j.appender.D.Append = true
    log4j.appender.D.Threshold = DEBUG 
    ### 日志布局格式 ###
    log4j.appender.D.layout = org.apache.log4j.PatternLayout
    ### 日志输出格式 ###
    log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
    
    ### 输出ERROR 级别以上的日志到=E://logs/error.log ###
    log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.E.File =E://logs/error.log 
    log4j.appender.E.Append = true
    log4j.appender.E.Threshold = ERROR 
    log4j.appender.E.layout = org.apache.log4j.PatternLayout
    log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
    

    1. 配置根Logger

      根logger主要定义log4j支持的日志级别及输出目的地,其语法为:
      log4j.rootLogger = [ level ] , appenderName, appenderName, …
      其中,level 是日志记录的优先级,分为OFF < FATAL < ERROR < WARN < INFO < DEBUG < ALL或者自定义的级别。不区分大小写。

      注意:rootLogger 默认是对整个工程生效的。 
      需在控制台输入,只需将其中一个appender定义为stdout即可

      

      常用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
      appenderName指定日志信息输出到哪个地方,可同时指定多个输出目的地

    2. 配置输出目的地Appender

      Appender主要定义日志信息输出在什么位置,主要语法为:

      log4j.appender.appenderName = classInfo
      log4j.appender.appenderName.option1 = value1
      …
      log4j.appender.appenderName.optionN = valueN

      Log4j提供的appender有以下几种:

      org.apache.log4j.ConsoleAppender(控制台),
      org.apache.log4j.FileAppender(文件),
      org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
      org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
      org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
      org.apache.log4j.JDBCAppender(将日志信息保存到数据库中)


      以ConsoleAppender为例,如:

      log4j.appender.stdout=org.apache.log4j.ConsoleAppender
      log4j.appender.stdout.Target=System.out

    3. 配置日志信息的格式Layout
      Layout 负责格式化Appender的输出,其语法为:

      log4j.appender.appenderName.layout = classInfo
      log4j.appender.appenderName.layout.option1 = value1
      …
      log4j.appender.appenderName.layout.optionN = valueN

      其中,Log4j提供的layout有以下几种:

      org.apache.log4j.HTMLLayout(以HTML表格形式布局),
      org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
      org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
      org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

    4. 设置package输出级别
      可以设置不同package的日志输出级别,语法为:
      log4j.logger.packageName=level
      其中,packageName为实际的包名,level为日志级别,例如:

      log4j.logger.org.springframework=info
      log4j.logger.org.apache.catalina=info
      log4j.logger.org.apache.commons.digester.Digester=info
      log4j.logger.log.test=debug

    注意日志输出格式: 

    log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

    %c 输出日志信息所属的类的全名
    %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-M-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
    %f 输出日志信息所属的类的类名
    %l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
    %m 输出代码中指定的信息,如log(message)中的message
    %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
    %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
    %r 输出自应用启动到输出该日志信息所耗费的毫秒数
    %t 输出产生该日志事件的线程名


    当配置好log4j后,我们在代码中怎么使用呢?

    1. 获取日志记录器

      一般情况下,在一个类中,会通过该类名来获取。如下例子,在maven项目中的App.java类中

    static Logger logger = Logger.getLogger(App.class.getName());
    

    2.  读取配置文件

      笔者测试时,是创建的maven项目,需要注意下面。

      当配置文件放在src/main/resources的目录下时,使用Class.getResourceAsStream()方法来加载

    Properties prop = new Properties();
    prop.load(this.getClass().getResourceAsStream("/log4j.properties"));
    

      注意:上面代码,我这里省略了try...catch代码块。

      1).若写成"log4j.properties",则是去当前类的class文件同一目录下找
      2).若写成"/log4j.properties",/代表从根目录下查找配置文件,即target/classes。resources编译后的文件也在该目录下

    3. 写入log信息

      调用下面的方法即可:

    Logger.debug(Object message);  
    Logger.info(Object message);  
    Logger.warn(Object message);  
    Logger.error(Object message);
    ...
    

      

  • 相关阅读:
    DPDK — 网卡初始化流程(Intel 82599 ixgbe 网卡驱动示例)
    leetcode 3. 无重复字符的最长子串
    20193120 实验四 Python综合实践
    hadoop常用的端口号
    Django学习笔记
    ORACLE EBS AP invoice 到付款的数据流
    EBS 系统标准职责定义MAP
    Advanced Pricing
    Oracle Advanced Pricing White Papers
    增加AP INVOICE 行&分配行
  • 原文地址:https://www.cnblogs.com/FocusIN/p/6725148.html
Copyright © 2011-2022 走看看