springboot 日志【转】【补】
市面上的日志框架
日志门面 (日志的抽象层) | 日志实现 |
---|---|
Log4j JUL(java.util.logging) Log4j2 Logback |
补充说明:Logback, Log4j , Log4j2都出于同一作者之手, 但Logback更新。
在使用日志时, 都是选一个左边门面(抽象层)、再选一个右边的实现;该用方法时只用右边门面方法 ,
Spring框架选用JCL日志,需要引用commons-logging.jar , SpringBoot框架选用 SLF4j和logback;
每一个日志的实现框架都有自己的配置文件。就算使用slf4j门面,日志实现框架用的还是自己本身的配置文件;
如何让系统中所有的日志都统一到slf4j;
1、将系统中其他日志框架先排除出去 (比如删除log4j.jar;
2、用中间包来替换原有的日志框架 (比如添加log4j-over-slf4j.jar);
3、我们导入slf4j其他的实现
为什么还要jcl-over-slf4j.jar ,log4j-over-slf4j.jar, jul-to-slf4j.jar?
这是一个历史遗留问题 , 因为一个项目只一般不可能只有一个日志框架 , 比如Spring 使用commons-logging , hibernate使用 jboss-logging , MyBatis , XXX等其它框架又用了各自的日志框架, 那么为了把各种框架都整合到一个日志中去输出 , 所以有了这些需要替换原始功能的jar包
SpringBoot日志关系
SpringBoot使用它来做日志功能;
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-logging</artifactId>
- </dependency>
底层依赖关系图
总结:
1)、SpringBoot底层也是使用slf4j+logback的方式进行日志记录;
2)、SpringBoot也把其他的日志都替换成了slf4j;
3)、中间替换包(以jck-over-slf4j.jar为例),其实内部被换成了SLF4JLogFactory
- @SuppressWarnings("rawtypes")
- public abstract class LogFactory {
- static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J = "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";
- static LogFactory logFactory = new SLF4JLogFactory();
4)、如果我们要引入其他框架?一定要把这个框架的默认日志依赖移<exclusion>除掉,比如Spring框架用的是commons-logging;
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-core</artifactId>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
日志测试
logback测试用例
- @RunWith(SpringRunner.class)
- @SpringBootTest
- public class LoggingTest {
- Logger logger = LoggerFactory.getLogger(getClass());
- @Autowired
- ApplicationContext ac;//注入上下文
- @Test
- public void contextLoads() {
- //日志的级别;
- //由低到高 trace<debug<info<warn<error
- //可以调整输出的日志级别;日志就只会在这个级别以以后的高级别生效
- logger.trace("这是trace日志...");
- logger.debug("这是debug日志...");
- //SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别(用了info级别)
- logger.info("这是info日志...");
- logger.warn("这是warn日志...");
- logger.error("这是error日志...");
- }
- public ApplicationContext getAc() {
- return ac;
- }
- public void setAc(ApplicationContext ac) {
- this.ac = ac;
- }
- }
application.properties配置文件
- # springboot日志的配置文件,本处由application.properties中的spring.profiles.active=logging来启用本文件
- # 指定log文件,也可以写固定的绝对路径, 如果file和path都指定了,那么file优先级更高
- #logging.file=springboot02.log
- # 指定log路径,默认使用使用spring.log作为文件名, 如果以/开头,则在当前磁盘的根目录下创建路径,如果不以/开头,则在当前应用目录下创建日志路径
- logging.path=/springbootlog01/logs
- # 日志占位符说明
- # %d表示日期时间
- # %thread表示线程名
- # %-5level:级别从左显示5个字符宽度,左对齐
- # %logger{50} 表示logger包路径加类名字最长50个字符
- # %msg:日志消息
- # %n是换行符
- # 在控制台输出的日志的格式
- logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
- # 指定文件中日志输出的格式
- logging.pattern.file=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
- # 指定com下的所有日志输出级别为trace
- logging.level.com=trace
logback默认配置位于该目录: spring-boot-1.5.14.RELEASE.jar!/org/springframework/boot/logging/logback/defaults.xml和base.xml
日志配置
给类路径下放上每个日志框架自己的配置文件即可;SpringBoot就不使用他默认配置的了
日志系统 | 自定义文件 | 说明 | |
---|---|---|---|
Logback | logback.xml | 直接被日志框架识别,不经过springboot , 不支持SpringBoot的profile功能. | |
Logback | logback-spring.xml |
日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,可以使用SpringBoot的高级Profile功能 |
|
Log4j2 | log4j2.xml | ||
Log4j2 | log4j2-spring.xml |
||
JDK (Java Util Logging) | logging.properties |
logback-spring.xml 使用SpringBoot的profile功能如下:
- <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
- <!--
- 日志输出格式:
- %d表示日期时间,
- %thread表示线程名,
- %-5level:级别从左显示5个字符宽度
- %logger{50} 表示logger名字最长50个字符,否则按照句点分割。
- %msg:日志消息,
- %n是换行符
- -->
- <layout class="ch.qos.logback.classic.PatternLayout">
- <springProfile name="dev">
- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n</pattern>
- </springProfile>
- <springProfile name="!dev">
- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n</pattern>
- </springProfile>
- </layout>
- </appender>
日志切换
slf4j+log4j的方式 (已亲测) processon地图 | log4j2 (未亲测) | ||
pom.xml内容 |
|
|
|
说明 | 此处直接去掉了slf4j的实现 , 必须换成log4j的实现 | 此处引用的是spring-boot-starter-log4j2场景启动器,替换了spring-boot-starter-logging场景启动器的功能 | |
自己喜欢的简易风
日志配置
- # 在控制台输出的日志的格式
- logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss}\t↓%n%msg%n
日志格式
- 2019-12-04 09:59:37 ↓
- Root WebApplicationContext: initialization completed in 813 ms
- 2019-12-04 09:59:38 ↓
- Initializing ExecutorService 'applicationTaskExecutor'
- 2019-12-04 09:59:38 ↓
- Tomcat started on port(s): 8080 (http) with context path '/es'
- 2019-12-04 09:59:38 ↓
springboot 日志【转】【补】的更多相关文章
- 功能:SpringBoot日志配置详情
SpringBoot日志配置详情 一.介绍 在所有的项目中,日志是必不可少的,为了高效清晰的查找日志,可以配置日志输出的等级和格式. 在配置后,可以自定义输出日志到指定目录,可以按照天数来分割日志,可 ...
- ELK实战(Springboot日志输出查找)
需求 把分布式系统,集群日志集中处理快速查询 搭建ELK并与springboot日志输出结合 搭建ELK 基于我前面的elasticsearch搭建博客文档docker-compose.yml基础上进 ...
- SpringBoot Logback配置,SpringBoot日志配置
SpringBoot Logback配置,SpringBoot日志配置 SpringBoot springProfile属性配置 ================================ © ...
- springboot 日志2
SpringBoot关于日志的官方文档 1.简述 SpringBoot官方文档关于日志的整体说明 本博客基于SpringBoot_1.3.6大家请先简单看下这篇英文的官方文档,文中有说 Sprin ...
- JAVAEE——SpringBoot日志篇:日志框架SLF4j、日志配置、日志使用、切换日志框架
Spring Boot 日志篇 1.日志框架(故事引入) 小张:开发一个大型系统: 1.System.out.println(""):将关键数据打印在控制台:去掉?写在一个文件 ...
- Springboot 日志管理配置logback-spring.xml
几种常见的日志 Log4j:是最早的日志框架,是apach旗下的,可以单独使用,也可配合日志框架JCL使用: Log4j2:apach旗下的关于log4j的升级版: Logback:是基于slf4j接 ...
- SpringBoot日志管理
一.简介 小张:开发一个大型系统:1.System.out.println(""):将关键数据打印在控制台:去掉?写在一个文件?2.框架来记录系统的一些运行时信息:日志框架 : z ...
- Springboot日志配置探索(主要看logback)(一)
这篇博客是springboot日志配置探索的第一篇,主要讲默认配置下springboot的logback日志框架的配置(即直接使用是怎样的) 首先,是一个SpringBoot的有关日志的说明文档:ht ...
- springBoot日志框架自动配置与原理
1.日志框架 小张:开发一个大型系统: 1.System.out.println(""):将关键数据打印在控制台:去掉?写在一个文件? 2.框架来记录系统的一些运行时信息: ...
随机推荐
- MT【278】二次齐次化
对于$c>0$,当非零实数$a,b$满足$4a^2-2ab+4b^2-c=0,$且使$|2a+b|$最大时,$\dfrac{3}{a}-\dfrac{4}{b}+\dfrac{5}{c}$的最小 ...
- 集群概念Cluster
系统扩展方式: scale up,向上扩展:提高主机性能等,质变: scale out,向外扩展:水平扩展,质不变量变: 集群类型: LB:Load Balancing 负载均衡集群: HA:High ...
- 【BZOJ3874】[AHOI&JSOI2014]宅男计划(贪心,三分)
[BZOJ3874][AHOI&JSOI2014]宅男计划(贪心,三分) 题面 BZOJ 洛谷 题解 大力猜想一最长的天数和购买外卖的总次数是单峰的.感性理解一下就是买\(0\)次是\(0\) ...
- 【APIO2018】新家(线段树)
[APIO2018]新家(线段树) 题面 UOJ 洛谷 BZOJ 题解 论比赛时想不到二分的危害,就只能Cu滚粗 既然不要在线,那么考虑离线做法. 既然时间是区间,那么显然按照时间顺序处理答案. 显然 ...
- css颜色表示法
css颜色值主要有三种表示方法: 1.颜色名表示,比如:red 红色,gold 金色 2.rgb表示,比如:rgb(255,0,0)表示红色 3.16进制数值表示,比如:#ff0000 表示红色,这种 ...
- 不是说记住rm -rf的教训就够了
不是说记住rm -rf的教训就够了 李阿玲· 12 天前 2013年,我在同步CTAN镜像的时候,在/home下我的文件夹里面操作了下面的命令: rsync -av --delete rsync:// ...
- VMware配置centos虚拟机静态ip
1. 安装centos,这个自己安装就好了 2. 配置配置虚拟机静态ip桥接器 配置ip地址 2. 配置网络共享中心 这里面的默认网关填写之前我们配置的网络网关ip默认为192.168.6.2 3. ...
- jsp (1)
一.jsp介绍: jsp是servlet的一种包装.是html+js+css+servlet. jsp文件无需配置,如果修改了jsp文件不需要reload应用. jsp访问方法:直接访问文件名.jsp ...
- css预编译语言sass——mixin的使用
以根据不同屏幕吃寸动态应用背景图片为例 新建一个mixin如下: @mixin bg_img($path, $ext){ @media screen and (max-device-width: 76 ...
- Git中撤销提交
Git的几种状态 未修改 原始内容 已修改 ↓ 工 作 区 已暂存 ↓ git add 暂 存 区 已提交 ↓ git commit 本地仓库 已推送 ↓ git push 远程仓库 注意:下面所有命 ...