SpringBoot系列: logging
我们的 SpringBoot 程序都会加 spring-boot-starter 包, 而该包一个依赖项 spring-boot-starter-logging, 所以SpringBoot 程序不需要再显式增加 spring-boot-starter-logging 包依赖.
使用 mvn dependency:tree 命令可以分析出应用程序的依赖树, 从中可以看到 spring-boot-starter-logging 包也自动设置了
slf4j 和 logback 依赖, SpringBoot 使用了 slf4j 日志接口框架, 而 logback 是默认的日志实现框架, springBoot缺省的日志实现是logback, 也可以选用其他日志实现, 比如 log4j, log4j2等, 其中logback完全符合slf4j规范.
logback log4j 使用方式几乎一样, 功能更强大, 重要体现在:
1. 可以自动加载配置文件, 这个太好了, 不需要重启系统就能实时调整日志设置.
2. 配置文件可以支持多个environment.
SpringBoot程序有一个默认的logback配置, 配置由一个关联到root logger的ConsoleAppender组成, 默认的级别是Debug, 也就是该最小化配置是非常适合程序开发环境.
SpringBoot 使用 logback 作为日志引擎, 有下面三种方法:
1. 全部使用 application.property 配置日志输出
这种做法最简单了, 简单几个属性设置就行了, 适合简单的应用程序.
2. 使用 logback-spring.xml 配置
这种做法是最推荐的, 可以支持多环境, 可以支持实时修改日志设置. 当然也可以换个其他名字, 方法是在 application.properties文件中, 设置 logging.config 属性.
3. 使用 logback.xml 配置
SpringBoot程序不太推荐logback.xml 配置, Spring Boot包含很多有用的Logback扩展, 这些扩展不能在标准的 logback.xml 配置文件中配置, 因为logback.xml加载的太早了.
===============================
application.property 配置方式
===============================
# springBoot缺省的日志实现是logback, 也可以选用其他日志实现, 比如 log4j, log4j2, 或 none, 其中none是彻底关闭日志.
# org.springframework.boot.logging.LoggingSystem=Logback
# logging.config=classpath:logback-spring.xml spring.application.name=<your app name here> # 推荐使用logging.file属性, 而不是 logging.path, 后者仅能指定日志文件的目录, 其文件名永远是spring.log
logging.file=${java.io.tmpdir}/${spring.application.name}.log # debug=true
#当使用debug模式时, SpringBoot和Hibernate等核心组件会输出更多的信息, debug模式下并不会确保我们应用程序能输出DEBUG级别信息. 要想输出com.springbootmybatis.mybatissample包的debug日志, 需要设置 logging.level.com.springbootmybatis.mybatissample=DEBUG # trace=true
# 不要打开 trace , 否则会输出太多的trace日志信息, 日志文件可读性非常差, 同时也会影响性能. #root logger的级别,
logging.level.root=ERROR #其他 class 的级别
logging.level.org.springframework.web=ERROR
logging.level.org.hibernate=ERROR
logging.level.com.springbootmybatis.mybatissample=DEBUG # 设置高亮error/info日志输出
spring.output.ansi.enabled=ALWAYS
# NEVER: 禁用ANSI-colored输出(默认项)
# DETECT:会检查终端是否支持ANSI,是的话就采用彩色输出(推荐项)
# ALWAYS:总是使用ANSI-colored格式输出,若终端不支持的时候,会有很多干扰信息,不推荐使用
===============================
logback-spring.xml 配置方式
===============================
如果在application.properties 和 logback-spring.xml 都设置了日志配置, SpringBoot 会用logback-spring.xml覆盖 application.properties 中的配置项.
application.properties 内容:
# org.springframework.boot.logging.LoggingSystem=Logback
# logging.config=classpath:logback-spring.xml
spring.profiles.active:prod
logback-spring.xml 内容:
注意 configuration tag 的三个重要属性:
scan: 当此属性设置为 true 时,配置文件如果发生改变,将会被重新加载,默认值为 true.
scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒.当 scan 为 true 时,此属性生效.默认的时间间隔为 1 分钟.
debug: 当此属性设置为 true 时,将console上打印出 logback 内部日志信息,实时查看 logback 运行状态, 但这些logback内部日志不会记录到log文件中. 默认值为 false.
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="PROD_LOG_HOME" value="C:\\Users\\Administrator\\logs" />
<property name="DEV_LOG_HOME" value="C:\\Users\\Administrator\\logs" />
<property name="APP_NAME" value="MyBatisSample" /> <!-- 测试环境+开发环境. 多个使用逗号隔开. -->
<springProfile name="test,dev"> <appender name="ROLLING-FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${DEV_LOG_HOME}/${APP_NAME}.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger:%line - %msg%n</pattern>
</encoder>
</appender> <!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ROLLING-FILE"/>
</root> <!-- 自定义Class设置为DEBUG级别, 可以输出MyBatis的SQL和参数 -->
<logger name="com.springbootmybatis.mybatissample" level="DEBUG" /> <!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="DEBUG" />
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
<logger name="org.hibernate.SQL" level="DEBUG" />
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /> <!--myibatis log configure-->
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
</springProfile> <!-- 生产环境. -->
<springProfile name="prod">
<appender name="ROLLING-FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${PROD_LOG_HOME}/${APP_NAME}.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger:%line - %msg%n</pattern>
</encoder>
</appender> <!-- 日志输出级别 -->
<root level="ERROR">
<appender-ref ref="ROLLING-FILE"/>
</root> <!-- 自定义Class设置为INFO级别, 可以禁止MyBatis的SQL和参数 -->
<logger name="com.springbootmybatis.mybatissample" level="INFO" /> <!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
<!--
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="DEBUG" />
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
<logger name="org.hibernate.SQL" level="DEBUG" />
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
--> <!--myibatis log configure-->
<!--
<logger name="com.apache.ibatis" level="DEBUG"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
-->
</springProfile>
</configuration>
===============================
Java 代码中的logger使用
===============================
root logger 是一个所有class logger 的根, 通常我们不需要用代码获取root logger, 直接在logback 配置文件中设置它的logging 输出配置即可, 下面是获取 root logger 和普通class的logger的代码, 注意代码中仅引入了slf4j的类, 而不会引入任何logback的类.
# MyApp.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; Logger rootLogger = LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
Logger myAppLogger = LoggerFactory.getLogger(MyApp.class)
===============================
参考
===============================
http://tengj.top/2017/04/05/springboot7/
http://www.hifreud.com/2017/06/27/spring-boot-07-log/
https://www.mkyong.com/spring-boot/spring-boot-slf4j-logging-example/
https://www.cnblogs.com/lixuwu/p/5804793.html
https://howtoprogram.xyz/2016/12/23/how-to-configure-logging-in-spring-boot/
http://www.cnblogs.com/lixuwu/p/6323739.html
SpringBoot系列: logging的更多相关文章
- Springboot 系列(十二)使用 Mybatis 集成 pagehelper 分页插件和 mapper 插件
前言 在 Springboot 系列文章第十一篇里(使用 Mybatis(自动生成插件) 访问数据库),实验了 Springboot 结合 Mybatis 以及 Mybatis-generator 生 ...
- SpringBoot系列——Logback日志,输出到文件以及实时输出到web页面
前言 SpringBoot对所有内部日志使用通用日志记录,但保留底层日志实现.为Java Util Logging.Log4J2和Logback提供了默认配置.在不同的情况下,日志记录器都预先配置为使 ...
- SpringBoot系列之切换log4j日志框架
SpringBoot系列之使用切换log4j日志框架 ok,在pom文件右键->Diagrams->show Dependencies....,如图,找到spring-boot-start ...
- SpringBoot系列之i18n集成教程
目录 1.环境搭建 2.resource bundle资源配置 3.LocaleResolver类 4.I18n配置类 5.Thymeleaf集成 SpringBoot系统之i18n国际化语言集成教程 ...
- SpringBoot系列之集成logback实现日志打印(篇二)
SpringBoot系列之集成logback实现日志打印(篇二) 基于上篇博客SpringBoot系列之集成logback实现日志打印(篇一)之后,再写一篇博客进行补充 logback是一款开源的日志 ...
- SpringBoot系列之日志框架使用教程
目录 1.SpringBoot日志级别 1).日志级别简介 2).默认日志级别 3).配置日志级别 4).日志分组设置 2.SpringBoot日志格式设置 1).默认格式原理简介 2).默认日志格式 ...
- SpringBoot系列之日志框架介绍及其原理简介
SpringBoot系列之日志框架介绍及其原理简介 1.常用日志框架简介 市面上常用日志框架:JUL.JCL.jboss-logging.logback.log4j.log4j2.slf4j.etc. ...
- SpringBoot系列(十三)统一日志处理,logback+slf4j AOP+自定义注解,走起!
往期精彩推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件详解 SpringBoot系列(四)we ...
- springBoot系列教程07:异常捕获
发生异常是很正常的事,异常种类也是千奇百怪,发生异常并不可怕,只要正确的处理,并正确的返回错误信息并无大碍,如果不进行捕获或者处理,分分钟服务器宕机是很正常的事 所以处理异常时,最基本的要求就是发生异 ...
随机推荐
- LA3490 Generator(KMP + 高斯消元)
题意 一开始给你一个长为 \(S\) 的字符串. 从空串开始,不断在后面添加一个 \([A, A + n]\) 的一个字符. 第一次包含 \(S\) 的时候会停止添加.问期望的添加次数. 有 \(T\ ...
- 【CodeChef】Querying on a Grid(分治,最短路)
[CodeChef]Querying on a Grid(分治,最短路) 题面 Vjudge CodeChef 题解 考虑分治处理这个问题,每次取一个\(mid\),对于\(mid\)上的三个点构建最 ...
- 【BZOJ5318】[JSOI2018]扫地机器人(动态规划)
[BZOJ5318][JSOI2018]扫地机器人(动态规划) 题面 BZOJ 洛谷 题解 神仙题.不会.... 先考虑如果一个点走向了其下方的点,那么其右侧的点因为要被访问到,所以必定只能从其右上方 ...
- JavaWeb项目:在线评测系统
此项目为本人的Java大作业. 项目文件和相关资源已上传到本人的GitHub 一.项目概况 1.1设计内容 一个在线评测系统,分用户和管理员两种身份.用户能够通过注册登录,参加比赛,最后实时得到比赛结 ...
- zabbix3.2添加web页面监控(Web monitoring)
应用场景: 存在一种情况:nginx或者httpd服务本身运行正常,但是网页挂了,类似于网页被黑,或者40X之类的... 可以用zabbix把web页面访问也监控起来,第一时间得知web崩溃信息并做相 ...
- HDU6280 From Tree to Graph
下午打了湘潭邀请赛,好像缓解了一下北京网络赛超强的自闭感.补一下这个图论题.(补了很久) 题意:给你一颗n节点的树,有m个操作,每次向xi和lca(xi,yi)连边,然后每次zi就是对于新的图在删除每 ...
- 20165223 Linux安装及命令入门
预备作业3:Linux安装及命令入门 一.VirtualBox和Ubuntu的安装 通过学习实践基于VirtualBox虚拟机安装Ubuntu图文教程,我开始学习虚拟机的安装,根据教程一步步试着安装. ...
- 编写高质量代码:改善Java程序的151个建议 --[106~117]
编写高质量代码:改善Java程序的151个建议 --[106~117] 动态代理可以使代理模式更加灵活 interface Subject { // 定义一个方法 public void reques ...
- 纪中2018暑假培训day1提高b组改题记录
收到意见,认为每天的程序和随笔放在一起写的博客太长了,于是分开整理 day1 模拟赛,看了看提高a组t1的样例就不太想写,于是转而写b组 t1: Description 给定一个n个点m条边的有向图, ...
- Fiddler安装证书
1.打开Fiddler,点击工具栏中的Tools——>Fiddler Options… 2.切换到 HTTPS 选项卡,勾选 Capture HTTPS CONNECTs,勾选 De ...