2018-11-16 · Develop

Java 日志框架 - Log4j

记录日志是软件开发中的重要一环。编写良好的日志代码能为运行应用提供快速的诊断信息和良好的存储结构,方便维护。记录日志也有其缺点,它会让应用变慢。为了减轻这些影响,Log4j 被设计为可靠的,更快的和可扩展的。

Log4j 主要由三部分组成:

log4j-arch

log4j.properties 文件是 Log4j 的配置文件,默认情况下,LogManager 会在 CLASSPATH 中寻找 Log4j.properties 文件。下面看个示例

1. 引入依赖文件

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

Java 中进行调用

package com.zuojl.controller;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author ZUOJL-PC
 * @version 2018/11/17 0017 15:01
 */
@Controller
public class IndexController {

    private static final Logger log = Logger.getLogger(IndexController.class);

    @RequestMapping("/")
    @ResponseBody
    public String index() {
        for (String key : System.getProperties().stringPropertyNames()) {
            log.debug(String.format("%s -> %s", key, System.getProperty(key)));
        }
        return "Hello, Log4j";
    }
}

在 resources 目录下添加 log4j 配置文件

log4j.rootLogger=DEBUG,console,debug
log4j.logger.org.springframework=ERROR

# 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} %x %5p [%t] %C.%M(%F:%L) | %m%n

# debug file
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.File=${catalina.home}/logs/debug.log
log4j.appender.debug.Append=true
log4j.appender.debug.Threshold=debug
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p [%t] %C.%M(%F:%L) | %m%n
log4j.appender.debug.encoding=UTF-8

# info file
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.File=${catalina.home}/logs/info.log
log4j.appender.info.Append=true
log4j.appender.info.Threshold=debug
log4j.appender.FILE.DatePattern='.' yyyy-MM-dd-a
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p [%t] %C.%M(%F:%L) | %m%n
log4j.appender.info.encoding=UTF-8

# error file
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.File=${catalina.home}/logs/error.log
log4j.appender.error.Append=true
log4j.appender.error.Threshold=debug
log4j.appender.error.Target=System.err
log4j.appender.FILE.DatePattern='.' yyyy-MM-dd-a
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p [%t] %C.%M(%F:%L) | %m%n
log4j.appender.error.encoding=UTF-8

log4j.properties 的配置信息的意义:

Loggers

五个级别的顺序 DEBUG < INFO < WARN < ERROR < FATAL 。

配置中的 Log4j.(logger|rootLogger).[logger-name]=level, appender1,appender..n 就是将 Appender 对象添加至 Logger 对象中。只有被添加到 Logger 中的 Appender 才会生效。
注意: 这里需要注意的是不要将同一个 Appender 添加到不同的 Logger 中,否则会出现同样的日志多次打印的情况,无故消耗服务器性能。

Appender

常用的 Appender 有如下几种:

Appender 的一些属性

DatePattern 描述
'.' yyyy-MM 滚动在每个月的结束和下一个月初
'.' yyyy-MM-dd 这是默认值,每天午夜滚动
'.' yyyy-MM-dd-a 滚动每一天的午夜和中午
'.' yyyy-MM-dd-HH 滚动在每一个小时
'.' yyyy-MM-dd-HH-mm 滚动在每一个分钟
'.' yyyy-ww 滚动每个星期取决于区域设置时的第一天

注意: 可以使用 ${} 的形式调用变量,如果你没有定义这个变量的话会取 System.getProperties() 的值。

Layout

最常用的就是 PatternLayout 下面是其参数的意义:

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:


参考文档
log4j.properties配置详解
Log4j 教程