Log4j组件
Log4j主要有Loggers(日志记录器)、Appenders(输出端)和Layout(日志格式化器)组成。
其中Loggers控制日志的输出级别与日志是否输出,Appenders指定日志的输出方式(输出到控制到,文件等),Layout控制日志信息的输出格式。
Log4j的日志级别(默认级别:Debug):
- FATAL - 严重错误
- ERROR - 错误信息
- WARN - 警告信息
- INFO - 运行信息
- DEBUG - 调试信息
- TRACE - 追踪信息
Log4j常用的输出位置有以下几种:
输出端类型 | 介绍 |
---|---|
ConsoleAppender | 将日志输出到控制台 |
FileAppender | 将日志输出到文件中 |
DailyRollingFileAppender | 将日志输出到日志文件中,并且每天生成一个新文件 |
RollingFileAppender | 将日志输出到日志文件中,并且指定文件的尺寸,当文件大小达到指定大小后,会自动把文件更名,并生成一个新的文件 |
JDBCAppender | 将日志信息保存到数据库中 |
Log4j常用的Layout:
格式化类型 | 介绍 |
---|---|
HTMLLayout | 格式化日志输出为HTML表格形式 |
SimpleLayout | 简单的日志输出格式化,打印的日志格式为(info - message) |
PatternLayout | 最强大的格式化器,可以根据自定义格式输出日志,如果没有指定转换格式,就用默认的转换格式 |
HTMLLayout:
自定义消息格式常用(conversionPattern):
- %m 输入代码中指定的日志信息
- %p 输出优先级,即DEBUG、INFO等
- %r 输出自应用启动到输出该log信息耗费的毫秒数
- %c 输出打印语句所属的全限定名
- %t 输出产生该日志的线程全名
- %d 输出服务器当前时间,默认为IS08601,也可以指定格式,如:%d{yyyy-MM-dd HH:mm:ss:SSS}
- %l 输出日志发生的位置,包括类名、线程名以及代码的行数,如:Test.main(Test.java:10)
- %F 输出日志消息产生时,所在的文件名称
- %L 输出代码的行数
- %% 输出一个"%"字符
- %n 换行符
可以在 % 与字符之间加上修饰符来控制最小宽度、最大宽度和文本对齐方式。如:
- %5c 输出category,最小宽度是5,category<5,默认情况下为右对齐
- %5c 输出category,最小宽度是5,category<5,- 指定左对齐,产生空格
- %.5c 输出category,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不会有有空格
- %20.30c category<20补空格,并且右对齐,>30字符,就会把左边超出的字符截掉
# 指定rootLogger *父元素默认配置信息
# 指定日志级别为info,使用的appender是什么(自定义名称)
log4j.rootLogger = trace,logDB
# 自定义logger对象
#log4j.logger.cn.sivan = info,file
#log4j.logger.org.apache = trace,console
# 指定控制台日志输出的appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
# 指定名称为console的appender 使用的消息格式(layout)
log4j.appender.console.layout = org.apache.log4j.PatternLayout
# 指定消息格式的内容 [test] 文件的开头
log4j.appender.console.layout.conversionPattern = [test][%-10p]%r %l %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
# 自定义消息格式常用(conversionPattern):
# log4j采用类似c语言的printf函数的打印格式 格式化日志信息,具体的占位符及其含义如下:
# %m 输入代码中指定的日志信息
# %p 输出优先级,即DEBUG、INFO等
# %r 输出自应用启动到输出该log信息耗费的毫秒数
# %c 输出打印语句所属的全限定名
# %t 输出产生该日志的线程全名
# %d 输出服务器当前时间,默认为IS08601,也可以指定格式,如:%d{yyyy-MM-dd HH:mm:ss:SSS}
# %l 输出日志发生的位置,包括类名、线程名以及代码的行数,如:Test.main(Test.java:10)
# %F 输出日志消息产生时,所在的文件名称
# %L 输出代码的行数
# %% 输出一个"%"字符
# %n 换行符
# 可以在 % 与字符之间加上修饰符来控制最小宽度、最大宽度和文本对齐方式。如:
# %5c 输出category,最小宽度是5,category<5,默认情况下为右对齐
# %5c 输出category,最小宽度是5,category<5,- 指定左对齐,产生空格
# %.5c 输出category,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不会有有空格
# %20.30c category<20补空格,并且右对齐,>30字符,就会把左边超出的字符截掉
# 将日志输出到文件
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.append = true
# 指定消息格式的内容
log4j.appender.file.layout.conversionPattern = [test][%p]%r %l %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
# 指定日志文件的保存路径
log4j.appender.file.file = logs/log4j.log
# 指定日志文件的编码
log4j.appender.file.encoding = UTF-8
# 将日志输出到文件 并按照指定大小拆分
log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.rollingFile.append = true
# 指定消息格式的内容 [test] 文件的开头
log4j.appender.rollingFile.layout.conversionPattern = [test][%p]%r %l %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
# 指定日志文件的保存路径
log4j.appender.rollingFile.file = logs/log4j.log
# 指定日志文件的编码
log4j.appender.rollingFile.encoding = UTF-8
# 指定日志文件内容的大小
log4j.appender.rollingFile.maxFileSize = 1MB
# 指定日志文件的数量
log4j.appender.rollingFile.maxBackupIndex = 10
# 将日志输出到文件 并按照日期进行拆分
log4j.appender.dailyFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyFile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyFile.append = true
# 指定消息格式的内容 [test] 文件的开头
log4j.appender.dailyFile.layout.conversionPattern = [test][%p]%r %l %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
# 指定日志文件的保存路径
log4j.appender.dailyFile.file = logs/log4j.log
# 指定日志文件的编码
log4j.appender.dailyFile.encoding = UTF-8
# 指定日期拆分规则 第二天才会有指定日期格式的名称
log4j.appender.dailyFile.datePattern = '.'yyyy-MM-dd'.log'
# 保存到数据库
log4j.appender.logDB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.logDB.layout=org.apache.log4j.PatternLayout
log4j.appender.logDB.BufferSize=1
log4j.appender.logDB.Driver=com.mysql.jdbc.Driver
log4j.appender.logDB.URL=jdbc:mysql://152.136.24.98:3306/db_java?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&rewriteBatchedStatements=true
log4j.appender.logDB.User=root
log4j.appender.logDB.Password=mysql6059@NingChuan
log4j.appender.logDB.Sql=INSERT INTO log(project_name,create_date,level,category,file_name,thread_name,line,all_category,message) values('test','%d{yyyy-MM-ddHH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')