java日志(四)–jcl和log4j及log4j2使用
一、简介
这里介绍java日志框架另一类,jcl(commons-logging)、log4j、log4j2的使用。其中jcl是定义的一组通用日志接口,
log4j是日志的实现,log4j2也是日志的实现,log4j2对是对log4j的重写,功能更完善。
二、log4j
log4j是apache推出的日志实现,于2015年停止更新了,目前最新版本为1.2.17,下面进行简要介绍。
2.1 官网地址
http://logging.apache.org/log4j/1.2/manual.html
2.2 主要jar包
log4j包为日志的实现包,maven依赖如下:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2.3 日志级别
日志级别有:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,源码查看org.apache.log4j.Level类
2.4 配置文件
log4j的配置文件为log4j.properties,放在src/main/resources目录下。包含rootLogger(配置日志级别和输出目的地)、
appender(输出目的地配置)、layout(日志格式)等。示例如下:
#设置日志级别和appender(日志输出地,可多个)
log4j.rootLogger=info,stdout,file
#输出到控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#日志格式
log4j.appender.stdout.layout.ConversionPattern=%d %l [%t] %p %m%n
#输出到文件
#直接输出到文件
#log4j.appender.file=org.apache.log4j.FileAppender
#日志文件达到一定大小时生产新文件
#log4j.appender.file=org.apache.log4j.RollingFileAppender
#每天产生新的日志文件
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=log4jStudy.log
log4j.appender.file.Threshold=warn
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#日志格式
log4j.appender.file.layout.ConversionPattern=%d %l [%t] %p %m%n
##输出到邮箱,在此略过
#log4j.appender.email=org.apache.log4j.net.SMTPAppender
#
##输出到数据库,在此略过
#log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
备注,layout参数如下:
%d:日期;
%M:日志所在方法名;
%p:日志优先级;
%c:日志所在类;
%t:日志所在线程;
%l:日志所在的类、线程及所在的行数;
%m:消息;
%n:换行;
2.5 关键类
org.apache.log4j.Logger:日志类,可通知Logger.getLogger()方法获取实例。
2.6 测试
import org.apache.log4j.Logger;
public class Log4jMain {
private static final Logger logger = Logger.getLogger(Log4jMain.class);
public static void main(String[] args) {
logger.trace("trace log");
logger.debug("debug log");
logger.info("info log");
logger.warn("warn log");
logger.error("error log");
logger.fatal("fatal log", new Exception("fatal exception"));
}
}
结果生成log4jStudy.log日志及控制台输出:
2018-12-23 21:46:58,881 com.dragon.study.log.Log4jMain.main(Log4jMain.java:18) [main] INFO info log
2018-12-23 21:46:58,889 com.dragon.study.log.Log4jMain.main(Log4jMain.java:19) [main] WARN warn log
2018-12-23 21:46:58,889 com.dragon.study.log.Log4jMain.main(Log4jMain.java:20) [main] ERROR error log
Disconnected from the target VM, address: '127.0.0.1:50263', transport: 'socket'
2018-12-23 21:46:58,889 com.dragon.study.log.Log4jMain.main(Log4jMain.java:21) [main] FATAL fatal log
java.lang.Exception: fatal exception
at com.dragon.study.log.Log4jMain.main(Log4jMain.java:21)
三、log4j2
log4j2是对log4j的重写,性能更好。
3.1 官网地址
https://logging.apache.org/log4j/2.x/manual/index.html
3.2 主要jar包
log4j-api和log4j-core。maven依赖如下:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.9.1</version>
</dependency>
3.3 关键类
org.apache.logging.log4j.Logger:日志记录类;
org.apache.logging.log4j.LogManager:日志类工厂,生成Logger实例;
3.4 日志级别
和log4j类似,日志级别有:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,源码查看
org.apache.logging.log4j.Level
3.5 log4j2配置文件
log4j2配置文件通常为log4j2.xml和log4j2-test.xml,加载顺序为log4j2-test.xml>log4j2.xml。下面列出配置文件中的关键
结点。
3.5.1 Configuration结点
Configuration结点是最外层结点,如:
<!--status表示log4j2自身的日志打印级别,如trace会打印出log4j2加载、运行等信息, monitorinterval监控间隔,单位为秒-->
<Configuration status="trace" monitorinterval="6">
</Configuration>
3.5.2 Properties结点
定义变量,如:
<Properties>
<Property name="nowDate">%date{yyyy-MM-dd}</Property>
<Property name="logDir">${sys:catalina.home}/logs/</Property>
</Properties>
3.5.3 appender结点
appender结点定义日志输出目的地,官网地址:https://logging.apache.org/log4j/2.x/manual/appenders.html
常用的appender示例如下,解释请查看注释:
<!--日志输出到控制台-->
<Console name="consoleAppender" target="SYSTEM_OUT">
<PatternLayout pattern="%date %logger %processId %threadId %method %class %file %highlight{%level} : %green{%msg} %n"