Spring Boot (16) logback和access日志
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日志的更多相关文章
- spring boot(13)-logback和access日志
		logback logback出自log4j的作者,性能和功能相比log4j作出了一些改进,而配置方法和log4j类似,是spring boot的默认日志组件.在application.propert ... 
- spring boot打开tomcat的access日志
		spring boot虽说内置了tomcat,但打出来的是jar包而非war包,更没有access日志,那么如何打开access日志呢?只需在application.properties中加入相关配置 ... 
- Spring Boot与Logback的运用(自定义异常+AOP)
		在开发以及调试过程中,程序员对日志的需求是非常大的,出了什么问题,都要通过日志去进行排查,但是如果日志不清或者杂乱无章,则不利于维护 这边就比较详细的列举几种类型的日志,供大家参考 首先明白logba ... 
- spring boot 中logback多环境配置
		spring boot 配置logback spring boot自带了log打印功能,使用的是Commons logging 具体可以参考spring boot log 因此,我们只需要在resou ... 
- Spring Boot 的Logback
		Spring Boot 默认使用Logback记录日志 Spring Boot starter 都会默认引入spring-boot-starter-logging,不需要再引入 日志级别从高到低:TR ... 
- 剑指架构师系列-spring boot的logback日志记录
		Spring Boot集成了Logback日志系统. Logback的核心对象主要有3个:Logger.Appender.Layout 1.Logback Logger:日志的记录器 主要用于存放日志 ... 
- Spring Boot之logback日志最佳实践
		一.Spring Boot日志介绍 Spring Boot对所有内部日志记录使用了Commons Logging,但是底层日志实现是开放的.为Java Util日志记录.Log4J2和Logback提 ... 
- 基于Spring Boot的Logback日志轮转配置
		在生产环境下,日志是最好的问题调试和跟踪方法,因此日志的地位是十分重要的.我们平时经常使用的log4j,slf4j,logback等等,他们的配置上大同小异.这里就结合Spring Boot配置一下L ... 
- spring boot 使用logback日志系统的详细说明
		springboot按照profile进行打印日志 log4j logback slf4j区别? 首先谈到日志,我们可能听过log4j logback slf4j这三个名词,那么它们之间的关系是怎么样 ... 
随机推荐
- zabbix_agent自动发现服务端口
			应用背景: zabbix监控系统介绍及安装,参考大牛运维生存时间,在这儿就不啰嗦了 为了zabbix-agent端能自动把服务器端的服务端口汇报给 zabbix server端,监控其端口 ... 
- win10安装mysql 8.0.11
			mysql安装包可到官网下载,地址:https://dev.mysql.com/downloads/mysql 1.首先解压文件包,我这解压到E:\install_work\mysql目录下: 2.发 ... 
- net Core 中定时任务的设置
			接下来的任务 采用定时任务的需求场景: 每天的数据整理,比如库存,每天的零散数据的统计,定时提醒,定时提醒到期未完成的任务-.... 1.采用的第三方类库: quartz 2文档地址:http://w ... 
- vue组件 $children,$refs,$parent的使用详解
			1)$refs 首先你的给子组件做标记.demo :<firstchild ref="one"></firstchild> 然后在父组件中,通过this.$ ... 
- 获取当前日期,或指定日期的农历js代码
			时间不早了,直接上代码啦-- var CalendarData=new Array(100);var madd=new Array(12);var tgString="甲乙丙丁戊己庚辛壬癸& ... 
- 【codeforces 514C】Watto and Mechanism(字典树做法)
			[题目链接]:http://codeforces.com/contest/514/problem/C [题意] 给你n个字符串; 然后给你m个询问;->m个字符串 对于每一个询问字符串 你需要在 ... 
- [Usaco2010 Dec]Exercise 奶牛健美操
			[Usaco2010 Dec]Exercise 奶牛健美操 题目 Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间 的小路上奔跑.这些奶牛的路径集合可以被表示成一个点集和一些连 ... 
- cogs 2478. [HZOI 2016]简单的最近公共祖先
			2478. [HZOI 2016]简单的最近公共祖先 ★☆ 输入文件:easy_LCA.in 输出文件:easy_LCA.out 简单对比时间限制:2 s 内存限制:128 MB [题 ... 
- sql server 学习课件 PPT
			http://www.cnblogs.com/woodytu/p/4465288.html 
- MSSQL的表备份成INSERT脚本的存储过程
			USE [SupplyChain]GO/****** Object: StoredProcedure [dbo].[ExpData] Script Date: 2015-12-18 10:23:08 ... 
