SpringBoot系列之集成logback实现日志打印(篇二)
SpringBoot系列之集成logback实现日志打印(篇二)
基于上篇博客SpringBoot系列之集成logback实现日志打印(篇一)之后,再写一篇博客进行补充
logback是一款开源的日志框架,内核重写了,是基于log4j基础进行改良的。其官网为http://logback.qos.ch/index.html,logback在性能上有很大提升,拥有更多特性。
- logback-core:是其它两个模块的基础模块
- logback-classic:log4j的改良版本,实现了Slf4j API
- logback-access:集成Servle环境时就需要logback了,可以提供Http访问的接口
简单介绍一下日志级别,按照从低到高排序:trace < debug < info < warn < error,eg:假如日志级别为info,则只会打印info级别及其高级别的日志,所以在项目中,可以通过调高日志级别,打少点日志,反之,想打多点就调低日志级别
SpringBoot支持的不同日志系统的配置文件:
| Logging System | Customization |
|---|---|
| Logback | logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy |
| Log4j2 | log4j2-spring.xml or log4j2.xml |
| JDK (Java Util Logging) | logging.properties |
从前面的学习,SpringBoot系列之日志框架使用教程,我们知道了SpringBoot默认集成的是logback的,所以本博客介绍一下logback自定义配置的基本用法
SpringBoot官方的建议也是推荐使用logback-spring.xml版本的
When possible, we recommend that you use the -spring variants for your logging configuration (for example, logback-spring.xml rather than logback.xml). If you use standard configuration locations, Spring cannot completely control log initialization.
原因是为什么?我们在官网往下翻,可以发现:
Because the standard logback.xml configuration file is loaded too early, you cannot use extensions in it. You need to either use logback-spring.xml or define a logging.config property.
翻译过来就是大概意思就是logback.xml在SpringBoot启动之前就被加载了,也就是ApplicationContext启动之前就被加载了,很显然,这样是不可以加载到SpringBoot的一下高级配置,而logback-spring.xml是支持的,比如在官网就列举了如下两种高级拓展配置,这两种配置只能用logback-spring.xml才是可以使用的,logback.xml是不支持的

ok,profile-specific configuration指的就是多环境配置
<springProfile name="staging">
<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>
<springProfile name="dev | staging">
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>
<springProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>
例子,dev环境用一个日志格式,非dev环境用另外一种日志格式
然后在application.properties,配置环境:spring.profiles.active= dev
<!-- 打印到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 格式化日志内容-->
<encoder>
<springProfile name="dev">
<pattern>${LOG_PATTERN}</pattern>
</springProfile>
<springProfile name="!dev">
<pattern>%d{yyyy-MM-dd HH24:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n</pattern>
</springProfile>
</encoder>
</appender>
ok,给出自己的logback-spring.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration debug="false" scan="true">
<!-- 日志级别 -->
<springProperty scope="context" name="LOG_ROOT_LEVEL" source="logging.level.root" defaultValue="DEBUG"/>
<!-- 标识这个"STDOUT" 将会添加到这个logger -->
<springProperty scope="context" name="STDOUT" source="log.stdout" defaultValue="STDOUT"/>
<!-- 日志格式,%d:日期;%thread:线程名;%-5level:日志级别从左显示5个字符长度,列如:DEBUG;
%logger{36}:java类名,例如:com.muses.taoshop.MyTest,36表示字符长度;%msg:日志内容;%n:换行 -->
<property name="LOG_PATTERN"
value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<!-- root日志级别-->
<property name="${LOG_ROOT_LEVEL}" value="DEBUG" />
<!-- 日志跟目录 -->
<property name="LOG_HOME" value="data/logs" />
<!-- 日志文件路径-->
<property name="LOG_DIR" value="${LOG_HOME}/%d{yyyyMMdd}" />
<!-- 日志文件名称 -->
<property name="LOG_PREFIX" value="portal" />
<!-- 日志文件编码 -->
<property name="LOG_CHARSET" value="utf-8" />
<!-- 配置日志的滚动时间,保存时间为15天-->
<property name="MAX_HISTORY" value="15" />
<!-- 文件大小,默认为10MB-->
<property name="MAX_FILE_SIZE" value="10" />
<!-- 打印到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 格式化日志内容-->
<encoder>
<springProfile name="dev">
<pattern>${LOG_PATTERN}</pattern>
</springProfile>
<springProfile name="!dev">
<pattern>%d{yyyy-MM-dd HH24:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n</pattern>
</springProfile>
</encoder>
</appender>
<!-- 打印所有日志,保存到文件-->
<appender name="FILE_ALL"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/all_${LOG_PREFIX}.log</file>
<!-- 设置滚动策略,当日志文件大小超过${MAX_FILE_SIZE}时,新的日志内容写到新的日志文件-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 新的日志文件路径名称,%d:日期 %i:i是变量 -->
<fileNamePattern>${LOG_DIR}/all_${LOG_PREFIX}%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 保存日志15天 -->
<maxHistory>${MAX_HISTORY}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 日志文件的最大大小 -->
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 格式日志文件内容-->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${LOG_PATTERN}</pattern>
</layout>
</appender>
<!-- 打印错误日志,保存到文件-->
<appender name="FILE_ERR"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/err_${LOG_PREFIX}.log</file>
<!-- 设置滚动策略,当日志文件大小超过${MAX_FILE_SIZE}时,新的日志内容写到新的日志文件-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 新的日志文件路径名称,%d:日期 %i:i是变量 -->
<fileNamePattern>${LOG_DIR}/err_${LOG_PREFIX}%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 保存日志15天 -->
<maxHistory>${MAX_HISTORY}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 日志文件的最大大小 -->
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 格式日志文件内容-->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${LOG_PATTERN}</pattern>
</layout>
</appender>
<!-- rest template logger-->
<logger name="org.springframework.web.client.RestTemplate" level="DEBUG" />
<logger name="org.springframework" level="DEBUG" />
<!-- jdbc-->
<logger name="jdbc.sqltiming" level="DEBUG" />
<logger name="org.mybatis" level="DEBUG" />
<!-- zookeeper-->
<logger name="org.apache.zookeeper" level="ERROR" />
<!-- dubbo -->
<logger name="com.alibaba.dubbo.monitor" level="ERROR"/>
<logger name="com.alibaba.dubbo.remoting" level="ERROR" />
<!-- 日志输出级别 -->
<root leve="${LOG_ROOT_LEVEL}">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE_ALL" />
<appender-ref ref="FILE_ERR" />
</root>
</configuration>
附录:
logging manual:SpringBoot日志官方手册
example source:日志配置github代码下载链接
SpringBoot系列之集成logback实现日志打印(篇二)的更多相关文章
- SpringBoot系列之集成jsp模板引擎
目录 1.模板引擎简介 2.环境准备 4.源码原理简介 SpringBoot系列之集成jsp模板引擎 @ 1.模板引擎简介 引用百度百科的模板引擎解释: 模板引擎(这里特指用于Web开发的模板引擎)是 ...
- SpringBoot系列之集成Druid配置数据源监控
SpringBoot系列之集成Druid配置数据源监控 继上一篇博客SpringBoot系列之JDBC数据访问之后,本博客再介绍数据库连接池框架Druid的使用 实验环境准备: Maven Intel ...
- SpringBoot系列之集成Mybatis教程
SpringBoot系列之集成Mybatis教程 环境准备:IDEA + maven 本博客通过例子的方式,介绍Springboot集成Mybatis的两种方法,一种是通过注解实现,一种是通过xml的 ...
- SpringBoot系列之集成Dubbo的方式
SpringBoot系列之集成Dubbo的方式 本博客介绍Springboot框架集成Dubbo实现微服务的3种常用方式,对于Dubbo知识不是很熟悉的,请先学习我上一篇博客:SpringBoot系列 ...
- SpringBoot系列(十三)统一日志处理,logback+slf4j AOP+自定义注解,走起!
往期精彩推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件详解 SpringBoot系列(四)we ...
- SpringBoot系列之集成Thymeleaf用法手册
目录 1.模板引擎 2.Thymeleaf简介 2.1).Thymeleaf定义 2.2).适用模板 3.重要知识点 3.1).th:text和th:utext 3.2).标准表达式 3.3).Thy ...
- SpringCloud系列之集成分布式事务Seata应用篇
目录 前言 项目版本 项目说明 Seata服务端部署 Seata客户端集成 cloud-web module-order module-cart module-goods module-wallet ...
- SpringBoot+logback实现日志打印
logback介绍 logback是一款开源的日志框架,内核重写了,是基于log4j基础进行改良的.其官网为logback.qos.ch.logback在性能上有很大提升,拥有更多特性. logbac ...
- ES系列十七、logback+ELK日志搭建
一.ELK应用场景 在复杂的企业应用服务群中,记录日志方式多种多样,并且不易归档以及提供日志监控的机制.无论是开发人员还是运维人员都无法准确的定位服务.服务器上面出现的种种问题,也没有高效搜索日志内容 ...
随机推荐
- Android开源项目和轮子
推荐查看Github最全面的Android开源项目汇总 功能框架 数据库 ORMLite框架 greenDaoMaster框架 Xutils的DButils ORMLitehe和greenDaoMas ...
- node中mysql和短信使用方法(3)
一.mysql的使用 使用mysql首先得有数据库并且表里面有数据,我创建了数据库newsql,里面Tables有表company等等. company有id,name,other等字段 1.导入my ...
- python3 之 判断闰年小实例
一.方法1: while True: try: year = int(input('请输入一个年份:')) if (year % 4) == 0 and (year % 100) != 0 or (y ...
- ehcache同步原理
最近研究ehcache同步时发现一个问题: 现有A.B两个服务器,由A服务器向B服务器同步信息,采用RMI方式手动方式进行同步 配置信息如下: <?xml version="1.0&q ...
- javaScript中的indexOf使用方法
JavaScript中的indexOf使用方法 概述 indexOf大小写敏感,其中的O要大写 对于字符串而言 indexOf返回字符串第一次出现的位置,若没有出现返回-1 1 var str = & ...
- PTA 1139 1138 1137 1136
PAT 1139 1138 1137 1136 一个月不写题,有点生疏..脑子跟不上手速,还可以啦,反正今天很开心. PAT 1139 First Contact 18/30 找个时间再修bug 23 ...
- 从UI设计转向前端的艰辛过程,从背单词开始。。。
很纠结到底是继续做UI设计还是转行前端呢?从刚开始的害怕代码到接触代码又喜欢代码的过程,我在想我是不是太飘了,我感觉我做事就是三分钟热度.我感觉学前端对我最大的阻碍就是英语单词了,10个单词里面最起码 ...
- SwiftyUserDefaults-封装系统本地化的框架推荐
// // ViewController.swift // Test4SwiftyUserDefaults // Copyright © 2017年. All rights reserved. // ...
- nginx部署安装
首先需要下载Nginx软件包 nginx软件官方下载地址:[nginx官方下载连接](http://www.nginx.org) 建议选择稳定的软件版本,如果练习使用当然是无所谓,随便什么版本都可以, ...
- 15 个优秀开源的 Spring Boot 学习项目,一网打尽!
Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 <Spring Boot + Vue 全栈开发实战>迄今为止已经加印了 8 次,Spring Boot 的受 ...