zoukankan      html  css  js  c++  java
  • Log4j、Log4j2的日志输出级别和配置文件详解

    Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。

    一、Log4j的日志输出级别:

    1、  log4j的八个日志级别:OFF FATAL ERROR WARN INFO DEBUG TRACE ALL

    ALL 各级包括自定义级别

    DEBUG 指定细粒度信息事件是最有用的应用程序调试

    ERROR 错误事件可能仍然允许应用程序继续运行

    FATAL 指定非常严重的错误事件,这可能导致应用程序中止

    INFO 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息

    OFF 这是最高等级,为了关闭日志记录

    TRACE 指定细粒度比DEBUG更低的信息事件

    WARN 指定具有潜在危害的情况

    2、  log4j的核心,系统启动日志级别a,日志打印级别b,在记录日志请求是b>=a,日志可以打印出来。级别顺序:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

    3、  log4j建议使用四个日志级别2个日志开关

    DEBUG:输出调试信息;指出细粒度信息事件对调试应用程序是非常有帮助的。

    INFO: 输出提示信息;消息在粗粒度级别上突出强调应用程序的运行过程。

    WARN: 输出警告信息;表明会出现潜在错误的情形。

    ERROR:输出错误信息;指出虽然发生错误事件,但仍然不影响系统的继续运行。

    FATAL: 输出致命错误;指出每个严重的错误事件将会导致应用程序的退出。

    ALL level:打开所有日志记录开关;是最低等级的,用于打开所有日志记录。

    OFF level:关闭所有日志记录开关;是最高等级的,用于关闭所有日志记录。

    二、Log4j.properties配置文件详解

    1、log4j.rootLogger=DEBUG,console,FILE

    log4j.rootLogger用来配置日志输出的优先级和日志输出的目的地。第一个字DEBUG指定优先级,只能指定一个字段。第二个字段和第三个字段,用来指定日志输出的目的地。console代表输出到控制台,FILE代表输出到文件。如果只有一个输出目的地,我们也可以只指定一个字段。

    2、log4j.appender.console=org.apache.log4j.ConsoleAppender、og4j.appender.console用来配置具体的类,这里的console就是我们在上面定义的log4j.rootLogger=DEBUG,console,FILE

    3、log4j.appender.console.threshold=INFO

    threshold是个全局的过滤器,把低于所设置的level的信息过滤掉,不显示出来。

    4、log4j.appender.console.layout=org.apache.log4j.PatternLayout

    指定布局样式,Log4j具有以下几种类型的布局Layout

    PatternLayout:根据指定的转换模式格式化日志输出

    HTMLLayout:格式化日志输出为HTML表格

    XMLLayout:格式化日志输出为XML文件

    SimpleLayout:以一种非常简单的方式格式化日志输出

    TTCCLayout:包含日志产生的时间、线程、类别等信息

    5、log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c -%F(%L) -%m%n

    设置日志的布局格式

    6、log4j.appender.FILE=org.apache.log4j.RollingFileAppender

    输出到文件

    org.apache.log4j.ConsoleAppender(输出日志到控制台)

    org.apache.log4j.FileAppender(输出日志到文件)

    org.apache.log4j.DailyRollingFileAppender(输出日志到文件,且每天产生一个日志文件)

    org.apache.log4j.RollingFileAppender(输出日志到文件,且文件大小到达指定尺寸的时候产生一个新的文件)

    org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

    ConsoleAppender选项:

    Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。

    ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。

    Target=System.err:默认值是System.out。

    FileAppender选项:

    Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。

    ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。

    Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。

    File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。

    DailyRollingFileAppender选项:

    Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。

    ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。

    Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。

    File=D:/logs/logging.log4j:指定当前消息输出到logging.log4j文件中。

    DatePattern='.'yyyy-MM:每月滚动一次日志文件,即每月产生一个新的日志文件。当前月的日志文件名为logging.log4j,前一个月的日志文件名logging.log4j.yyyy-MM。

    另外,也可以指定按周、天、时、分等来滚动日志文件,对应的格式如下:

    1)'.'yyyy-MM:每月

    2)'.'yyyy-ww:每周

    3)'.'yyyy-MM-dd:每天

    4)'.'yyyy-MM-dd-a:每天两次

    5)'.'yyyy-MM-dd-HH:每小时

    6)'.'yyyy-MM-dd-HH-mm:每分钟

    RollingFileAppender选项:

    Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。

    ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。

    Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。

    File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。

    MaxFileSize=100KB:后缀可以是KB, MB 或者GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.1文件中。

    MaxBackupIndex=2:指定可以产生的滚动文件的最大数,例如,设为2则可以产生logging.log4j.1,logging.log4j.2两个滚动文件

    和一个logging.log4j文件。

    7、log4j.appender.FILE.Append=true

    是否追加:是

    8、log4j.appender.FILE.File=../logs/log4jtest.log

    日志文件路径

    9、log4j.appender.FILE.MaxFileSize=10MB

    设置文件大小超过10MB以后自动更名,将原来的日志移动到新的新的文件中,打包备份。

    10、log4j.appender.FILE.MaxBackupIndex=50

    设置可以产生的滚动文件的最大数量,也就是可以产生的备份文件的最大数量。

    三、实战应用

    Log4j.properties配置:

    log.home=D:\weblogiclog

    log4j.rootLogger=DEBUG

    #credit

    log4j.logger.credit=WARN,credit,console

    #console

    log4j.appender.console=org.apache.log4j.ConsoleAppender

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

    log4j.appender.console.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss,SSS} [%-3p][class:%l] %m %n

    #bcmp-tran-credit.log

    log4j.appender.credit=com.paic.cmp.esb.util.MinuteRollingAppender

    log4j.appender.credit.Append=true

    #'.'yyyy-MM-dd-HH-mm,对应minutely(每分钟)

    log4j.appender.credit.File=${log.home}/bcmp-tran-credit.log

    log4j.appender.credit.intervalTime=2

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

    log4j.appender.credit.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss,SSS} [%-3p][class:%l] %m %n

    日志输出配置:

             代码中日志打印级别默认INFO

    1、  log.home:日志输出文件路径

    log4j.rootLogger:日志输出优先级(DEBUG)a

    log4j.logger.credit:日志输出级别b、日志输出到文件bcmp-tran-credit.log、日志输出到控制台

    当b>=a,日志输出到文件及控制台

    2、  当log4j.logger.credit=DEBUG,credit 由于a=DEBUG 日志只输出到文件

    3、  当log4j.logger.credit=WARN,credit,console 由于WARN>IFNO 日志不输出。

    Log4j所需jar:log4j-XXX.jar

    四、log4j2.xml配置文件详解

             1、配置文件的名称以及在项目中的存放位置

            log4j 2.x版本不支持1.x中的.properties后缀的文件配置方式,2.x版本配置文件后缀名只能为".xml",".json"或者".jsn"。

      系统选择配置文件的优先级(从先到后)如下:

    .classpath下的名为log4j2-test.json 或者log4j2-test.jsn的文件.

    .classpath下的名为log4j2-test.xml的文件.

    .classpath下名为log4j2.json 或者log4j2.jsn的文件.

    .classpath下名为log4j2.xml的文件.

    我们一般默认使用log4j2.xml进行命名。如果本地要测试,可以把log4j2-test.xml放到classpath,而正式环境使用log4j2.xml,则在打包部署的时候不要打包log4j2-test.xml即可。

    2、配置文件节点解析

    (1)根节点Configuration有两个属性:status和monitorinterval,有两个子节点:Appenders和Loggers(表明可以定义多个Appender和Logger).

    status用来指定log4j本身的打印日志的级别.

    monitorinterval用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s.

    (2)Appenders节点,常见的有三种子节点:Console、RollingFile、File.

    Console节点用来定义输出到控制台的Appender.

    name:指定Appender的名字.

    target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT.

    PatternLayout:输出格式,不设置默认为:%m%n.

    File节点用来定义输出到指定位置的文件的Appender.

    name:指定Appender的名字.

    fileName:指定输出日志的目的文件带全路径的文件名.

    PatternLayout:输出格式,不设置默认为:%m%n.

    RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender.

    name:指定Appender的名字.

    fileName:指定输出日志的目的文件带全路径的文件名.

    PatternLayout:输出格式,不设置默认为:%m%n.

    filePattern:指定新建日志文件的名称格式.

    Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志.

    TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am.

    SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小.

    DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。

    (3)Loggers节点,常见的有两种:Root和Logger.

    Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出

    level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

    AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender.

    Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。

    level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

    name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点.

    AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。

    4、  完整的配置模版

    五、log4j2.xml实战

             <?xml version="1.0" encoding="UTF-8"?>

    <configuration status="info">

             <Appenders>

                       <Console name="CONSOLE" target="SYSTEM_OUT">

                                <PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%-3p] %x %c{1}: %m%n" />

                                <!--

                                <filter class="org.apache.log4j.varia.LevelRangeFilter">

                                <param name="LevelMin" value="WARN"/>

                                <param name="LevelMax" value="ERROR"/>

                                </filter>-->

                       </Console>

                       <RollingRandomAccessFile name="logFile"

                                fileName="D:/log/pafa.log" filePattern="pafa.log.%d{yyyyMMdd}"

                                immediateFlush="false" bufferSize="262144">

                                <PatternLayout pattern="%d{MM/dd HH:mm:ss.sss} [%-3p] %c{1}: %m%n" />

                                <Policies>

                                         <TimeBasedTriggeringPolicy interval="1"

                                                   modulate="true" />

                                </Policies>

                       </RollingRandomAccessFile>

                       <Async name="logFileAsync" bufferSize="2000" blocking="false">

                                <AppenderRef ref="logFile" />

                       </Async>

                      

                      

                       <RollingRandomAccessFile name="credit"

                                                                                fileName="D:/log/credit.log" filePattern="credit-%d{yyyy-MM-dd}-%i.log">

                                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} [%p] [%t] %c{1} - %m%n"/>

                                <Policies>

                                         <TimeBasedTriggeringPolicy interval="1" modulate="true" />

                                </Policies>

                                <DefaultRolloverStrategy max="20"/>

                       </RollingRandomAccessFile>

                      

                       <RollingRandomAccessFile name="error1"

                                                                                fileName="D:/log/credit-error.log" filePattern="credit-error-%d{yyyy-MM-dd}-%i.log">

                                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} [%p] [%t] %c{1} - %m%n"/>

                                <Policies>

                                         <TimeBasedTriggeringPolicy interval="1" modulate="true" />

                                </Policies>

                                <DefaultRolloverStrategy max="20"/>

                                <Filters>

                    <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>

                  </Filters>

                       </RollingRandomAccessFile>

                      

             </Appenders>

             <Loggers>

                       <logger name="org.apache" level="INFO" />

                       <logger name="java.sql.Connection" level="INFO">

                       </logger>

                       <logger name="com.ibatis" level="INFO"></logger>

                       <logger name="java.sql.Statement" level="INFO" />

                       <logger name="java.sql.PreparedStatement" level="INFO" />

                       <logger name="com.paic.pafademo" level="INFO" />

                       <Logger name="credit" level="INFO" additivity="false"> 

                <appender-ref ref="credit"/>

            </Logger>

                       <Root level="INFO">

                           <appender-ref ref="error1"/>

                                <AppenderRef ref="logFileAsync" />

                                <AppenderRef ref= "CONSOLE"/>

                       </Root>

                       </Loggers>

    </configuration>

    private static Logger creditLogger = LoggerFactory.getLogger("credit");

    creditLogger.info("sssssssssssssssssssssssssssssssssss123");

    结果:

    日志打印到控制台,但是credit只输出到文件,不打印到控制台(additivity="false")。

    Credit-error.log只打印error级别的日志,并打印到控制台。

  • 相关阅读:
    Linux常用命令英文全称与中文解释Linux系统
    最流行的android组件大全
    Android eclipse中程序调试
    Oracle----Key Word
    Oracle----date
    ANDROID代码实现APK文件的安装与卸载
    listview加载性能优化
    【369】列表/字典的分拆, unpacking
    【368】相关术语说明
    【367】通过 python 实现 SVM 硬边界 算法
  • 原文地址:https://www.cnblogs.com/zszitman/p/9719327.html
Copyright © 2011-2022 走看看