3.1 日志框架分类和选择

  • 市面上的日志框架

    • JCL、SLF4J,Jboss-logging、logback、log4j、log4j2、JUL ....

    • 左边选一个门面(抽象层),右边来选一个实现 ?

注意:1. Spring框架默认使用JCL,SpringBoot选用了SLF4j 和logback2. 为什么要选择 SLF4j 和logback?   ① jboss-logging 适用场景太少   ② JCL 最后一次更新为2014年   ③ log4j,Logback,SLF4J是同一个人写的,log4j写出来有性能问题于是他写     了Logback日志实现 和 SLF4J抽象层   ④ JUL为java.util自带的日志实现,不太强   ⑤ log4j2借了log4j之名,是Apache重新写的一个框架,由于设计的太好还没有     适配许多框架

3.2  SLF4J原理

如何在系统中使用SLF4j,参考官方文档:https://www.slf4j.org
  • 以后开发的时候,日志记录方法的调用不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法

  • 使用

    • 出现较早的日志框架需要做中间适配层

  • 例如给系统里面导入SLF4J 的jar包 和 logback 的jar包

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");       } }
注意:1. 每一个日志的实现框架都有自己的配置文件2. 使用SLF4J以后,配置文件还是做成日志实现框架自己本身的配置文件

3.3 其它日志框架统一转换为SLF4J

  • 问题

    • 假设开发A系统,用的日志框架是(slf4j+logback),但是开发A系统要依赖Spring,Hibernate,MyBatis等框架且每一个框架在底层也用到了日志框架。如Spring使用了commons-logging,Hibernate使用了jboss-logging

  • 统一日志记录     即使是别的框架也要和我一起统一使用SLF4J进行日志输出?

    • 将系统中其他日志框架先排除出去

    • 用中间包来替换原有的日志框架

    • 我们再来导入SLF4J其他的实现如Logback

3.4 SpringBoot日志关系

  • 所有的场景启动器都依赖spring‐boot‐starter

<dependency>              <groupId>org.springframework.bootgroupId>                   <artifactId>spring‐boot‐starterartifactId>               dependency>
  • spring‐boot‐starter中的依赖 spring‐boot‐starter‐logging

<dependency>              <groupId>org.springframework.bootgroupId>                   <artifactId>spring‐boot‐starter-loggingartifactId>    dependency>
  • pom.xml右键Diagrams可视化SpringBoot底层依赖关系

  • 总结

    • SpringBoot底层也是使用slf4j+logback的方式进行日志记录

    • SpringBoot也把其他的日志都替换成了slf4j;

    • 中间替换包 ?

  • 如果我们要引入其他框架,一定要把这个框架的默认日志依赖移除掉!!例如SpringBoot排除了Spring底层的commos-logging包

3.5 日志使用 - 默认配置

  • SpringBoot默认帮我们配置好了日志,可以直接使用

  • 配置文件中修改日志的默认配置

3.6 日志使用 - 指定配置

  • 给类路径下放上每个日志框架自己的配置文件即可,SpringBoot就不使用他默认配置的了

  • logback.xml 与 logback-spring.xml 区别

    • logback.xml :直接就被日志框架识别了

    • logback-spring.xml :日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,可以使用SpringBoot 的高级Profile功能

<springProfile name="staging">    可以指定某段配置只在某个环境下生效    springProfile>
  • Profile功能举例:

  • logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?><configuration>        <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">        <encoder>            <pattern>[%d{yyyy/MM/dd-HH:mm:ss}] [%thread] [%-5level] [%logger] : %msg%npattern>                        <charset>UTF-8charset>        encoder>    appender>        <appender name="fileStore" class="ch.qos.logback.core.rolling.RollingFileAppender">        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">            <level>INFOlevel>        filter>        <File>logs/polaris_blog_system.logFile>        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">                        <fileNamePattern>logs/sob_system_blog.%d.%i.logfileNamePattern>            <maxHistory>30maxHistory>            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">                <maxFileSize>10MBmaxFileSize>            timeBasedFileNamingAndTriggeringPolicy>        rollingPolicy>                <encoder>            <pattern>[%d{yyyy/MM/dd-HH:mm:ss}] [%thread] [%-5level] [%logger] : %msg%npattern>                        <charset>UTF-8charset>        encoder>    appender>    <logger name="com.polaris.blog" level="DEBUG" additivity="false">        <appender-ref ref="Console"/>        <appender-ref ref="fileStore"/>    logger>        <root level="INFO">        <appender-ref ref="Console"/>    root>configuration>

3.7 lombok依赖

  • 安装lombok插件,使用时添加@Slf4j注解,通过log调用即可。就不用在使用log的时候每次都创建了

当然,lombok还有很多其他强大的功能。
  • 使用

    • 添加依赖

<dependency>    <groupId>org.projectlombokgroupId>    <artifactId>lombokartifactId>    <version>1.18.12version>    <scope>providedscope>dependency>
  • 添加IDE工具对Lombok的支持

//IDEA中引入Lombok支持如下:// ① 点击File-- Settings设置界面,安装Lombok插件:// ② 点击File-- Settings设置界面,开启 AnnocationProcessors://   开启该项是为了让Lombok注解在编译阶段起到作用。

3.8 切换日志框架

  • 可以按照slf4j的日志适配图,进行相关的切换

  • 从slf4j+logback切换到slf4j+log4j的方式(不推荐,log4j有性能问题)

  • 从slf4j+logback切换到slf4j+log4j2

可以直接把spring-boot-starter-logging替换为spring-boot-starter-log4j2

spring boot 日志乱码_3. Spring Boot日志相关推荐

  1. spring boot logback_SpringBoot集成logback后访问日志端点

    问题描述 使用SpringBootAdmin(sba)监控Springboot服务时,配置了logback日志框架,按天滚动生成日志,此时在sba的日志监控页面出现404,如下图所示: 解决方案 查看 ...

  2. Spring Boot + MDC 实现全链路调用日志跟踪

    写在前面 通过本文将了解到什么是MDC.MDC应用中存在的问题.如何解决存在的问题 MDC介绍 简介: MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j .l ...

  3. springboot日志写入mysql_44. Spring Boot日志记录SLF4J【从零开始学Spring Boot】

    学院中有Spring Boot相关的课程!点击「阅读原文」进行查看! SpringSecurity5.0视频:http://t.cn/A6ZadMBe Sharding-JDBC分库分表实战: 在开发 ...

  4. 学习Spring Boot:(四)应用日志

    前言 应用日志是一个系统非常重要的一部分,后来不管是开发还是线上,日志都起到至关重要的作用.这次使用的是 Logback 日志框架. 正文 Spring Boot在所有内部日志中使用Commons L ...

  5. Spring Boot:(六)默认日志logback配置解析

    Spring Boot:(六)默认日志logback配置解析 前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日 ...

  6. logback日志pattern_003、Spring Boot使用slf4j进行日志记录

    在开发中,我们经常使用 System.out.println() 来打印一些信息,但是这样不好,因为大量的使用 System.out 会增加资源的消耗.我们实际项目中使用的是 slf4j 的 logb ...

  7. Spring Boot Admin在线查看spring boot后台日志

    当前,应用系统微服务架构.前后端分离(前端vue,后端springboot),已经成为大部分项目的标准技术架构,但在项目上线后,spring boot后端服务部署在服务器上,大部分公司对服务器都有安全 ...

  8. Spring Boot整合ELK 处理为服务日志,妙!

    你知道的越多,不知道的就越多,业余的像一棵小草! 成功路上并不拥挤,因为坚持的人不多. 编辑:业余草 developer.ibm.com 推荐:https://www.xttblog.com/?p=5 ...

  9. spring boot html乱码,Spring-boot 字符集设置 解决乱码方案

    使用spring-boot开发时候,有时候程序没事,往往不经意会造成中文到前端变成乱码(????这样情况) 下面给出spring-boot项目统一字符集设置方案: 1.Spring Boot修改编码方 ...

最新文章

  1. c# yield关键字原理
  2. linux系统之编译安装mysql
  3. python从零开始进阶_从零开始学Python - 第020课:函数使用进阶
  4. 1356. Sort Integers by The Number of 1 Bits 根据数字二进制下 1 的数目排序
  5. 论计算机与智能科学类,计算机与智能科学大类培养方案
  6. web开发软件,8个优秀的CSS实践,附面试题
  7. 东芝移动硬盘驱动_传输数据不用等,高速移动硬盘数据线畅享快传体验
  8. 招聘APP如何搭建信用体系以避免求职者被骗
  9. 微信小程序 Unexpected end of JSON input
  10. 创建虚拟文件系统设备文件节点_使用proc_create实例分析
  11. 数据库练习集1--读书笔记
  12. 【LOJ】#3088. 「GXOI / GZOI2019」旧词
  13. 小米android11账号补丁,小米10 MIUI11 解账户锁 可登小米账号 永不反锁 完美ROOT 解锁包...
  14. 【老生谈算法】matlabBOOST电路的设计与仿真——BOOST电路
  15. 【C初阶】C初阶考试题
  16. 计算机作业我家乡的变化英语作文,我家乡的变化英语作文(精选12篇)
  17. 方差、标准差和协方差三者之间的定义与计算
  18. 深入浅出计算机组成原理20-面向流水线的指令设计(上):一心多用的现代CPU
  19. ceph节点journal盘更换
  20. Linux 进程管理之进程的终结

热门文章

  1. 阿里云MVP乔帮主:五大类型负载均衡的原理场景详解(文末赠书)
  2. JEECG 3.6.3版本发布 企业级JAVA快速开发平台
  3. 【技术文档】Jeecg-P3开发环境搭建入门(java插件开发框架)
  4. 【官方搭建入门】JEECG 平台开发环境搭建必读
  5. 第三章 对象与JSON
  6. PyTorch【torchvision】
  7. 在Ubuntu Linux下安装Tomcat
  8. 《从问题到程序:用Python学编程和计算》——导读
  9. MyBatis知多少(8)关系型数据库
  10. openstack havana vlan安装成功