公众号[JavaQ]原创,专注分享Java基础原理分析、实战技术、微服务架构、分布式系统构建,诚邀点赞关注!
面试官:Spring Boot中日志输出有关注过吗?
小小白:有研究过。
面试官:使用Starters方式快速构建项目,那么默认使用的日志工具是什么?
小小白:如果项目使用Starters,则默认使用Logback作为日志记录工具,并且默认配置下日志只会在控制台输出。
面试官:默认情况下,日志输出哪些级别的日志信息?
小小白:默认配置下,日志将记录ERROR、WARN和INFO级别的日志信息,当然你也可以开启调试模式记录更多信息。
面试官:那如何开启调试模式?
小小白:添加命令行参数和修改属性配置两种方式。命令行启动应用时指定开启调试模式,例如执行命令:java -jar test.jar --debug;在application.properties中配置debug=true,或在application.yml中配置debug:true,则开启调试模式。
面试官:那是不是开启调试模式后,日志只记录DEBUG级别的日志?
小小白:不是,开启调试模式并不是改变日志记录的级别为DEBUG,而且日志输出更多级别的日志信息。
面试官:默认配置下Spring Boot应用启动时,日志会输出一个banner图案,输出的内容可以修改吗?
小小白:可以的,在src/main/resource目录下新建一个banner.txt文本,里面写入自己想修改的内容即可。
面试官:那要是想关闭这个banner的输出,如果操作?
小小白:有两种方法:修改默认配置和硬编码。在application.properties或application.yml中添加spring.main.banner-mode=off;在应用启动类中,通过如下代码关闭。
代码语言:javascript复制SpringApplication application = new SpringApplication(SpringbootApplication.class);
application.setBannerMode(Banner.Mode.OFF);
application.run(args);
面试官:日常的开发及未来的投产都会将日志输出到指定文件,这个如何配置?
小小白:在application.properties中配置logging.file属性,用于指定日志文件的位置(可以是相对位置或绝对位置)和名称,它将会把日志信息记录到对应位置下的日志文件中,例如配置logging.file=app.log,将会在当前classpath下创建app.log,并将日志信息记录到这个文件中。这个日志文件配置同样可以配置在application.yml中。
也可以在application.properties中配置logging.path属性,用于指定日志文件的位置,可以是相对位置或绝对位置 ,同时生成的日志文件名称固定为spring.log,例如配置logging.path=/logs,将会在根目录下创建logs目录,并生成spring.log日志文件,日志信息记录到这个文件中。这个日志文件位置配置同样可以配置在application.yml中。
面试官:如果在配置文件中logging.file和logging.path都配置了属性值,会是什么效果?
小小白:如果同时配置了logging.file和logging.path,最终生效的只是logging.file。
面试官:一般在生产环境都会配置日志文件达到一定大小会自动归档,Spring Boot有默认规则吗?
小小白:日志信息输出到文件后,默认情况下使用Logback作为日志记录工具,会记录ERROR、WARN和INFO级别的日志信息,并且日志文件大小超过10MB后,日志文件将会被打包成.gz的压缩文件,且压缩文件名称会排序累加,例如app.log.2020-04-20.0.gz、app.log.2020-04-20.1.gz。
面试官:这个默认的10MB太小了,如何修改?
小小白:通过在application.properties中配置logging.file.max-size,它的属性值需要带单位,可以是KB、MB或GB,单位大小写不敏感都可以使用,例如配置最大大小为100MB,则logging.file.max-size=100MB,需要注意的是这个属性配置仅对默认Logback生效。
面试官:要修改日志输出的级别,如何操作?
小小白:修改日志记录的级别可以在application.properties或application.yml中配置,添加logging.level.<logger-name>=<level>,其中level可以是TRACE、DEBUG、INFO、WARN、ERROR、FATAL或OFF,对于root级的配置可以使用logging.level.root,例如如下一些配置示例:
代码语言:javascript复制logging.level.root=INFO
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
面试官:Spring Boot是不是只支持Logback?
小小白:Spring Boot 2.0版本支持Java Util Logging、Log4J2和Logback日志工具,默认使用Logback,如果不想使用默认日志工具,可以自定义修改。
面试官:那如果项目中要使用Log4J2作为日志工具,如何实现?
小小白:第一步,将Log4J2的相关jar包添加到classpath目录下。可以使用spring-boot-starter-log4j2来添加jar,不过需要注意的是spring-boot-starter和spring-boot-starter-web会包含默认的Logback的jar,所以添加依赖时需要排除掉这些包含的jar。第二步,在classpath目录下创建log4j2-spring.xml或log4j2.xml日志配置文件,Spring Boot推荐使用带有-spring的文件名作为日志配置文件名。如果不想在classpath目录下创建log4j2-spring.xml或log4j2.xml日志配置文件,还可以通过在application.properties中配置logging.config属性来指定日志配置文件。
面试官:有时我们想不同的环境有不同的日志输出配置,这个可以通过配置实现吗?
小小白:使用Logback作为日志工具,Spring Boot对它支持了多环境切换。可以在logback-spring.xml中使用<springProfile>标签来区分日志配置对哪个环境生效。