Spring Boot 日志处理

20 篇文章 0 订阅
18 篇文章 1 订阅

写于:2018-05-01 晚 21:00

  • 日志介绍
  • 默认日志格式
  • 控制台输出,彩色日志
  • 文件输出
  • 日志级别
  • 自定义日志配置
1. 日志介绍

官方翻译:Spring Boot内部日志系统使用的是Commons Logging,但开放底层的日志实现。默认为会Java Util Logging, Log4J, Log4J2和Logback提供配置。每种情况下都会预先配置使用控制台输出,也可以使用可选的文件输出。默认情况下,如果你使用’Starter POMs’,那么就会使用Logback记录日志。为了确保那些使用Java Util Logging, Commons Logging, Log4J或SLF4J的依赖库能够正常工作,正确的Logback路由也被包含进来。

2. 默认日志格式

2018-05-01 19:49:35.456  INFO 17904 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2018-05-01 19:49:35.494  INFO 17904 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-01 19:49:35.495  INFO 17904 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-01 19:49:35.535  INFO 17904 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-01 19:49:35.756  INFO 17904 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-05-01 19:49:35.794  INFO 17904 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2018-05-01 19:49:35.798  INFO 17904 --- [           main] com.yiqixuejava.Example                  : Started Example in 2.647 seconds (JVM running for 4.358)

输出的节点(items)如下:
1. 日期和时间 - 精确到毫秒,且易于排序
2. 日志级别 - ERROR, WARN, INFO, DEBUG 或 TRACE
3. Process ID
4. 一个用于区分实际日志信息开头的—分隔符
5. 线程名 - 包括在方括号中(控制台输出可能会被截断)
6. 日志名 - 通常是源class的类名(缩写)
7. 日志信息

3. 控制台输出,彩色日志

默认的日志配置会在写日志消息时将它们回显到控制台。默认,ERROR, WARN和INFO级别
的消息会被记录。可以在启动应用时,通过 –debug 标识开启控制台的DEBUG级别日志记
录。

例如: java -jar yiqixuejava-log-default.jar --debug

查看结果(将看到自动配置项):
2018-05-01 19:56:36.238  INFO 18416 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-05-01 19:56:36.247 DEBUG 18416 --- [           main] ationConfigEmbeddedWebApplicationContext : Unable to locate LifecycleProcessor with name 'lifecycleProcessor': using default [org.springframework.context.support.DefaultLifecycleProcessor@c46bcd4]
2018-05-01 19:56:36.263 DEBUG 18416 --- [           main] utoConfigurationReportLoggingInitializer :


=========================
AUTO-CONFIGURATION REPORT
=========================


Positive matches:
-----------------

   DispatcherServletAutoConfiguration matched:
      - @ConditionalOnClass found required class 'org.springframework.web.servlet.DispatcherServlet'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
      - @ConditionalOnWebApplication (required) found StandardServletEnvironment (OnWebApplicationCondition)

如果你的终端支持ANSI,为了增加可读性将会使用彩色的日志输出。你可以设
置 spring.output.ansi.enabled 为一个支持的值来覆盖自动检测

默认(尝试检测ANSI着色功能是否可用。):
spring.output.ansi.enabled=DETECT
由于我的电脑是支持ANSI,所以是彩色的,和ALWAYS效果一致

可选值(ALWAYS,NEVER)
- ALWAYS:启用ANSI颜色的输出。
- NEVER: 禁用ANSI颜色的输出。
颜色源码:
    public enum Enabled {

        /**
         * Try to detect whether ANSI coloring capabilities are available. The default
         * value for {@link AnsiOutput}.
         */
        DETECT,

        /**
         * Enable ANSI-colored output.
         */
        ALWAYS,

        /**
         * Disable ANSI-colored output.
         */
        NEVER

    }
4. 文件输出

默认情况下,Spring Boot只会将日志记录到控制台而不会写进日志文件。如果除了输出到控
制台你还想写入到日志文件,那你需要设置 logging.file 或 logging.path 属性(例如在你的
application.properties中)。
下表显示如何组合使用 logging.* :

logging.fileogging.path示例描述
只记录到控制台
特定的文件my.log写到特定的日志文件里,名称可以是一个确定的位置或相对于当前目录
特地的位置/var/log写到特定文件夹下的spring.log里,名称可以是一个精确的位置或相对于当前目录

日志文件每达到10M就会被轮换(分割),和控制台一样,默认记录ERROR, WARN和INFO
级别的信息。

举例1:

- 配置日志文件名字
logging.file=my.log

配置文件名字

结论:配置日志名字,默认生成在当前项目的跟目录

举例2:

- 配置日志文件名字且有路径
logging.file=E://work//openResources//yiqixuejava//yiqixuejava-log-default//src//main//resources//my.log

配置日志文件名字且有路径

结论:配置日志名字且有路径,日志生成在指定目录

举例3:

- 配置日志文件路径
logging.path=E://work//openResources//yiqixuejava//yiqixuejava-log-default//

配置日志文件路径

结论:配置日志文件路径,生成在指定目录下,名字叫spring.log

举例4:

#配置日志文件路径且有文件名字
logging.path=E://work//openResources//yiqixuejava//yiqixuejava-log-default//my.log

配置日志文件路径且有文件名字

结论:配置日志文件路径且有文件名字,无法生成指定文件名的文件,只能生成spring.log

举例5:

#配置日志文件相对目录
logging.path=.//yiqixuejava-log-default//src//main//resources//

配置日志文件相对目录

结论:配置日志文件相对目录,可以在相对目录下生成文件

举例6:

#配置日志文件目录和日志文件名字
logging.path=.//yiqixuejava-log-default//src//main//resources//
logging.file=my.log

配置日志文件目录和日志文件名字

结论:配置日志文件目录和日志文件名字,只会让文件名字生效

5.日志级别

所有支持的日志系统在Spring的Environment(例如在application.properties里)都有通
过’logging.level.*=LEVEL’(’LEVEL’是TRACE, DEBUG, INFO, WARN, ERROR, FATAL,
OFF中的一个)设置的日志级别

例如:

#配置Spring web的日志级别为debug
logging.level.org.springframework.web=debug
结果:

2018-05-01 21:02:43.107 DEBUG 3908 --- [           main] o.s.w.s.h.BeanNameUrlHandlerMapping      : Rejected bean name 'applicationEventMulticaster': no URL paths identified
2018-05-01 21:02:43.107 DEBUG 3908 --- [           main] o.s.w.s.h.BeanNameUrlHandlerMapping      : Rejected bean name 'servletContext': no URL paths identified
2018-05-01 21:02:43.107 DEBUG 3908 --- [           main] o.s.w.s.h.BeanNameUrlHandlerMapping      : Rejected bean name 'contextParameters': no URL paths identified
2018-05-01 21:02:43.108 DEBUG 3908 --- [           main] o.s.w.s.h.BeanNameUrlHandlerMapping      : Rejected bean name 'contextAttributes': no URL paths identified
2018-05-01 21:02:43.121  INFO 3908 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-01 21:02:43.121  INFO 3908 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-01 21:02:43.132 DEBUG 3908 --- [           main] .m.m.a.ExceptionHandlerExceptionResolver : Looking for exception mappings: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4d15107f: startup date [Tue May 01 21:02:41 CST 2018]; root of context hierarchy
2018-05-01 21:02:43.159  INFO 3908 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-01 21:02:43.378  INFO 3908 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-05-01 21:02:43.387 DEBUG 3908 --- [           main] o.s.w.s.resource.ResourceUrlProvider     : Looking for resource handler mappings
2018-05-01 21:02:43.388 DEBUG 3908 --- [           main] o.s.w.s.resource.ResourceUrlProvider     : Found resource handler mapping: URL pattern="/**/favicon.ico", locations=[ServletContext resource [/], class path resource [META-INF/resources/], class path resource [resources/], class path resource [static/], class path resource [public/], class path resource []], resolvers=[org.springframework.web.servlet.resource.PathResourceResolver@51a8313b]
2018-05-01 21:02:43.388 DEBUG 3908 --- [           main] o.s.w.s.resource.ResourceUrlProvider     : Found resource handler mapping: URL pattern="/webjars/**", locations=[class path resource [META-INF/resources/webjars/]], resolvers=[org.springframework.web.servlet.resource.PathResourceResolver@2a03d65c]
2018-05-01 21:02:43.388 DEBUG 3908 --- [           main] o.s.w.s.resource.ResourceUrlProvider     : Found resource handler mapping: URL pattern="/**", locations=[ServletContext resource [/], class path resource [META-INF/resources/], class path resource [resources/], class path resource [static/], class path resource [public/]], resolvers=[org.springframework.web.servlet.resource.PathResourceResolver@6642dc5a]
2018-05-01 21:02:43.415  INFO 3908 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2018-05-01 21:02:43.416 DEBUG 3908 --- [           main] o.s.w.c.s.StandardServletEnvironment     : Adding PropertySource 'server.ports' with highest search precedence
2018-05-01 21:02:43.419  INFO 3908 --- [           main] com.yiqixuejava.Example                  : Started Example in 2.443 seconds (JVM running for 3.661)
6.自定义日志配置

通过将适当的库添加到classpath,可以激活各种日志系统。然后在classpath的根目录(root)或
通过Spring Environment的 logging.config 属性指定的位置提供一个合适的配置文件来达到
进一步的定制(注意由于日志是在ApplicationContext被创建之前初始化的,所以不可能在
Spring的@Configuration文件中,通过@PropertySources控制日志。系统属性和平常的
Spring Boot外部配置文件能正常工作)
根据你的日志系统,下面的文件会被加载:

日志系统定制
Logbacklogback.xml
Log4jlog4j.properties或log4j.xml
Log4j2log4j2.xml
JDK (Java Util Logging)logging.properties

为了帮助定制一些其他的属性,从Spring的Envrionment转换到系统属性:

Spring EnvironmentSystem Property评价
logging.fileLOG_FILE如果定义,在默认的日志配置中使用
logging.pathLOG_PATH如果定义,在默认的日志配置中使用
PIDPID当前的处理进程(process)ID(如果能够被发现且还没有作为操作系统环境变量被定义)

所有支持的日志系统在解析它们的配置文件时都能查询系统属性。具体可以参考spring-
boot.jar中的默认配置。
注:在运行可执行的jar时,Java Util Logging有类加载问题,官网建议你尽可能避免使用它。

本节未完待继续!
后续章节:自定义日志文件(logback,log4j)

个人公众号
个人公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值