01、简单介绍 Log4j(Log for java)是 Apache 的一个开源项目,通过使用 Log4j,可以控制日志信息输送的目的地是控制台或文件等,也可以控制每一条日志的输出格式。通过定义每一条日志信
Log4j(Log for java)是 Apache 的一个开源项目,通过使用 Log4j,可以控制日志信息输送的目的地是控制台或文件等,也可以控制每一条日志的输出格式。通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。使用 Log4j 技术,主要使用的是其配置文件。
02、组件介绍Loggers(日志记录器) 控制日志的输出以及输出级别。输出日志的规则是:只输出级别不低于设定级别的日志信息,假设 Loggers 级别设定为 INFO,则 INFO、WARN、ERROR、FATAL 级别的日志信息都会输出,而级别比 INFO 低的 DEBUG、TRACE 则不会输出。
Appenders(输出控制器) 控制日志输出到不同的地方,如控制台、文件、数据库等。
Layout(日志格式化器) 控制日志的输出格式。
导入依赖:
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
代码示例:
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.junit.Test;
public class Log4jTest {
@Test
public void test01() {
BasicConfigurator.configure(); //加载初始化配置
Logger logger = Logger.getLogger(Log4jTest.class);
logger.trace("trace信息");
logger.debug("debug信息"); //默认级别
logger.info("info信息");
logger.warn("warn信息");
logger.error("error信息");
logger.fatal("fatal信息");
}
}
运行结果:
0 [main] DEBUG com.Log4jTest - debug信息
1 [main] INFO com.Log4jTest - info信息
1 [main] WARN com.Log4jTest - warn信息
1 [main] ERROR com.Log4jTest - error信息
1 [main] FATAL com.Log4jTest - fatal信息
04、配置文件
配置说明:
log4j.rootLogger=日志级别,自定义输出控制器名称(可以多个,逗号隔开)
log4j.appender.自定义输出控制器名称=输出方式
log4j.appender.自定义输出控制器名称.layout=输出格式
代码示例: 创建 log4j.properties 配置文件
#配置日志输出级别,输出控制器
log4j.rootLogger=INFO,console
#配置输出方式(控制台)
log4j.appender.console=org.apache.log4j.ConsoleAppender
#配置输出格式(简单格式)
log4j.appender.console.layout=org.apache.log4j.SimpleLayout
@Test
public void test02() {
// 已有配置文件,无需再加载初始化配置
//BasicConfigurator.configure();
Logger logger = Logger.getLogger(Log4jTest.class);
logger.trace("trace信息");
logger.debug("debug信息");
logger.info("info信息");
logger.warn("warn信息");
logger.error("error信息");
logger.fatal("fatal信息");
}
运行结果:
INFO - info信息
WARN - warn信息
ERROR - error信息
FATAL - fatal信息
05、自定义格式
PatternLayout 是最主要的方式,可以自定义格式输出,具体的占位符及其描述如下:
代码示例:
#配置日志输出级别,输出控制器
log4j.rootLogger=INFO,console
########## 输出到控制台 ##########
#配置输出方式
log4j.appender.console=org.apache.log4j.ConsoleAppender
#配置输出格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#配置转换格式
log4j.appender.console.layout.conversionPattern=[%-5p] %r [%t] [%d{yyyy-MM-dd HH:mm:ss}] %l %m%n
@Test
public void test03() {
Logger logger = Logger.getLogger(Log4jTest.class);
logger.trace("trace信息");
logger.debug("debug信息");
logger.info("info信息");
logger.warn("warn信息");
logger.error("error信息");
logger.fatal("fatal信息");
}
运行结果:
[INFO ] 1 [main] [2022-06-30 21:19:45] Log4jTest.test03(Log4jTest.java:38) info信息
[WARN ] 2 [main] [2022-06-30 21:19:45] Log4jTest.test03(Log4jTest.java:39) warn信息
[ERROR] 2 [main] [2022-06-30 21:19:45] Log4jTest.test03(Log4jTest.java:40) error信息
[FATAL] 3 [main] [2022-06-30 21:19:45] Log4jTest.test03(Log4jTest.java:41) fatal信息
06、日志打印到文件中
#配置日志输出级别,输出控制器
log4j.rootLogger=INFO,file
########## 输出到文件中 ##########
#配置输出方式
log4j.appender.file=org.apache.log4j.FileAppender
#配置输出格式
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#配置转换格式
log4j.appender.file.layout.conversionPattern=[%-5p] %r [%t] [%d{yyyy-MM-dd HH:mm:ss}] %l %m%n
#配置文件位置
log4j.appender.file.file=file.log
#配置输出字符编码
log4j.appender.file.encoding=UTF-8
按照文件大小拆分:
#配置日志输出级别,输出控制器
log4j.rootLogger=INFO,rollingFile
########## 按照文件大小拆分 ##########
#配置输出方式
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
#配置输出格式
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
#配置转换格式
log4j.appender.rollingFile.layout.conversionPattern=[%-5p] %r [%t] [%d{yyyy-MM-dd HH:mm:ss}] %l %m%n
#配置文件位置
log4j.appender.rollingFile.file=rollingFile.log
#配置字符编码
log4j.appender.rollingFile.encoding=UTF-8
#配置文件大小
log4j.appender.rollingFile.maxFileSize=1KB
#配置文件数量
log4j.appender.rollingFile.maxBackupIndex=2
#若文件大小超过1KB,则生成另外一个文件,数量最多2个。
#若2个文件不够用,则按照时间来进行覆盖,保留新的覆盖旧的。
按照时间进行拆分:
#配置日志输出级别,输出控制器
log4j.rootLogger=INFO,dailyRollingFile
########## 按照时间进行拆分 ##########
#配置输出方式
log4j.appender.dailyRollingFile=org.apache.log4j.DailyRollingFileAppender
#配置输出格式
log4j.appender.dailyRollingFile.layout=org.apache.log4j.PatternLayout
#配置转换格式
log4j.appender.dailyRollingFile.layout.conversionPattern=[%-5p] %r [%t] [%d{yyyy-MM-dd HH:mm:ss}] %l %m%n
#配置文件位置
log4j.appender.dailyRollingFile.file=dailyRollingFile.log
#配置字符编码
log4j.appender.dailyRollingFile.encoding=UTF-8
#配置日期格式
log4j.appender.dailyRollingFile.datePattern='.'yyyy-MM-dd
07、日志保存到数据库
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
create table log4j
(
id int(11) not null auto_increment comment '自增ID',
name varchar(255) default null comment '项目名称',
createTime varchar(255) default null comment '创建时间',
level varchar(255) default null comment '日志级别',
thread varchar(255) default null comment '所属线程',
fileName varchar(255) default null comment '文件名称',
location varchar(255) default null comment '日志位置',
message varchar(255) default null comment '日志信息',
primary key (id)
)
#配置日志输出级别,输出控制器
log4j.rootLogger=INFO,db
########## 日志保存到数据库 ##########
#配置输出方式
log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
#配置输出格式
log4j.appender.db.layout=org.apache.log4j.PatternLayout
#配置转换格式
log4j.appender.db.layout.conversionPattern=[%-5p] %r [%t] [%d{yyyy-MM-dd HH:mm:ss}] %l %m%n
#配置数据库
log4j.appender.db.URL=jdbc:mysql://localhost:3306/test
log4j.appender.db.Driver=com.mysql.cj.jdbc.Driver
log4j.appender.db.User=root
log4j.appender.db.Password=root
log4j.appender.db.Sql=insert into log4j (name, createTime, level, thread, fileName, location, message) \
values ('log', '%d{yyyy-MM-dd HH:mm:ss}', '%p', '%t', '%F', '%l', '%m');