目录
一、log4j1详情:记录器和日志级别
二、 log4j1详情:输出源【输出到不同的位置】
1、ConsoleAppender【将日志输出到控制台】
2、FileAppender【将日志输出到文件】
3、DailyRollingFileAppender【每日输出到一个新文件】
4、JDBCAppender【输出到数据库】
💟 创作不易,不妨点赞💚评论❤️收藏💙一下
前言
log4j 包括三个主要部件:
-
记录器 Loggers: 用于设置日志级别与输出源
-
输出源 Appenders: 日志要输出的地方
-
布局 Layouts: 日志输出格式
一、log4j1详情:记录器和日志级别
记录器:
#log4j.rootLogger=日志级别, 输出源1, 输出源2, ...
log4j.rootLogger=trace, stdout, file
日志级别:
-
日志级别:用于控制程序日志输出内容,不同的级别对应不同的方法。
-
log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别)
级别 Level | 描述 |
---|---|
ALL | 特殊级别:最低等级的,用于打开所有日志记录 |
TRACE | 指定细粒度比DEBUG更低的信息事件 |
DEBUG | 细粒度信息事件。显示应用程序==调试==相关。 |
INFO | 粗粒度级别,强调程序的运行情况。显示应用程序运行==信息==相关。 |
WARN | 具有潜在危害。显示应用程序==警告==相关。 |
ERROR | 错误事件可能仍然允许应用程序继续运行。显示应用程序==错误==相关。 |
FATAL | 指定非常严重的错误事件,这可能导致应用程序中止。显示应用程序==致命==相关。 |
OFF | 特殊级别:最高等级的,用于关闭所有日志记录 |
-
优先级从低到高依次为:
ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
-
如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来。
-
例如:如果设置优先级为WARN,那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出
-
一般只使用4个级别,优先级从高到低为 ERROR > WARN > INFO > DEBUG
-
6个日志级别,对应Java Logger类的6个方法
二、 log4j1详情:输出源【输出到不同的位置】
-
输出源(Appender) 用来指定日志输出的位置
-
基本语法:
log4j.appender.名称=输出源实现类(固定值,由log4j提供) log4j.appender.名称.属性=属性值 log4j.appender.名称.layout=布局实现类(固定值) log4j.appender.名称.layout.ConversionPattern=格式
-
常见实现类有:
名称 | 描述 |
---|---|
AsyncAppender | 使用一个单独线程记录日志,实现异步处理日志事件。 |
ConsoleAppender | 将日志信息输出到控制台 |
DailyRollingFileAppender | 将日志输出到一个日志文件,并且每天输出到一个新的文件 |
FileAppender | 一个OutputStreamAppender,将日志输出到文件 |
JDBCAppender | 将日志通过JDBC输出到关系型数据库 |
JMS Appender | 将日志输出到JMS(Java Message Service) |
RewriteAppender | 允许对日志信息进行加工 |
RollingFileAppender | 按log文件最大长度限度生成新文件 |
SMTPAppender | 将日志输出到邮件 |
SocketAppender | 将日志输出到一个Socket |
SyslogAppender | 是一个SocketAppender,将日志输出到远程系统日志 |
1、ConsoleAppender【将日志输出到控制台】
# 2.1 将日志输出到控制台
# log4j.appender.数据名称.属性
# 第一行:一个类,设置别名stdout
# 第二行:调用别名stdout.属性 别名的set方式,设置他的输出方式,一个是out一个是err,输出方式的颜色不同
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=%d{ABSOLUTE} %5p %c:%L - %m%n
常见属性:
Target:以什么方式输出到控制台。
取值:System.out、System.err
默认值:System.out
2、FileAppender【将日志输出到文件】
# 2.2 将日志输出到文件
# 设置一个别名,属性指定消息输出文件所在位置,设置是否将消息进行追加,false就是不追加将会覆盖消息
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=d:/file.log
log4j.appender.file.Append=false
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c:%L - %m%n
常见属性:
file:消息输出文件所在位置
Append:消息是否追加到指定的文件。
true:将消息追加到指定文件,默认值。
false:将消息覆盖指定的文件
3、DailyRollingFileAppender【每日输出到一个新文件】
# 2.3 每日输出到一个新文件
# DatePattern:配置回滚文件的后缀格式
# 回滚文件:每一天按照指定格式生成一个文件,如果存在就在改文件的基础上在生成一个文件;按照DatePattern设置的后缀格式生成.log结尾的文件
log4j.appender.daily=org.apache.log4j.DailyRollingFileAppender
log4j.appender.daily.File=d:/daily.log
log4j.appender.daily.Append=true
log4j.appender.daily.DatePattern='-'yyyy-MM-dd-HH-mm'.log'
log4j.appender.daily.layout=org.apache.log4j.PatternLayout
log4j.appender.daily.layout.ConversionPattern=%d{ABSOLUTE} %5p %c:%L - %m%n
常见属性:
DatePattern: 配置回滚文件的后缀格式
'.'yyyy-MM:对应monthly(每月)
'.'yyyy-ww:对应weekly(每周)
'.'yyyy-MM-dd:对应daily(每天)
'.'yyyy-MM-dd-a:对应half-daily(每半天)
'.'yyyy-MM-dd-HH:对应hourly(每小时)
'.'yyyy-MM-dd-HH-mm:对应minutely(每分钟)
4、JDBCAppender【输出到数据库】
准备工作:
创建表:
CREATE TABLE `log` (
`log_id` INT(11) NOT NULL AUTO_INCREMENT,
`project_name` VARCHAR(255) DEFAULT NULL COMMENT '目项名',
`create_date` VARCHAR(255) DEFAULT NULL COMMENT '创建时间',
`level` VARCHAR(255) DEFAULT NULL COMMENT '优先级',
`category` VARCHAR(255) DEFAULT NULL COMMENT '所在类的全名',
`file_name` VARCHAR(255) DEFAULT NULL COMMENT '输出日志消息产生时所在的文件名称 ',
`thread_name` VARCHAR(255) DEFAULT NULL COMMENT '日志事件的线程名',
`line` VARCHAR(255) DEFAULT NULL COMMENT '号行',
`all_category` VARCHAR(255) DEFAULT NULL COMMENT '日志事件的发生位置',
`message` VARCHAR(4000) DEFAULT NULL COMMENT '输出代码中指定的消息',
PRIMARY KEY (`log_id`)
);
添加坐标
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
log4j 配置
# 2.4 输出到数据库
log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.database.URL=jdbc:mysql://localhost:3306/test
log4j.appender.database.driver=com.mysql.jdbc.Driver
log4j.appender.database.user=root
log4j.appender.database.password=1234
log4j.appender.database.Sql=INSERT INTO log(project_name,create_date,level,category,file_name,thread_name,line,all_category,message) values('leon','%d{yyyy-MM-dd HH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')
log4j.appender.database.layout=org.apache.log4j.PatternLayout
常见属性
url:数据库连接
driver:数据库驱动
user:数据库账号
password:数据库密码
sql:添加日志时执行的插入语句。与值为PatternLayout提供
写到最后
四季轮换,已经数不清凋零了多少, 愿我们往后能向心而行,一路招摇胜!
🐋 你的支持认可是我创作的动力
💟 创作不易,不妨点赞💚评论❤️收藏💙一下
😘 感谢大佬们的支持,欢迎各位前来不吝赐教