Log4J是Apache的一个开源项目,日志操作软件包。能够制定日志信息输出格式和目的地。通过配置文件灵活配置,不需修改程序代码。
1. Log4J简介
- 目的:监视变量变化情况、跟踪代码运行轨迹、调试器
- 构成组件:
- Logger:生成日志,能对日志信息分类筛选
- Appender:输出目的地
- Layout:输出格式
- 每个Logger可以对应多个Appender,每个Appender对应一个Layout
- 输出到console时用PatternLayout布局;输出到文件时用XMLLayout布局
1.1 Logger组件
核心组件,日志记录器,对日志信息分类筛选,决定信息是被输出还是被忽略。
-
org.apache.logging.log4j.Logger
,提供的方法:- 打印各种级别的日志:大于等于指定级别的日志被输出
- trace(Object msg)
- debug(Object msg)
- info(Object msg)
- warn(Object msg)
- error(Object msg)
- fatal(Object msg)
- 打印日志通用方法:
- log(Level, Object msg)
- 打印各种级别的日志:大于等于指定级别的日志被输出
-
org.apache.logging.log4j.LogManager
提供了获得Logger实例的静态方法:- getRootLogger() 返回根对象
- getLogger(String name) 返回特定对象
-
可以在XML配置文件中配置Logger组件,如下例配置了helloappLogger:
1
2
3<Logger name="helloappLogger" level="warn" additivity="false">
<AppenderRef ref="console"/>
</Logger> -
继承性:
-
rootLogger是所有Logger组件的祖先
1
2
3<Root level="info">
<AppenderRef ref="console"/>
</Root> -
配置文件中即可指定继承关系:本例中childLogger就是helloappLogger的子类
1
2
3<Logger name="helloappLogger.childLogger" level="INFO" additivity="false">
<AppenderRef ref="console"/>
</Logger> -
继承特点:
- 子类没有配置日志级别就继承父类级别
- 默认继承父类所有Appender,除非指明additivity为false,默认true
-
1.2 Appender组件
决定日志输出目的地,当前支持以下地址:
- Console 控制台
- File 文件
- Remote socket server 远程套接字服务器
- NT的事件记录器
- Remote UNIX Syslog daemon 远程UNIX Syslog守护进程
一个Logger可以对应多个Appender:
1 | <Logger name="helloappLogger" level="warn" additivity="false"> |
1.3 Layout组件
决定日志输出格式,有以下类型:
- org.apache.log4j.PatternLayout 灵活地指定布局模式
- HTMLLayout 以HTML形式布局
- XMLLayout 以XML形式布局
- SerializedLayout 可序列化的信息
其中PatternLayout,依照Conversion Pattern转换模式定义输出格式,可以通过预定义符号指定内容和格式:
符号 | 描述 |
---|---|
%r | 自程序开始运行到输出当前日志所消耗的毫秒数 |
%t | 输出当前日志的线程名 |
%level | 日志级别 |
%d | 当前日志的日期和时间 |
%logger | 当前日志的Logger的名字 |
%msg%n | 日志信息的内容 |
eg:为file的Appender配置PatternLayout布局:
1 | <File name="file" fileName="app.log"> |
2. Log4J基本使用方法
2.1 创建Log4J配置文件
支持代码或XML配置。XML配置文件默认名log4j2.xml,默认路径classpath根路径:
1 | <Configuration status="WARN"> |
2.2 程序中使用Log4J
JAR下载地址 主要是core和api两个包。
1 | Logger rootLogger = LoggerManager.getRootLogger(); |
若不存在指定名字的Logger,则创建并返回,所有属性继承父类。
若不存在配置文件,则均采用默认配置:WARN、console、SYSTEM_OUT、%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n
。
3. 在Web应用中使用Log4J
加入JAR包、在WEB-INF/classes下创建配置文件后即可在组件中使用。
若将配置文件放在其他位置,还需在web.xml中通过<context-param>
配置:
1 | <context-param> |
JSP使用时先引入包 <%@ page import="org.apache.logging.log4j.*" %>
,随后就可在<% ... %>
中取得Logger对象输出日志。