日志输出框架Log4j使用

    |     2016年12月27日   |   Java技术   |     0 条评论   |    1601

Log4j 是 Apache 的开源日志项目。用它可以把日志打到控制台、文件等目的地,控制每条日志的格式,并通过级别更细地控制生成过程。这些都可以写在配置文件里,不必改应用代码。

通过其它语言接口,C、C++、.Net、PL/SQL 也能用 Log4j,语法和 Java 里一样,方便多语言分布式系统共用一套日志组件。借助第三方扩展,还可以接到 J2EE、JINI 甚至 SNMP 应用里。

一、三个组件

Log4j 有三个主要组件:Loggers(记录器)、Appenders(输出源)和 Layouts(布局)。可以简单理解成:日志类别、日志要输出到哪里、日志以何种形式输出。三个一起用,就能在运行时控制日志的类型、级别、样式和位置。

组件 作用 配置要点
Loggers 级别过滤 只输出不低于设定级别的日志
Appenders 输出到哪 log4j.appender.appenderName = className
Layouts 怎么排版 log4j.appender.appenderName.layout = className

1. Loggers

级别分五档,顺序是 DEBUG < INFO < WARN < ERROR < FATAL,用来标这条日志有多重要。规则是:只输出级别不低于设定级别的信息。例如 Loggers 设成 INFO,则 INFO、WARN、ERROR、FATAL 都会出,比 INFO 低的 DEBUG 不会出。

2. Appenders

可以把日志打到控制台(Console)、文件(Files)等,也可以按天数或文件大小滚动新文件,或以流的形式发到别处。常用类:

org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

配置模式:

log4j.appender.appenderName = className

3. Layouts

可以在 Appenders 后面附加 Layouts 来格式化输出。常用类:

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

配置模式:

log4j.appender.appenderName.layout =className

一般用第二种 org.apache.log4j.PatternLayout,在 log4j.properties 里自定义:

log4j.appender.*.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

占位符含义:

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

二、使用实例

1. 下载 log4j.jar

地址:http://logging.apache.org/log4j/1.2/download.html

2. log4j.properties 配置文件

### 设置###
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=D://logs/debug.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志到=D://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =D://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

3. 代码使用

import org.apache.log4j.Logger;

public class LogTest {

    private static Logger logger = Logger.getLogger(LogTest.class);

    public static void main(String[] args) {
        // 记录debug级别的信息
        logger.debug("This is debug message.");
        // 记录info级别的信息
        logger.info("This is info message.");
        // 记录error级别的信息
        logger.error("This is error message.");
    }
}

一句话总结:Log4j 用 Logger 定级别、Appender 定去向、Layout 定格式,改 log4j.properties 就能换输出,不必动业务代码。

转载请注明来源:日志输出框架Log4j使用
本文链接地址:https://ai.zhousir.top/?p=1828

上一篇:

下一篇:

回复 取消