zoukankan      html  css  js  c++  java
  • Log4j1.2配置详解

    Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志的输出到控制台,或者文件等等。

    同时,在各大框架中也主要是使用log4j来进行日志的输出。

    下面是log4j1.x版本的详细配置:

    在1.x版本的log4j中,只需要一个依赖包:log4j-1.x.x.jar

    要使用log4j还需要一个配置文件(log4j.properties),来指定log输出的具体方式。

    先来看一个简单的实现。

    在这个例子中,没有使用配置文件,仅仅用的是默认的配置。

    package com.fuwh.demo;
    
    import org.apache.log4j.BasicConfigurator;
    import org.apache.log4j.Level;
    import org.apache.log4j.Logger;
    
    public class Log4jDemo01 {
    
        public static void main(String[] args) {
            //初始化logger
            Logger log=Logger.getLogger(Log4jDemo01.class);
            //加载默认的配置信息
            BasicConfigurator.configure();
            log.log(Level.ERROR, "这是err log");
            log.debug("这是debug log");
            log.info("这是info log");
            
        }
    }

    输出结果:

    1 [main] ERROR com.fuwh.demo.Log4jDemo01  - 这是err log
    2 [main] DEBUG com.fuwh.demo.Log4jDemo01  - 这是debug log
    3 [main] INFO com.fuwh.demo.Log4jDemo01  - 这是info log

    如果改用配置文件的话就是这样的

    #log4j.properties
    
    #set root logger level to DEBUG and its only appender to A1
    log4j.rootLogger=DEBUG,A1
    
    #A1 is set to be a ConsoleAppender
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    
    #A1 uses PatternLayout
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
    package com.fuwh.demo;
    
    import org.apache.log4j.Level;
    import org.apache.log4j.Logger;
    
    public class Log4jDemo01 {
    
        public static void main(String[] args) {
            //初始化logger
            Logger log=Logger.getLogger(Log4jDemo01.class);
            log.info("log等级:"+log.getLevel());
            
            log.log(Level.ERROR, "这是err log");
            log.debug("这是debug log");
            log.info("这是info log");
        }
    }

    输出信息:

    0    [main] INFO  com.fuwh.demo.Log4jDemo01  - log等级:null
    2    [main] ERROR com.fuwh.demo.Log4jDemo01  - 这是err log
    2    [main] DEBUG com.fuwh.demo.Log4jDemo01  - 这是debug log
    2    [main] INFO  com.fuwh.demo.Log4jDemo01  - 这是info log

    log4j总共有三个组件:loggers,appenders,layouts。

    log4j的配置文件可以是XML文件或者是java的属性文件。

    在log4j中的logger是分等级层次的,最顶层的是rootLogger,其他的logger都会继承他。

    意思就是说:名字为:com.foo的logger是继承自 名为com的logger,名为com的logger又是继承自rootLogger。

    而每一个logger都可以指定输出信息的等级。

    等级是在org.apache.log4j.Level类中定义的,共有下面这些:

    TRACE:表示细粒度的一些信息

    DEBUG:表示调试信息

    INFO:表示一般的信息

    WARN:表示警告信息

    ERROR:表示一般的错误信息

    FATAL:表示致命的错误

    而且这些等级是有顺序的,顺序为:

    DEBUG < INFO < WARN < ERROR < FATAL

    当你指定输出等级之后,只有大于或等于这个等级的消息才会被输出。

    意思就是说,当你指定输出等级为INFO的时候,INFO和WARN,ERROR,FATAL等等消息会被输出,

    但是DEBUG信息不会被输出。

    log4j.properties文件的详细配置

    配置根Logger

    log4j.rootLogger=等级, appenderName , appenderName 。。。

    指定rootLogger的输出等级,并且输出到appenderName这个目的地,这个名字可以自己随便取

    主要用来在下面配置stdout或者R的其他详细信息的时候用的一个名字。

    配置输出目的地Appender

    log4j.appender.appenderName=appender class name

    用来指定输出的类型,还可以指定以下的输出方式:

    org.apache.log4j.ConsoleAppender(控制台),
    org.apache.log4j.FileAppender(文件),
    org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
    org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),可通过log4j.appender.R.MaxFileSize=100KB设置文件大小,还可通过org.apache.log4j.MaxBackupIndex=1设置为保存一个备份文件。
    org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
    例如:log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    定义一个名为stdout的输出目的地,ConsoleAppender为控制台。

    配置日志信息的输出格式

    Layout用来格式化Appender的输出

    log4j.appender.appenderName.layout=layout class name

    log4j.appender.appenderName.layout.option1 = value1

    在log4j中提供的layout有以下几种:

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

    格式化日志

    Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:
    %m 输出代码中指定的消息;
    %M 输出打印该条日志的方法名;
    %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;
    %r 输出自应用启动到输出该log信息耗费的毫秒数;
    %c 输出所属的类目,通常就是所在类的全名;
    %t 输出产生该日志事件的线程名;
    %n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;
    %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2002-10-18 22:10:28,921;
    %l 输出日志事件的发生位置,及在代码中的行数。

    下面是一个典型的log4j配置

    #log4j.properties
    
    #set root logger level to DEBUG and its only appender to A1
    log4j.rootLogger=INFO,Console,logFile
    
    ##Console
    log4j.appender.Console=org.apache.log4j.ConsoleAppender
    log4j.appender.Console.layout=org.apache.log4j.PatternLayout
    log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
    
    ##logFile
    log4j.appender.logFile=org.apache.log4j.RollingFileAppender
    log4j.appender.logFile.File=D:\coding\log4j.txt
    log4j.appender.logFile.MaxFileSize=1KB
    log4j.appender.logFile.MaxBackupIndex=3
    log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logFile.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
    
    #define log level for special class to overrid rootlogger
    #log4j.logger.java.sql.ResultSet=INFO  
    #log4j.logger.org.apache=INFO  
    #log4j.logger.java.sql.Connection=DEBUG  
    #log4j.logger.java.sql.Statement=DEBUG  
    #log4j.logger.java.sql.PreparedStatement=DEBUG  

    小技巧

    有时候,可能你希望某个包或者某个类中的log信息不被输出,或者输出更加详细的,或者更加简单的信息,则可以单独配置来覆盖rootLooger的配置,例如:

    #log4j.logger.org.apache=INFO  
  • 相关阅读:
    第十二周学习进度条
    寻找水王
    第十一周进度条
    第十周进度条
    构建之法阅读笔记(二)
    第九周学习进度
    团队名字
    站立会议09
    站立会议08
    站立会议07
  • 原文地址:https://www.cnblogs.com/zerotomax/p/7400085.html
Copyright © 2011-2022 走看看