java领域存在多种日志框架,目前常用的日志框架包括Log4j,Log4j 2,Commons Logging,Slf4j,Logback,Jul等等。居于性能的考虑,日志的抽象层我选择SLF4j,日志实现我选择Logback。
首先,少了不JAR包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
日志级别由高到低,代码如下:
//记录器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
public void contextLoads() {
//System.out.println();
//日志的级别;
//由低到高 trace<debug<info<warn<error
//可以调整输出的日志级别;日志就只会在这个级别以以后的高级别生效
logger.trace("这是trace日志...");
logger.debug("这是debug日志...");
//SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别
logger.info("这是info日志...");
logger.warn("这是warn日志...");
logger.error("这是error日志...");
}
配置日志的输出格式及日志文件的保存路径
logging.level.com.jalor=trace
#spring.profiles.active=dev
#logging.path=
# 不指定路径在当前项目下生成springboot.log日志
# 可以指定完整的路径;
#logging.file=G:/springboot.log
# 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用?spring.log 作为默认文件
logging.path=/spring/log
# 在控制台输出的日志的格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n
应该需求及场景,需要在不同环境下按照不同的格式输出日志。此时,需要我们开发人员自己定义logback.xml配置文件来指定,但程序启动时logback.xml将被日志框架所识别,并无法Profile高级功能。建议命名为logback-spring.xml,必需包含logback关键字,代码片段如下:
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!--
日志输出格式:
%d表示日期时间,
%thread表示线程名,
%-5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符
-->
<layout class="ch.qos.logback.classic.PatternLayout">
<springProfile name="dev">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n</pattern>
</springProfile>
<springProfile name="!dev">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n</pattern>
</springProfile>
</layout>
</appender>
说到这里,可能有人会问profile为何物,我们简单回顾一下。
一个SpringBoot项目从开发到最终的发布基本上都会有几个环境,开发环境dev、测试环境test、生产环境etc。每切换一个环境我们就要在application.properties中修改配置,这样会很麻烦。因此,我们需要准备多个application.properties文件,例如:application-dev.properties、application-test.properties、application-etc.properties等。每个*.properties文件都有自己的配置,那如何切换呢?在application.properties中配置如下代码。
spring.profiles.active=dev