正确配置log4j

log4j有三个主要的组件,分别是:

  • Logger(记录器):负责按照设定的优先级过滤日志信息,然后转发到存放器
  • Appender(存放器):负责接收并处理记录器转发来的日志信息,通常的处理是输出到屏幕或者存储到磁盘文件
  • Layout(布局器):负责格式化日志信息

上述三者之间的关系:
一个Logger可以挂接多个Appender(日志信息同时转发到多个设备)
一个Appender指定一个Layout进行格式化操作

 

一、定义配置文件log4j.properties

  1. log4j.记录器名称=[ 级别 ] , 存放器名称1, 存放器名称2, …
    级别优先级由高到低依次是:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
    log4j建议只使用四个级别,优先级从高到低分别是:ERROR、WARN、INFO、DEBUG
    只有优先级高于或等于设定级别的日志信息被转发
    log4j.rootLogger是所有记录器的父对象(原名rootCategory已废弃),可用于设定所有记录器的缺省优先级
    记录器可以继承,如:log4j.myLogger.childLogger=,file
    记录器按名字获得,第一次访问时自动创建(总是存在)
    如果约定每个类都只向其同名记录器输出日志,则在配置文件中可以针对每一个特定类进行日志配置
  2. log4j.appender.存放器名称=存放器类名
    目前,log4j实现的存放器类有以下几种:
        org.apache.log4j.ConsoleAppender(控制台)
        org.apache.log4j.FileAppender(文件)
        org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
        org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
        org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
  3. log4j.appender.存放器名称.layout=布局器类名
    目前,log4j实现的布局器类有以下几种:
        org.apache.log4j.PatternLayout(log4j的标准布局器,可以灵活地指定布局模式)
        org.apache.log4j.HTMLLayout(以HTML表格形式布局)
        org.apache.log4j.SimpleLayout(包含级别和日志信息的简单字符串)
        org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
  4. 设定布局器选项(主要是设定转换格式)
        log4j.appender.存放器名称.layout.选项名=值

    通常采用log4j的标准布局器:
        log4j.appender.存放器名称.layout=org.apache.log4j.PatternLayout
        log4j.appender.存放器名称.layout.ConversionPattern=格式化参数

    log4j采用类似C语言中printf函数的格式化参数格式化日志信息,参数如下:
        %m 输出代码中指定的信息
        %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
        %r 输出自布局器构造到该时间点所经过的毫秒数
        %c 输出所属的类目,通常就是所在类的全名
        %t 输出产生该日志事件的线程名
        %n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
        %d 输出该时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式。如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:08 十二月 03 12:04:52,531
        %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。如:Testlog4.main(TestLog4.java:10)
        %F 输出文件名
        %L 输出行号

 

二、在代码中调用log4j

 

  1. 将log4j的jar包(log4j-1.2.15.jar)导入到工程中。
  2. 写配置文件log4j.properties,放在src目录下,系统运行时自动拷贝到bin目录下。
  
  import org.apache.log4j.Logger;
  ...
  private static final Logger log = Logger.getLogger(类名.class);
  ...
  log.debug( Object message );
  log.info( Object message );
  log.warn( Object message );
  log.error( Object message );

 

 

三、log4j.properties的例子


# Set root logger priority to INFO and its only appender to CONSOLE.
log4j.rootLogger=INFO, CONSOLE
log4j.rootLogger=INFO, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.CONSOLE.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.Threshold=INFO
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

 

 


四、常见故障

  • log4j:WARN Please initialize the log4j system properly.
    解决办法:
    【eclipse环境】将文件log4j.properties拷贝到src目录下,运行时会自动拷贝到bin目录下。之前可能需要Refresh。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值