概念储备
- Apache的一款日志开源框架
- 可以控制日志输出级别、输出格式、输出位置等
日志级别
- fatal:会导致系统退出的错误
- error:属于错误,但是不影响程序运行
- warn:警告,可能会产生影响程序运行的错误
- info:程序正常运行
- debug:程序运行过程中,程序员调试时需要知道的信息
- trace:变量的变化等信息
推荐仅使用如下四个级别
- error
- warn
- info
- debug
输出格式
通过标识符配置
- %m:日志信息
- %p:输出优先级
- %n:换行符
- %r:自应用启动到改日志输出的毫秒数
- %c:输出日志的类
- %t:线程名
- %d{yyyy.MM.dd}:设备时间,不带格式%d默认为ISO8601
- %l:类名、线程、行数
- %F:文件名
- %L:行号
- %%:输出百分号
注:可在配置上述指定内容时限定字数,方式为在%和后面的符号之间加数字,下面以日志信息举例
- %5m:输出日志内容最少为5字符,少的用空格补齐,默认右对齐
- %-5m:输出内容最少为5字符,少的用空格补齐,指定左对齐
- %.5m:输出日志的内容最多5个字符,超过5个字符从最后截取5个
- %-5.10m:输出内容少于5个的,用空格补齐至5个,左对齐,多出10个的,截取最后十个
- %10.10m:输出内容限定为10个,少的空格补齐,右对齐,多的裁剪最后10个
输出位置
- ConsoleAppender:输出到控制台
- FileAppender:输出到文件
- DailyRollingFileAppender:输出到文件,每天更新一个文件
- RollingFileAppender:输出到文件,达到一定大小就输出新日志文件
- JDBCAppender:输出到数据库
新建文件方式
输出到文件时,会有一定的规则产生新文件,产生新文件的过程如下
- 输出日志到配置文件中指定的文件
- 达到产生新文件的规则,比如指定文件的大小已经超过限制等
- 重命名指定文件,按照规则比如添加序号后缀等
- 新建文件,文件名为原指定文件
依赖
<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>
操作
尝试输出日志
1.在resources文件下新建文件log4j.properties
#指定日志的输出级别与输出端 log4j.rootLogger=trace,Console # 控制台输出配置 log4j.appender.Console=org.apache.log4j.ConsoleAppender # 指定消息格式 layout log4j.appender.Console.layout=org.apache.log4j.PatternLayout # 指定消息格式的内容 log4j.appender.Console.layout.ConversionPattern = %d [%t] %-5p [%c] - %m%n
2.在Java文件中获取日志类并输出日志
public class TestLog4J { @Test public void firstLog4j(){ // 将日志读取配置文件的配置过程输出到控制台,方便查找配置的错误 LogLog.setInternalDebugging(true); // 获取日志,并且设置日志所在类为本类 Logger logger = Logger.getLogger(TestLog4J.class); // 打印不同级别的日志 logger.info("this is info "); logger.fatal("this is fatal"); } }
配置文件
日志使用的Java代码区别不大,主要看配置文件指定日志输出方式
输出到控制台
#指定日志的输出级别与输出端 log4j.rootLogger=trace,Console # 控制台输出配置 log4j.appender.Console=org.apache.log4j.ConsoleAppender # 指定消息格式 layout log4j.appender.Console.layout=org.apache.log4j.PatternLayout # 指定消息格式的内容 log4j.appender.Console.layout.ConversionPattern = %d [%t] %-5p [%c] - %m%n
输出到文件,日志文件到一定大小就新建文件
# 输出级别为trace 输出形式为文件,文件超过指定大小新建日志文件 log4j.rootLogger=trace,rollingFile # 文件输出配置 log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender # 指定日志的输出路径 log4j.appender.rollingFile.file = D:/loshill/blog/document/log/testlog.log # 使用自定义日志格式化器 log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout # 指定日志的输出格式 log4j.appender.rollingFile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] -[%p] %m%n # 指定日志的文件编码 log4j.appender.rollingFile.encoding = UTF-8 # 日志超过1KB就新建文件,文件命名方式是添加序号作为后缀 log4j.appender.rollingFile.maxFileSize = 1KB # 只保留最新的10个日志文件 log4j.appender.rollingFile.maxBackupIndex = 10
输出到文件,超过一定时间就新建文件
# 指定日志的输出级别与输出方式 log4j.rootLogger=trace,dailyFile # 文件输出配置 log4j.appender.dailyFile = org.apache.log4j.DailyRollingFileAppender # 指定日志的输出路径 log4j.appender.dailyFile.File = D:/loshill/blog/document/log/testlog.log # 每次对文件的操作方式为覆盖,默认是追加 log4j.appender.dailyFile.Append = true # 使用自定义日志格式化器 log4j.appender.dailyFile.layout = org.apache.log4j.PatternLayout # 指定日志的输出格式 log4j.appender.dailyFile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] -[%p] %m%n # 指定日志的文件编码 log4j.appender.dailyFile.encoding = UTF-8
# 设置新建文件的时间限制,也是日志文件的命名规则,超过一秒就新建一个日志文件,不过不太准确,一般是几秒新建一次
# log4j.appender.dailyFile.datePattern = '.'yyyy-MM-dd-HH 每小时新建一次
log4j.appender.dailyFile.datePattern = '.'yyyy-MM-dd-HH-mm-ss
输出到数据库
# 指定日志的输出级别与输出端 log4j.rootLogger=trace,logDB # mysql log4j.appender.logDB=org.apache.log4j.jdbc.JDBCAppender log4j.appender.logDB.layout=org.apache.log4j.PatternLayout
# 数据库配置 log4j.appender.logDB.Driver=com.mysql.jdbc.Driver log4j.appender.logDB.URL=jdbc:mysql://localhost:3306/test log4j.appender.logDB.User=root log4j.appender.logDB.Password=123456
# 录入方式 log4j.appender.logDB.Sql=INSERT INTO log(project_name,create_date,level,category,file_name,thread_name,line,all_category,message) values('itcast','%d{yyyy-MM-ddHH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')
参考
Java日志 - log4j
浙公网安备 33010602011771号