Log4j2中日志有六个级别(level):
当日志级别设置为某个值的时候,低于它的日志信息将不会被记录,只有高于设置的级别的信息会被记录。
1. pom.xml
Spring Boot默认使用LogBack,但是我们没有看到显示依赖的jar包,其实是因为所在的jar包spring-boot-starter-logging都是作为spring-boot-starter-web或者spring-boot-starter依赖的一部分。
如果这里要使用Log4j2,需要从spring-boot-starter-web中去掉spring-boot-starter-logging依赖,同时显示声明使用Log4j2的依赖jar包,具体如下:
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-logging
org.springframework.boot
spring-boot-starter-log4j2
2. log4j2.xml
如果不想在application.properties中指定log4j2.xml的位置,可以把log4j2.xml重命名为log4j2-spring.xml,这样也是可以按照配置打印日志信息的。
3. 打印日志
只使用log4j2的话,获取Logger对象一般是使用LogManager去获取的,但是如果使用slf4j的话,使用LoggerFactory去获取
private final static org.slf4j.Logger logger = LoggerFactory.getLogger(Log4j2Controller.class);
logger.trace("trace level");
logger.debug("debug level");
logger.info("info level");
logger.warn("warn level");
logger.error("error level");
使用lombok插件(详细安装方法请上网查询),可以简化Logger对象的获取,首先在相关的类上面添加@Slf4j注解(该注解由lombok提供),然后通过下面的方式打印日志:
log.trace("trace level");
log.debug("debug level");
log.info("info level");
log.warn("warn level");
log.error("error level");
| log4j2配置文件详解
log4j2.xml文件的配置大致如下:
1. Configuration
Configuration为根节点,有status和monitorInterval等多个属性。
2. properties
properties:配置文件全局的参数变量,用于减少自定义配置信息的重复编码,该配置是可选的,例如定义日志的存放位置D:/logs
3. Appenders
Appenders是输出源,用于定义日志输出的地方,log4j2支持的输出源有很多,有控制台Console、文件File、RollingRandomAccessFile、MongoDB、Flume等。
PatternLayout:控制台或文件输出源(Console、File、RollingRandomAccessFile)都必须包含一个PatternLayout节点,用于指定输出文件的格式(如日志输出的时间、文件、方法、行数等格式),例如pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n",各标记符详细含义如下:
%d 输出时间
%d{HH:mm:ss.SSS} 表示输出到毫秒的时间
%t 输出当前线程名称
%p 输出日志级别
%-5p -5表示左对齐并且固定输出5个字符,如果不足在右边补0
%c 日志消息所在类名
%m 消息内容
%n 换行
%F 输出所在的类文件名,如Log4j2Test.java
%L 输出行号
%M 输出所在方法名
%l 输出语句所在的行数, 包括类名、方法名、文件名、行数
%logger 输出logger名称,如果没有名称,就不输出
4. Loggers
日志器分根日志器Root和自定义日志器,当根据日志名字获取不到指定的日志器时就使用Root作为默认的日志器,自定义时需要指定每个Logger的名称name(对于命名可以以包名作为日志的名字,不同的包配置不同的级别等),日志级别level,相加性additivity(是否继承下面配置的日志器), 对于一般的日志器(如Console、File、RollingRandomAccessFile)一般需要配置一个或多个输出源AppenderRef。
每个logger可以指定一个level(TRACE, DEBUG, INFO, WARN, ERROR, ALL or OFF),不指定时level默认为ERROR。
additivity指定是否同时输出log到父类的appender,缺省为true。
若您觉得还可以,请帮忙点个“赞”,谢谢,您的支持是我最大的动力
更多内容,请关注公众号:图南随笔