Logback介绍
Logback是SpringBoot框架的默认的日志,内容如下图所示:
Log4J 的创始人 Ceki Gülcü 和另一位 Log4J 贡献者 Sébastien Pennec 设计了 logback。他们设计的 Logback 具有快速和通用的特性,可以在不同的环境下工作。
Logback 由三个模块组成:
logback-core :构成 logback-classic 和 logback-access 的基础。要执行日志记录,需要 logback-classic 或 logback-access。
logback-classic :依靠 logback-core 提供日志记录服务。
logback-access :为 servlet 容器(如 Tomcat 和 Jetty)提供 HTTP 访问日志功能。
Logback 原生实现了 Java 的简单日志外观 (SLF4J) API。
简而言之,SLF4J 是各种日志框架的外观。开发人员可针对SLF4J API 编写日志代码。在部署时灵活地插入所需的日志框架。
由于 logback 原生实现了 SLF4J,因此额外的 SLF4J API 层不会产生任何性能开销,这是 Logback 相对于其他框架的一点优势。
Logback 支持 TRACE
、DEBUG
、INFO
、WARN
和 ERROR
五种级别
在本地开发时,通常将日志级别设置为 DEBUG
。这将提供详细的日志消息以供开发者使用。部署到生产环境时,通常将日志级别设置为 ERROR
,这是为了避免日志中充斥过多的调试信息。
使用方法
spring-boot-starter-web自动包含 Logback
相关依赖,因此在pom.xml文件中添加如下依赖即可
java
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
resources目录下创建logback-spring.xml文件
java
<?xml version="1.0" encoding="UTF-8"?>
<configuration >
<jmxConfigurator/>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<!--这个属性设置了应用名称,用于在日志文件名中生成特定的前缀,可以根据项目名称修改为其他名称(注意下面的引用也要一起更改)-->
<property scope="context" name="appName(可以改)" value="weblog(这里可根据需要更改)" />
<!-- 自定义日志输出路径,以及日志名称前缀 -->
<property name="LOG_FILE" value="/app/weblog/logs/${appName}.%d{yyyy-MM-dd}"/>
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
<!--<property name="CONSOLE_LOG_PATTERN" value="${FILE_LOG_PATTERN}"/>-->
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>${LOG_FILE}-%i.log</FileNamePattern>
<!-- 日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
<!-- 日志文件最大的大小 -->
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式化输出:%d 表示日期,%thread 表示线程名,%-5level:级别从左显示 5 个字符宽度 %errorMessage:日志消息,%n 是换行符-->
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- dev 环境(仅输出到控制台) -->
<springProfile name="dev">
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<root level="info">
<appender-ref ref="CONSOLE" />
</root>
</springProfile>
<!-- prod 环境(仅输出到文件中) -->
<springProfile name="prod">
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</springProfile>
</configuration>
我们可以在applilcation.yml配置文件设置日志级别。比如设置成warn级别,warn以下的部分都不会显示【我在开发环境一般不会设置这个部分】
java
logging:
level:
root: warn
使日志生效的配置放到 application-prod.yml ,即生产文件中即可:
java
logging:
config: classpath:logback-spring.xml
可在application.yml中配置当前环境是生产环境还是开发环境
java
spring:
profiles:
# 激活 dev 环境
active: dev
将dev改为prod,环境便进行了更改
java
spring:
profiles:
# 激活 prod 环境
active: prod
以下内容为logback-spring.xml中的部分,这个部分指定了开发环境设置为控制台输出,而生产环境设置为文件输出
java
<!-- dev 环境(仅输出到控制台) -->
<springProfile name="dev">
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<root level="info">
<appender-ref ref="CONSOLE" />
</root>
</springProfile>
<!-- prod 环境(仅输出到文件中) -->
<springProfile name="prod">
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</springProfile>
生产环境时,以下部分的内容进行路径更改,可以输入日志文件到目标路径里
使用示例
比如这个自定义的全局处理异常中,设定了捕获到其他异常后,控制台输出的内容,使用log.error()...来实现
在进行异常处理的时候,可以进行使用。