转载

面试官:Spring Boot 中关于日志工具的使用,我想问你几个常见问题

公众号[ 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;在应用启动类中,通过如下代码关闭。

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,例如如下一些配置示例:

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>标签来区分日志配置对哪个环境生效。

往期推荐

面试官:Spring框架内置了哪些可扩展接口,咱们一个一个聊

Spring声明式事务处理的实现原理,来自面试官的穷追拷问

Spring MVC相关面试题就是无底洞,反正我是怕了

说实话,面试这么问Spring框架的问题,我快扛不住了

没使用加号拼接字符串,面试官竟然问我为什么

面试官一步一步的套路你,为什么SimpleDateFormat不是线程安全的

都说ThreadLocal被面试官问烂了,可为什么面试官还是喜欢继续问

Java注解是如何玩转的,面试官和我聊了半个小时

如何去除代码中的多次if而引发的一连串面试问题

String引发的提问,我差点跪了

就写了一行代码,被问了这么多问题

面试官:JVM对锁进行了优化,都优化了啥?

synchronized连环问

面试官:Spring Boot 中关于日志工具的使用,我想问你几个常见问题

支持原创,我点【 在看  

原文  https://mp.weixin.qq.com/s/OwoLFoo_tisW0qJy_Th7Gw
正文到此结束
Loading...