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

logback

  虽然spring boot有很多可用的日志框架,一般来说,使用spring boot 默认的logback就可以了。

日志格式-默认输出格式

2018-06-08 12:24:28.001  INFO 2825 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-06-08 12:24:28.053 INFO 2825 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8088 (http) with context path '/dev'
2018-06-08 12:24:28.141 INFO 2825 --- [ main] com.spring.boot.BootApplication : Started BootApplication in 2.956 seconds (JVM running for 3.433)
2018-06-08 12:24:40.560 INFO 2825 --- [nio-8088-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/dev] : Initializing Spring FrameworkServlet 'dispatcherServlet'
2018-06-08 12:24:40.560 INFO 2825 --- [nio-8088-exec-2] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started
2018-06-08 12:24:40.992 INFO 2825 --- [nio-8088-exec-2] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 432 ms

输出如下元素:

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

  时间日期:精确到毫秒,可以用于排序

  日志级别:ERROR、WARN、INFO、DEBUG、TRACE

  进程ID

  分隔符:采用 --- 来标识日志部分

  Logger名:通常使用源代码的类名

  日志内容:输出的消息

日志输出

  spring boot 默认为我们输出的日志级别为INFO、WARN、ERROR,如果需要输出更多日志,可以通过以下方式开启:

    命令模式配置:java -jar xxx.jar --debug=true 这种命令会被spring boot解析,优先级最高

    资源文件配置:application.properties中配置debug=true即可,该配置只对 嵌入式容器、spring、hibernate生效,我们自己的项目想要输出DEBUG需要额外配置

    配置规则:logging.level.<logger-name>=<level>

日志输出级别配置

logging:
level:
root: WARN
org:
springframework.web: debug
hibernate: error
#比如mybatis sql日志
mybatis: INFO
mapper: debug

日志输出格式配置

  logging.pattern.console:定义输出到控制台的格式

  logging.pattern.file:定义输出到文件的格式

颜色编码

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

  ALWAYS:启用ANSI颜色的输出

  DETECT:尝试检测ANSI着色功能是否可用

  NEVER:禁用ANSI颜色的输出

spring:
output:
ansi:
enabled: always

  WARN:Yellow

  FATAL、ERROR:Red

  Info、DEBUG、TRACE:Green

文件保存

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

  logging.file:将日志写入到指定的文件中,默认为相对路径,可以设置成绝对路径。

  logging.path:将名为spring.log写入到指定的文件夹中。

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

  logging.file.max-size:限制日志文件大小

  logging.file.max-history:限制日志保留天数

logging:
level:
root: warn
file:
max-size: 100MB
max-history: 100

自定义日志配置

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

在resources目录下配置logback.xml | logback.groovy | logback-spring.xml | logback-spring.groovy 都可以被加载

logback-spring.xml

在控制台输出info级别日志,另外将warn警告日志和error错误日志分别保存到不同的目录文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- appender是配置输出终端,ConsoleAppender是控制台,name是自定义名 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 配置日志格式,这是一个比较通用的格式 -->
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender> <!-- 输出终端是滚动文件 -->
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 基于时间滚动,就是每天的日志输出到不同的文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 输出日志的目录文件名,window中默认分区为当前程序的硬盘分区,%d{yyyy-MM-dd}是当前日期 -->
<fileNamePattern>log/warn/warn.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 最大保存99个文件,超出的历史文件会被删除 -->
<maxHistory>99</maxHistory>
</rollingPolicy>
<!-- 按照日志级别进行过滤 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 只收集WARN级别的日志,其他高级别和低级别的日志都放弃 -->
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender> <!-- 除了filter,其他 配置和上面一样, 只是name和文件路径不同-->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>log/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>99</maxHistory>
</rollingPolicy>
<!-- 阈值过滤器 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 收集ERROR及ERROR以上级别的日志 -->
<level>ERROR</level>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender> <!-- root是根日志打印器,只有一个,负责整个系统的日志输出 -->
<root level="INFO">
<!-- 将上面三个输出终端配置到根打印器,将对整个系统 生效。 -->
<appender-ref ref="STDOUT" />
<appender-ref ref="WARN" />
<appender-ref ref="ERROR" />
</root> <!-- logger是root的子打印器,可以有多个,输出name配置的包中的日志。 -->
<!-- mybatis映射dao的包名,设置为debug可以打印mybatis的sql语句 -->
<logger name="com.david.dao" level="DEBUG" />
</configuration>

运行结果:

level日志级别

  在上面的配置中leven参数,主要使用了四种。级别从低到高分别为debug、info、warn、error。当设置某一级别日志时,比他低级的日志不会输出。

debug:调试,从改名可以看出其作用。程序中报错无法解决时,使用调试来查看更多错误信息。在mybatis中使用这种日志才会输出sql语句。debug的输出量太大,而且不懂源码的人很多都看不懂,还有很多没什么实际作用的日志信息刷屏,只适合报异常程序的调试。

info:信息,信息量比debug少很多,只会输出一些重要的信息,适合开发时使用。

warn:警告,通常是可以修复的,不修复也不一定会引发异常,有时候是一些提示信息,但是比info信息更加重要

error:错误,很明显,就是程序异常

logback扩展配置

  扩展配置仅适用于logback-spring.xml来设置logging.config属性的文件,因为logback.xml加载过早,无法获取spring boot一些扩展属性。

   使用扩展属性springProfile与springProperty让你的logback-spring.xml配置显得更牛逼。取代logback-{profile}.xml设置多环境配置。

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

access访问日志

  tomcat中默认是由access访问日志的,用于记录访问者的ip,不过在spring boot中这个日志默认是关闭的。如果你的服务器结构中有nginx类的http服务器,access日志应该是在nginx中配置的。而tomcat这样的后台服务器只需要记录后台日志,不需要管access日志。如果想在spring boot中打开access日志,可以在application.yml中配置

server:
tomcat:
#配置tomcat工作目录
basedir: tomcat
accesslog:
enabled: true

Spring Boot (16) logback和access日志的更多相关文章

  1. spring boot(13)-logback和access日志

    logback logback出自log4j的作者,性能和功能相比log4j作出了一些改进,而配置方法和log4j类似,是spring boot的默认日志组件.在application.propert ...

  2. spring boot打开tomcat的access日志

    spring boot虽说内置了tomcat,但打出来的是jar包而非war包,更没有access日志,那么如何打开access日志呢?只需在application.properties中加入相关配置 ...

  3. Spring Boot与Logback的运用(自定义异常+AOP)

    在开发以及调试过程中,程序员对日志的需求是非常大的,出了什么问题,都要通过日志去进行排查,但是如果日志不清或者杂乱无章,则不利于维护 这边就比较详细的列举几种类型的日志,供大家参考 首先明白logba ...

  4. spring boot 中logback多环境配置

    spring boot 配置logback spring boot自带了log打印功能,使用的是Commons logging 具体可以参考spring boot log 因此,我们只需要在resou ...

  5. Spring Boot 的Logback

    Spring Boot 默认使用Logback记录日志 Spring Boot starter 都会默认引入spring-boot-starter-logging,不需要再引入 日志级别从高到低:TR ...

  6. 剑指架构师系列-spring boot的logback日志记录

    Spring Boot集成了Logback日志系统. Logback的核心对象主要有3个:Logger.Appender.Layout 1.Logback Logger:日志的记录器 主要用于存放日志 ...

  7. Spring Boot之logback日志最佳实践

    一.Spring Boot日志介绍 Spring Boot对所有内部日志记录使用了Commons Logging,但是底层日志实现是开放的.为Java Util日志记录.Log4J2和Logback提 ...

  8. 基于Spring Boot的Logback日志轮转配置

    在生产环境下,日志是最好的问题调试和跟踪方法,因此日志的地位是十分重要的.我们平时经常使用的log4j,slf4j,logback等等,他们的配置上大同小异.这里就结合Spring Boot配置一下L ...

  9. spring boot 使用logback日志系统的详细说明

    springboot按照profile进行打印日志 log4j logback slf4j区别? 首先谈到日志,我们可能听过log4j logback slf4j这三个名词,那么它们之间的关系是怎么样 ...

随机推荐

  1. 零基础到精通Linux,从这篇文章开始

    2018年想做Linux运维的人应该如何学习才能快速精通Linux? Linux入门这么简单,为什么很多人学不会? 想要成为一个合格的运维工程师,到底怎么才能从零开始精通Linux? 作为一个运维小白 ...

  2. 新建springcloud 找不到请求路径

    新建  启动类 controller   都不可以直接放在  java 目录下   否则启动失败

  3. java中一个数组不能放不同数据类型的值

    在java中,数组不能放不同数据类型的值. 方法一: 多态 定义数组类型的时候定义为父类,而存进数组为父类的子类 public class test2 { public static void mai ...

  4. java基本类型和包装类型的区别以及object的公共方法

    Java的类型分为两部分,一个是基本类型(primitive),如int.double等八种基本数据类型: 一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节 ...

  5. codevs2833 奇怪的梦境

    2833 奇怪的梦境  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description Aiden陷入了一个奇怪的梦境:他被困 ...

  6. CF17E Palisection (回文自动机+DP)

    题目传送门 题目大意:给你一个字符串,让你求出有多少对相交的回文子串 啊啊啊啊降智了,我怎么又忘了正难则反! 求相交会很难搞.把问题转化成求互不相交的回文子串再减一下就行了 先利用$PAM$求出以每个 ...

  7. 网络编程:tcp、udp、socket、struct、socketserver

    一.TCP.UDP 一.ARP(Address Resolution Protocol)即地址解析协议,用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址. 二.在网络通信中 ...

  8. C#学习笔记_08_面向对象

    08_面向对象 面向对象:一种看待问题解决问题的思维方式,着眼点在于找到一个能够帮助我们解决问题的实体,然后委托这个实体来帮我们解决问题:(在面向对象之前你要有一个女朋友,否则代码会经常出现bug) ...

  9. 远程连接工具putty与mtputty

    PuTTY是一个Telnet.SSH.rlogin.纯TCP以及串行接口连接软件 官网 http://www.chiark.greenend.org.uk/~sgtatham/putty/ putty ...

  10. UVALIVE 6958 Indoorienteering

    题目大意:有不超过14个点组成的完全图,给出邻接矩阵,问是否存在长度为W的欧拉回路? 数据范围:n<=14, w<=1e15: standard input/output 7 s, 256 ...