欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java日志介绍(2)-Log4j

程序员文章站 2023-11-02 14:51:28
Log4j是Apache的一个开源项目,官网地址为http://logging.apache.org/log4j/1.2/index.html。通过使用Log4j,可控制日志信息输出到控制台、文件、数据库等不同的地方;可以控制每一条日志的输出格式,通过定义每一条日志信息的级别,可以更加细致的控制日志 ......

  log4j是apache的一个开源项目,官网地址为http://logging.apache.org/log4j/1.2/index.html。通过使用log4j,可控制日志信息输出到控制台、文件、数据库等不同的地方;可以控制每一条日志的输出格式,通过定义每一条日志信息的级别,可以更加细致的控制日志的生成过程。log4j是曾经风靡一时的日志框架,但现在逐渐被新的日志框架所取代:log4j2、logback。本文主要介绍下log4j的使用方法,文中所使用到的软件版本:java 1.8.0_191、log4j 1.2.17。

  log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式;下面将逐一介绍。

1、日志信息的优先级

log4j日志级别是定义在org.apache.log4j.level类中,log4j只建议使用其中4个级别,优先级从高到低分别是error、warn、info、debug。

2、日志信息的输出目的地 (appender)

log4j提供的appender有以下几种:

org.apache.log4j.consoleappender(控制台)
org.apache.log4j.fileappender(文件)
org.apache.log4j.dailyrollingfileappender(每天产生一个日志文件)
org.apache.log4j.rollingfileappender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.jdbcappender(数据库)
org.apache.log4j.writerappender(将日志信息以流格式发送到任意指定的地方)

3、日志信息的输出格式(layout)

log4j提供的layout有以下几种:

org.apache.log4j.htmllayout(以html表格形式布局)
org.apache.log4j.patternlayout(可以灵活地指定布局模式,常用)
org.apache.log4j.simplelayout(包含日志信息的级别和信息字符串)
org.apache.log4j.ttcclayout(包含日志产生的时间、线程、类别等等信息)

log4j通过参数来格式化日志信息:

%d  输出日志时间点的日期或时间,默认格式为iso8601,也可以在其后指定格式;如:%d{dd mmm yyyy hh:mm:ss,sss},输出类似:02 nov 2012 14:34:02,781
%p  输出优先级
%t  输出产生该日志事件的线程名
%c  输出调用logger的类的全名(包含包路径)
%m  输出调用logger的方法名
%f  输出日志消息产生时所在的文件名称
%l  输出代码中的行号
%m  输出代码中指定的消息
%n  输出一个回车换行符,windows平台为\r\n,unix平台为\n

更多参数说明参见http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/patternlayout.html

4、实际使用

4.1、配置文件log4j.properties

log4j.rootlogger=info,stdout
log4j.logger.com.inspur=file1,file2

log4j.appender.stdout=org.apache.log4j.consoleappender
log4j.appender.stdout.layout=org.apache.log4j.patternlayout
log4j.appender.stdout.layout.conversionpattern=%d %p [%t] %c.%m [%f:%l] %2x -> %m%n

#每天会把日志文件重命名为带前一天日期后缀的文件,如今天为2019-12-30,则文件名为file1.log.2019-12-29,新的日志还输出到file1.log
log4j.appender.file1=org.apache.log4j.dailyrollingfileappender
log4j.appender.file1.file=d:/temp/file1.log
log4j.appender.file1.datepattern=.yyyy-mm-dd
log4j.appender.file1.layout=org.apache.log4j.patternlayout
log4j.appender.file1.layout.conversionpattern=%d %p [%t] %c.%m [%f:%l] %2x -> %m%n

#日志文件超过1kb,则把日志文件重命名为file2.log.1、file2.log.2等等,新的日志还输出到file2.log
log4j.appender.file2=org.apache.log4j.rollingfileappender
log4j.appender.file2.file=d:/temp/file2.log
log4j.appender.file2.maxfilesize=1kb
log4j.appender.file2.maxbackupindex=10
log4j.appender.file2.layout=org.apache.log4j.patternlayout
log4j.appender.file2.layout.conversionpattern=%d %p [%t] %c.%m [%f:%l] %2x -> %m%n

rootlogger配置方式为:

log4j.rootlogger=[level],appender1,appender2

其他logger配置方式为:

log4j.logger.loggername=[level],appender1,appender2

appender的配置方式为:

log4j.appender.appendername=类全名或开头的一部分
log4j.appender.appendername.option1=value1
log4j.appender.appendername.option2=value2

4.2、代码例子

package com.inspur.demo.log;

import org.apache.log4j.logger;
import org.apache.log4j.propertyconfigurator;

/**
 * log4j使用示例
 */
public class log4jcase {
    private static logger logger = logger.getlogger(log4jcase.class);
    
    public static void main(string[] args) throws interruptedexception {
        //加载配置文件
        propertyconfigurator.configure(log4jcase.class.getclassloader().getresource("log4j.properties"));
        logger.debug("this is debug message.");  
        for (int i = 0; i < 1000; i++) {
            logger.info("this is info message:" + i);
        }
    }
}

配置文件配置好,使用还是很简单的。

4.3、web应用spring整合log4j

在web.xml中增加:

    <context-param>
        <param-name>log4jconfiglocation</param-name>
        <param-value>classpath:log4j.properties</param-value>
    </context-param>