Log4j配置详细讲解
1.安装Log4j相关包
<dependency>
<groupId> log4j </ groupId>
<artifactId> log4j </ artifactId>
<version> 1.2.17 </ version>
</依赖>
2.log4j基本配置
2.1配置根logger定义示例
#配置根Logger
log4j.rootLogger = [level],appenderName1,appenderName2,...
#配置日志信息输出目的地Appender
log4j .appender.appenderName(rootlogger定义的名称)= fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
...
log4j.appender.appenderName.optionN = valueN #配置日志信息的格式(布局)
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
2.1.1日志level
Log4j的日志级别从低到高顺序为:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF,当定义了日志级别为WARN后,那么比它高的级别(ERROR < FATAL)会打印出来。
Log4j由三个重要的组件构成:
- 日志信息的优先级:日志信息的优先级从高到低有FATAL、ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度;
- 日志信息的输出目的地:日志信息的输出目的地指定了日志将打印到控制台、文件中还是数据库中
- 日志信息的输出格式:控制了格式化输出日志信息的显示内容
其中[level]是其日志输出级别,五种级别分别为
lever | 数字代号 | 描述 |
---|---|---|
FATAL | 0 | 指出每个严重的错误事件将会导致应用程序的退出 |
ERROR | 3 | 指出虽然发生错误事件,但仍然不影响系统的继续运行 |
WARN | 4 | 表明会出现潜在错误的情形 |
INFO | 6 | 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息 |
DEBUG | 7 | 指定细粒度信息事件是最有用的应用程序调试 |
2.2log4j配置信息详解
配置信息 | 定义方法 |
---|---|
Appender日志输出目的地 | org.apache.log4j.ConsoleAppender(控制台), org.apache.log4j.FileAppender(文件), org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),< BR /> org.apache.log4j.WriterAppender(将将日志信息以流格式发送到), < BR /> org.apche.log4j.jdbc.JDBCAppender(连接数据库,将日志信息导入数据中) |
layout:日志输出格式 | org.apache.log4j.HTMLLayout(以HTML表格形式布局), < BR /> org.apache.log4j.PatternLayout(可以可以灵活地指定布局模式), < BR /> org.apache .log4j.SimpleLayout(包含日志信息的级别和信息字符串), < BR /> org.apache.log4j.TTCCLayout(包含日志产生的时间,线程,类别等等信息) |
参数打印 | %m: 输出代码中指定的消息, %L: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名,发生的线程,以及在代码中的行数, %p: 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL, %F: 输出日志消息产生时所在的文件名称, %L: 输出代码中的行号, %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22 : 10 : 28 , 921 , %r: 输出自应用启动到输出该log信息耗费的毫秒数 , %c: 输出所属的类目,通常就是所在类的全名 , %t: 输出产生该日志事件的线程名, %n: 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” , %l: 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 ) |
2.2.1ConsoleAppender
ConsoleAppender选项 | 信息 |
---|---|
Threshold | 指定日志消息的输出最低层次 |
ImmediateFlush | 默认值是true,意谓着所有的消息都会被立即输出 |
Target | 默认情况下是:System.out,指定输出控制台 |
Layout | 参考上文 |
2.2.2FileAppender
FileAppender选项 | 信息 |
---|---|
Threshold | 指定日志消息的输出最低层次 |
ImmediateFlush | 默认值是真实的,意道着所有的消息都会被立即输出 |
File= log.txt的 | 指定消息输出到log.txt的文件 |
append | 默认值是true,即将消息追加到指定文件中,false指将消息覆盖指定的文件内容 |
2.2.3RollingFileAppender
RollingFileAppender进行选项 | 信息 |
---|---|
Threshold | 指定日志消息的输出最低层次 |
ImmediateFlush | 默认值是真实的,意道着所有的消息都会被立即输出 |
File= log.txt的 | 指定消息输出到log.txt的文件 |
MaxBackupIndex | 指定可以产生的滚动文件的最大数 |
2.2.4 jdbc.jdbcAppender
jdbc.jdbcAppender选项 | 信息 |
---|---|
URL | 填写数据连接地址 |
driver | 指定连接驱动 |
user | 用户名 |
password | 密码 |
sql | 写入的sql语句 |
2.3log4j配置文件示例
log4j.appender.FILE=org.apache.log4j.FileAppender
##### Set the name of the file
log4j.appender.FILE.File=E:/log.log
##### Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true
##### Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug #输出Debug级别(含Debug)以上的日志
##### Set the append to false, overwrite
log4j.appender.FILE.Append=ture
##### Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=${ConversionPattern}
2.3.3保存到数据库示例
#jdbc.JDBCAppender
#将日志输出到Oracle数据库 注意Date数据类型的格式
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DB.URL=jdbc:oracle:thin:@localhost:1521:orcl
log4j.appender.DB.driver=oracle.jdbc.OracleDriver
log4j.appender.DB.user=(填写自己的)
log4j.appender.DB.password=(填写自己的)
log4j.appender.DB.sql=INSERT INTO LOG(project_name,create_date,loglevel,class,method,message) values(' ',to_date('%d{yyyy-MM-dd HH:mm:ss}','yyyy-MM-dd HH24:mi:ss'),'%p','%C','%M','%m')
log4j.appender.DB.layout=org.apache.log4j.PatternLayout
3.log4j高级配置
3.1通过邮件发送日志信息
3.3.1依赖包
<!-- Email -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version> 1.4 </ version>
</ dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
3.3.2配置文件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
# 日志的错误级别-只有error才能输出,其他的不能输出
#该级别限定为出现error后是否将error之后的info,warn,debug等信息输出,
log4j.appender.MAIL.Threshold=ERROR
# 缓存文件大小,日志达到512K时发送Email
log4j.appender.MAIL.BufferSize=512
# 发送邮件的服务器
log4j.appender.MAIL.SMTPHost=smtp.qq.com
# 邮件的标题
log4j.appender.MAIL.Subject=Log4J ErrorMessage
# 用户名
log4j.appender.MAIL.SMTPUsername=1111@qq.com
# 密码
log4j.appender.MAIL.SMTPPassword=000
# 发件人地址
log4j.appender.MAIL.From=1111@qq.com
# 日志邮件的接收者
log4j.appender.MAIL.To=1111@qq.com
# 日志PatternLayout
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
# 日志的格式
log4j.appender.MAIL.layout.ConversionPattern=[ErrorMessage] %d - %c -%-4r [%t] %-5p %c %x - %m%n
参考:
https://blog.csdn.net/azheng270/article/details/2173430/