一起来学 SpringBoot | 第三篇: SpringBoot 日志配置 - V2EX
battcn
V2EX    Java

一起来学 SpringBoot | 第三篇: SpringBoot 日志配置

  •  
  •   battcn Jun 24, 2018 3121 views
    This topic created in 2880 days ago, the information mentioned may be changed or developed.

    SpringBoot 是为了简化 Spring 应用的创建、运行、调试、部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的 XML 配置,我们只需遵循规范,引入相关的依赖就可以轻易的搭建出一个 WEB 工程

    Spring Boot 内部采用的是 Commons Logging进行日志记录,但在底层为 Java Util LoggingLog4J2Logback 等日志框架提供了默认配置 。

    Java 虽然有很多可用的日志框架,但请不要担心,一般来说,使用 SpringBoot 默认的 Logback 就可以了。

    日志格式

    SpringBoot 的默认输出的日志格式如下:

    2014-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52 2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2014-03-05 10:57:51.253 INFO 45469 -- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms 2014-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2014-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 

    输出如下元素:

    Logback 是没有 FATAL级别的日志,它将被映射到 ERROR

    • 时间日期:精确到毫秒,可以用于排序
    • 日志级别:ERROR、WARN、INFO、DEBUG、TRACE
    • 进程 ID
    • 分隔符:采用 --- 来标识日志开始部分
    • 线程名:方括号括起来(可能会截断控制台输出)
    • Logger 名:通常使用源代码的类名
    • 日志内容:我们输出的消息

    日志输出

    SpringBoot 默认为我们输出的日志级别为 INFOWARNERROR,如需要输出更多日志的时候,可以通过以下方式开启

    • 命令模式配置: java -jar app.jar --debug=true , 这种命令会被 SpringBoot 解析,且优先级最高
    • 资源文件配置: application.properties 配置 debug=true 即可。该配置只对 嵌入式容器、Spring、Hibernate 生效,我们自己的项目想要输出 DEBUG 需要额外配置(配置规则:logging.level.<logger-name>=<level>

    日志输出级别配置

    logging.level.root = WARN logging.level.org.springframework.web = DEBUG logging.level.org.hibernate = ERROR #比如 mybatis sql 日志 logging.level.org.mybatis = INFO logging.level.mapper 所在的包 = DEBUG 

    日志输出格式配置

    • logging.pattern.console: 定义输出到控制台的格式(不支持 JDK Logger )
    • logging.pattern.file: 定义输出到文件的格式(不支持 JDK Logger )

    颜色编码

    如果终端支持 ANSI,默认情况下会给日志上个色,提高可读性,可以在配置文件中设置 spring.output.ansi.enabled 来改变默认值

    • ALWAYS: 启用 ANSI 颜色的输出。
    • DETECT: 尝试检测 ANSI 着色功能是否可用。
    • NEVER: 禁用 ANSI 颜色的输出。

    编码对照表

    | Level | Color | |----------|:-------------:| | WARN | Yellow | | FATALERROR | Red | | INFODEBUGTRACE | Green |

    如果想修改日志默认色值,可以通过使用 %clr 关键字转换。比如想使文本变为黄色 %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}。目前支持的颜色有(bluecyanfaintgreenmagentaredyellow

    文件保存

    默认情况下,SpringBoot 仅将日志输出到控制台,不会写入到日志文件中去。如果除了控制台输出之外还想写日志文件,则需要在application.properties 设置logging.filelogging.path 属性。

    • logging.file: 将日志写入到指定的 文件 中,默认为相对路径,可以设置成绝对路径
    • logging.path: 将名为 spring.log 写入到指定的 文件夹 中,如(/var/log

    日志文件在达到 10MB 时进行切割,产生一个新的日志文件(如:spring.1.log 、spring.2.log),新的日志依旧输出到 spring.log 中去,默认情况下会记录 ERRORWARNINFO 级别消息。

    • logging.file.max-size: 限制日志文件大小
    • logging.file.max-history: 限制日志保留天数

    自定义日志配置

    由于日志在 ApplicationContext 之前就初始化好了,所以 SpringBoot 为我们提供了 logging.config 属性,方便我们配置自定义日志文件。默认情况它会根据日志的依赖自动加载。

    | Logging System | Customization | |----------|:-------------:| | JDK (Java Util Logging) | logging.properties | | Log4j2ERROR | log4j2-spring.xml 或 log4j2.xml | | Logback | logback-spring.xml 、logback-spring.groovy、logback.xml 、logback.groovy |

    Logback 扩展配置

    该扩展配置仅适用 logback-spring.xml 或者设置 logging.config 属性的文件,因为 logback.xml 加载过早,因此无法获取 SpringBoot 的一些扩展属性

    使用扩展属性 springProfilespringProperty 让你的 logback-spring.xml 配置显得更有逼格,当别人还在苦苦挣扎弄 logback-{profile}.xml 的时候 你一个文件就搞定了...

    springProfile

    <springProfile> 标签使我们让配置文件更加灵活,它可以选择性的包含或排除部分配置

    <springProfile name="dev"> <!-- 开发环境时激活 --> </springProfile> <springProfile name="dev,test"> <!-- 开发,测试的时候激活--> </springProfile> <springProfile name="!prod"> <!-- 当 "生产" 环境时,该配置不激活--> </springProfile> 

    案例

    <!-- 开发环境日志级别为 DEBUG/并且开发环境不写日志文件 --> <springProfile name="dev"> <root level="DEBUG"> <appender-ref ref="STDOUT"/> </root> </springProfile> <!-- 测试环境日志级别为 INFO/并且记录日志文件 --> <springProfile name="test"> <root level="INFO"> <appender-ref ref="FILE"/> <appender-ref ref="STDOUT"/> </root> </springProfile> 

    springProperty

    <springProperty> 标签可以让我们在 Logback 中使用 Spring Environment 中的属性。如果想在logback-spring.xml中回读 application.properties 配置的值时,这是一个非常好的解决方案

    <!-- 读取 spring.application.name 属性来生成日志文件名 scope:作用域 name:在 logback-spring.xml 使用的键 source:application.properties 文件中的键 defaultValue:默认值 --> <springProperty scope="context" name="logName" source="spring.application.name" defaultValue="myapp.log"/> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/${logName}.log</file> </appender> 

    总结

    更多细节请参考官方文档:https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#boot-features-custom-log-configuration

    目前很多大佬都写过关于 SpringBoot 的教程了,如有雷同,请多多包涵,本教程基于最新的 spring-boot-starter-parent:2.0.1.RELEASE编写,包括新版本的特性都会一起介绍...

    说点什么

    • 个人 QQ:1837307557
    • battcn 开源群(适合新手):391619659
    • 微信公众号(欢迎调戏):battcn

    公众号

    个人博客:http://blog.battcn.com/

    No Comments Yet
    About     Help     Advertise     Blog     API     FAQ     Solana     5368 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 76ms UTC 03:45 PVG 11:45 LAX 20:45 JFK 23:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86