springboot 尚桂谷学习笔记03
------spring boot 与日志------
日志框架:
市面上的日志框架:
jul jcl jboss-logging logback log4j log4j2 ......
左边一个门面 (抽象层),右边来选择一个选项;
日志门面选择:SLF4j
日志实现:Logback
spring boot :底层是spring 框架,spring底层默认使用 jcl;
spring boot 选择 slf4j 和 logback
如何使用 SLF4j
开发的时候 日志记录方法的调用,不应该调用日志的实现类,而是调用日志的抽象层的方法
应该给系统加入SLF4j的 jar 以及 logback 的实现 jar
https://www.slf4j.org/manual.html
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
SLF4J 使用图例:使用log 需要导入哪jar等
每个日志实现框架都有自己的配置文件, 使用slf4j后 配置文件还是做成日志实现框架的配置文件
遗留问题:
a项目 (slf4j + logback): srping(common-logging, Hibernate(jboss-logging), mybatis 。。。。。。)
统一日志记录 即使是别的框架和我一起统一使用slf4j
如何实现 下图:将各自log jar 包用其他jar-2-slfj 的转换包 然后统一调用 slf4j
如何让系统中所有的日志都统一到 slf4j:
1. 将系统中其他log框架进行排除
2.用中间包替换原有的日志框架
3.我们再来导入slf4j的其他实现
日志和springboot关系:springboot项目依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.0.1.RELEASE</version>
<scope>compile</scope>
</dependency>
spring-boot-starter 依赖 :spring-boot 用它做日志功能
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>2.0.1.RELEASE</version>
<scope>compile</scope>
</dependency>
通过 pom 文件查看依赖图:
spring boot 底层依赖关系:
总结:
spring boot 底层也是使用 slf4j + logback 的方式进行日志记录
spring boot 也把其他的日志都替换了slf4j 包
中间替换包:jcl -》slf4j 实现是 slf4j
如果我们要引入其他框架 一定要把这个框架的默认日志依赖移除掉 否则会有冲突
spring boot 可以自动适配所有的日志 底层使用slf4j + logback 的方式记录日志 引入其他框架 必须排除其log依赖框架
log 实例:
spring boot 默认已经开启了日志功能:
测试:
package com.lixuchun.springboot; import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBoot03LoggingApplicationTests { // 日志记录器
Logger logger = LoggerFactory.getLogger(getClass()); @Test
public void contextLoads() { // 日志的级别
// 由低到高 trace<debug<info<warn<error
// 可以调节日志的级别 日志只会打印这个级别或者更高级别的日志
logger.trace("这是跟踪轨迹");
logger.debug("这是debug日志");
// springboot 默认使用info级别
logger.info("这是info日志");
logger.warn("这是warn日志");
logger.error("这是error日志");
} }
在properties 文件中设置级别实例:
%d{yyyy-mm-dd} [%thread] %-5level %logger{50} %msg%n
2018-02-01 [main] 左对齐 Trace 50个log字符信息 日志信息 换行
2 指定配置
给类路径下放上每个日志框架的配置文件即可 springboot 就不适用它的默认配置了
logback.xml : 直接被日志框架识别
logback-spring.xml: 日志框架不直接加载 由springboot加载
spring.profiles.active=dev 激活dev 配置
或者控制台进行激活
然后可以使用springboot的高级功能
切换日志框架:pom文件 去除 1 2 添加 3
通过 pom 依赖树 进行 pom 依赖 删除简洁
然后使用就是 log4j2 的日志框架了
springboot 尚桂谷学习笔记03的更多相关文章
- spring boot 尚桂谷学习笔记11 数据访问03 JPA
整合JPA SpringData 程序数据交互结构图 (springdata jpa 默认使用 hibernate 进行封装) 使用之后就关注于 SpringData 不用再花多经历关注具体各个交互框 ...
- spring boot 尚桂谷学习笔记10 数据访问02 mybatis
数据访问 mybatis 创建一个 springboot 工程,模块选择 sql 中 mysql(数据驱动), jdbc(自动配置数据源), mybatis Web模块中选择 web pom 引入: ...
- spring boot 尚桂谷学习笔记09 数据访问
springboot 与数据库访问 jdbc, mybatis, spring data jpa, 1.jdbc原生访问 新建项目 使用 springboot 快速构建工具 选中 web 组件 sq ...
- spring boot 尚桂谷学习笔记07 嵌入式容器 ---Web
------配置嵌入式servlet容器------ springboot 默认使用的是嵌入的Servlet(tomcat)容器 问题? 1)如何定制修改Servlet容器的相关配置: 1.修改和se ...
- spring boot 尚桂谷学习笔记06 异常处理 ---Web
------错误处理机制------ 默认效果 1 返回一个默认的错误页面 浏览器发送请求的请求头:优先接收 text/html 数据 客户端则默认响应json数据 : accept 没有说明返回什么 ...
- spring boot 尚桂谷学习笔记05 ---Web
------web 开发登录功能------ 修改login.html文件:注意加粗部分为 msg 字符串不为空时候 才进行显示 <!DOCTYPE html> <!-- saved ...
- spring boot 尚桂谷学习笔记04 ---Web开始
------web开发------ 1.创建spring boot 应用 选中我们需要的模块 2.spring boot 已经默认将这些场景配置好了 @EnableAutoConfiguration ...
- springboot 尚桂谷学习总结02
------向导快速创建Springboot 项目------ 1.使用spring initializer 快速创建一个springboot 项目 选择后 最后点击finsh 向导会联网创建 spr ...
- springboot 尚桂谷学习总结01
------springboot 技术入门------ 1.springboot 简介: 优点: 简化spring 应用开发的一个框架 整个spring技术栈的一个大整合 ------微服务----- ...
随机推荐
- (vue.js)axios interceptors 拦截器中添加headers 属性
(vue.js)axios interceptors 拦截器中添加headers 属性:http://www.codes51.com/itwd/4282111.html 问题: (vue.js)axi ...
- Java_1.Java符号体系
Java符号包含五类:标识符.关键字.常量及字面量.运算符.分隔符 1.标识符 定义:用于标明程序中元素的名字,如类.方法和变量 命名规则: ·由字母.数字.下划线(_)和美元符号($)构成的字母序列 ...
- C++中的布尔类型和引用
1,C++ 中的布尔类型: 1,C++ 在 C 语言的基础类型系统之上增加了 bool: 1,C 语言中,没有 bool 类型存在,往往都是用整型代替 bool 类型,常用 0 表示假,用 1 表示真 ...
- python学习第二十六天非固定参数几种情况
python函数参数传递,位置参数,默认参数,关键词参数,最后介绍一个非固定参数,就可以向函数传递一个列表,元组,字典,具体看看用法 1,有一个* 号的参数情况 def goos_stu(id,*us ...
- 关于Myeclipse下的JVM启动异常的问题:Out Of Memery / Could not reserve enough space for object heap
以下都是初步理解: 这主要是JVM内存配置的问题,网上有很多参考资料,但是我们不能死板硬套,必须根据自己工程的实际情况配置相关的参数. 1.按照jvm的设计规则,JVM内存分为堆(Heap)和非堆(N ...
- C# 使用Silverlight打印图片
原文:https://www.cnblogs.com/jiajiayuan/archive/2012/04/13/2444246.html Silverlight中的打印只有一个类,那就是PrintD ...
- R语言控制流
一般来说R语言是自上而下执行的,但是遇到特殊情况可能用到循环执行某些语句,这时候条件运算和循环就能派上用场了.
- 接口需要上一个接口的返回值(unittest)
import unittest,requests ''' 使用unittest框架的时候,这个接口需要上一个接口的返回值 ''' class Test_case(unittest.TestCase): ...
- 为什么集合类没有实现Cloneable和Serializable接口?
为什么集合类没有实现Cloneable和Serializable接口? 克隆(cloning)或者是序列化(serialization)的语义和含义是跟具体的实现相关的.因此,应该由集合类的具体实现来 ...
- Autoit 3 常用的语句
{系统环境变量} EnvUpdate ( ) ;更新环境变量 EnvGet ( "变量名称" ) ;取环境变量 ClipGet ( ) ;取剪辑板文本 EnvSet ( " ...