Spring Boot默认使用LogBack日志系统,如果不需要更改为其他日志系统如Log4j2等,则无需多余的配置,LogBack默认将日志打印到控制台上。
如果要使用LogBack,原则上是需要添加dependency依赖的
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-loggingartifactId>pre>
但是因为新建的Spring Boot项目一般都会引用spring-boot-starter或者spring-boot-starter-web,而这两个起步依赖中都已经包含了对于spring-boot-starter-logging的依赖,所以,无需额外添加依赖。
pom文件使用基本的就可以:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.1.8.RELEASEversion>
<relativePath/>
parent>
<groupId>vip.rensiyugroupId>
<artifactId>springboot_loggingartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>springboot_loggingname>
<description>Demo project for Spring Bootdescription>
<properties>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
编写一个hello.java配置文件:
package vip.rensiyu.springboot_logging;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Created with IntelliJ IDEA.
* Description:
* Mail: [email protected]
* Date: 2019-09-24
* Time: 12:27
*/
@Configuration
public class Hello {
Logger logger = LoggerFactory.getLogger(getClass());
@Bean
public String logMethod() {
logger.info("==========print log==========");
return "hello world";
}
}
以上至默认配置启动下的日志显示情况,如果需要做一些定制的日志配置比如将日志存储到文件等应该如何配置,下面就通过几个小问题来看看Spring Boot下是如何解决这些问题的。
//日志的级别;
//由低到高 trace
//可以调整输出的日志级别;日志就只会在这个级别以以后的高级别生效
logger.trace("这是trace日志...");
logger.debug("这是debug日志...");
//SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别
logger.info("这是info日志...");
logger.warn("这是warn日志...");
logger.error("这是error日志...");
logging.level.包名=trace
logging.level.vip.rensiyu.springboot_logging=trace
设置生成日志的路径
#logging.path=
# 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用?spring.log 作为默认文件
#logging.path=/spring/log
# 不指定路径在当前项目下生成springboot.log日志
# 可以指定完整的路径;
#logging.file=G:/springboot.log
logging.file | logging.path | Example | Description |
---|---|---|---|
(none) | (none) | 只在控制台输出 | |
指定文件名 | (none) | my.log | 输出日志到my.log文件 |
(none) | 指定目录 | /var/log | 输出到指定目录的 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
日志输出格式:
%d表示日期时间,
%thread表示线程名,
%-5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符
给类路径下放上每个日志框架自己的配置文件即可(默认是logback.xml文件 在文章的最后附上源码);SpringBoot就不使用他默认配置的了
比如在logback文件中修改
springboot启动时就会自动加载,logbackxml文件
使用哪种类型的日志,就放那种类型的文件,格式如下表:
Logging System | Customization |
---|---|
Logback | logback-spring.xml , logback-spring.groovy , logback.xml or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |
logback.xml:直接就被日志框架识别了;
logback-spring.xml:日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,可以使用SpringBoot的高级Profile功能
不明白就先看一个官方文档
翻译如下
Spring Boot包含许多Logback扩展,可以帮助进行高级配置。您可以在logback-spring.xml配置文件中使用这些扩展名。
由于标准logback.xml配置文件加载得太早,因此无法在其中使用扩展名。您需要使用logback-spring.xml或定义logging.config属性。
这些扩展不能与Logback的配置扫描一起使用。如果尝试这样做,则对配置文件进行更改将导致类似于以下记录之一的错误
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]]
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]
只有logback文件中可以配置profile
使用带扩展名的还有好处
通过
标记,您可以根据活动的Spring概要文件有选择地包括或排除配置部分。在
元素内的任何位置都支持概要文件部分。使用name属性指定哪个配置文件接受配置。
标记可以包含简单的配置文件名称(例如,暂存)或配置文件表达式。配置文件表达式允许表达更复杂的配置文件逻辑,例如生产&(eu-central | eu-west)
。有关更多详细信息,请参阅参考指南。以下清单显示了三个样本概要文件:
<springProfile name="staging">
可以指定某段配置只在某个环境下生效
springProfile>
<springProfile name="staging">
springProfile>
<springProfile name="dev | staging">
springProfile>
<springProfile name="!production">
springProfile>
如:
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<springProfile name="dev">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%npattern>
springProfile>
<springProfile name="!dev">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%npattern>
springProfile>
layout>
appender>
只有logback文件中可以配置profile
如果使用logback.xml作为日志配置文件,还要使用profile功能,会有以下错误
no applicable action for [springProfile]
参考文章https://www.cnblogs.com/bigdataZJ/p/springboot-log.html
<configuration scan="false" scanPeriod="60 seconds" debug="false">
<property name="LOG_HOME" value="/app/log" />
<property name="appName" value="atguigu-springboot">property>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
layout>
appender>
<appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/${appName}.logfile>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.logfileNamePattern>
<MaxHistory>365MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MBmaxFileSize>
timeBasedFileNamingAndTriggeringPolicy>
rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%npattern>
layout>
appender>
<logger name="com.atguigu" level="debug" />
<logger name="org.springframework" level="debug" additivity="false">logger>
<root level="info">
<appender-ref ref="stdout" />
<appender-ref ref="appLogAppender" />
root>
configuration>