SpringBoot之日志

SpringBoot 09——Spring Boot日志配置 Spring Boot 采用了 slf4j+logback 的组合形式,Spring Boot也提供对JUL、log4j2、Logback提供了默认配置 1、默认日志配置              修改日志默认级别        2、修改日志默认配置       修改日志文件生成路径                     修改日志输出格式          3、日志底层实... 阅读详情

1、日志框架

小张:开发一个大型系统;

    1、System.out.println("");将关键数据打印在控制台;去掉?写在一个文件?

    2、框架来记录系统的一些运行时信息;日志框架;  zhanglogging.jar;

    3、高大上的几个功能?异步模式?自动归档?xxxx?  zhanglogging-good.jar?

    4、将以前框架卸下来?换上新的框架,重新修改之前相关的API;zhanglogging-prefect.jar;

    5、JDBC---数据库驱动;

        写了一个统一的接口层;日志门面(日志的一个抽象层);logging-abstract.jar;

        给项目中导入具体的日志实现就行了;我们之前的日志框架都是实现的抽象层;

市面上的日志框架

JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j….

日志门面 (日志的抽象层)日志实现
JCL(Jakarta Commons Logging)、SLF4j(Simple Logging Facade for Java)、jboss-loggingLog4j、JUL(java.util.logging)、Log4j2、Logback

左边选一个门面(抽象层)、右边来选一个实现;

日志门面: SLF4J;

日志实现:Logback;

SpringBoot:底层是Spring框架,Spring框架默认是用JCL;

SpringBoot选用 SLF4j 和 logback

2、SLF4j使用

a、如何在系统中使用SLF4j,官网

以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法;

给系统里面导入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");
  }
}

图示:
这里写图片描述
每一个日志的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件

b、遗留问题

Application(slf4j+logback): Spring(commons-logging)、Hibernate(jboss-logging)、MyBatis、xxxx

统一日志记录,即使是别的框架和我一起统一使用slf4j进行输出?
这里写图片描述

如何让系统中所有的日志都统一到slf4j

  1. 将系统中其他日志框架先排除出去
  2. 用中间包来替换原有的日志框架
  3. 我们导入slf4j其他的实现

3、SpringBoot日志关系

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

SpringBoot使用它来做日志功能;

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

底层依赖关系:
这里写图片描述
总结:

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

2)、SpringBoot也把其他的日志都替换成了slf4j;

3)、中间替换包?

这里写图片描述

@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)、如果我们要引入其他框架?一定要把这个框架的默认日志依赖移除掉?

    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>

总结:SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可

4、日志使用

a、默认配置

SpringBoot默认帮我们配置好了日志;

//记录器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
public void contextLoads() {
    //System.out.println();

    //日志的级别:
    //由低到高:trace<debug<info<warn<error
    //可以调整输出的日志级别,日志就只会在这个级别以及以后的高级别生效
    logger.trace("这是trace日志...");
    logger.debug("这是debug日志...");
    //SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别
    logger.info("这是info日志...");
    logger.warn("这是warn日志...");
    logger.error("这是error日志...");
}
日志输出格式:
    %d:表示日期时间
    %thread:表示线程名
    %-5level:级别从左显示5个字符宽度
    %logger{50}:表示logger名字最长50个字符,否则按照句点分割
    %msg:日志消息
    %n:换行符
    -->
例子:
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

SpringBoot修改日志的默认配置:

logging.level.cn.yujiago=trace

# 不指定路径,则在当前项目下生成springboot.log日志
# 可以指定完整的路径
#logging.file=G:/springboot.log

# 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件
logging.path=/spring/log

#  在控制台输出的日志的格式
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
logging.filelogging.pathExampleDescription
(none)(none)只在控制台输出
指定文件名(none)my.log输出日志到my.log文件
(none)指定目录/var/log输出到指定目录的 spring.log 文件中

b、指定配置

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

Logging SystemCustomization
Logbacklogback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy
Log4j2log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging)logging.properties
  • logback.xml:直接就被日志框架识别了
  • logback-spring.xml:日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,可以使用SpringBoot的高级Profile功能
<springProfile name="staging">
    <!-- configuration to be enabled when the "staging" profile is active -->
    <!-- 可以指定某段配置只在某个环境下生效 -->
</springProfile>

如:

<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>

如果使用logback.xml作为日志配置文件,还要使用profile功能,会有以下错误:

no applicable action for [springProfile]

5、切换日志框架

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

slf4j+log4j的方式:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <artifactId>logback-classic</artifactId>
      <groupId>ch.qos.logback</groupId>
    </exclusion>
    <exclusion>
      <artifactId>log4j-over-slf4j</artifactId>
      <groupId>org.slf4j</groupId>
    </exclusion>
  </exclusions>
</dependency>

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
</dependency>

切换为log4j2:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>spring-boot-starter-logging</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
 </dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
基于opencv自定义网格板的相机标定软件源码 本软件开发版使用的是VS2013和QT5.7, 安装版的需要安装VS核心库(目录里的vcredist_x64.exe, 已安装VS的不需要)。采用强大的模板匹配算法,本程序适用于自定义大范围网格标定(本例程网格使用的是自己画的网格板31*21*10cm),网格点识别度高,矫正速度快,精度高。 使用步骤 第1步: 打开图片,打开标定工具GridCalibTool.exe, 然后选择打开一张待标定的图(CalibFiles文件夹下的500.jpg)。如下图: 第2步: 提取待标定区域(去掉多余部分,只保留网 阅读详情

相关推荐

springboot中的日志文件配置Logback

1.配置(单体项目时) logging: config: classpath:logback-8001.xml //指定自定义配置文件位置(resources下) file: path: logs //在当前项目同级目录生成文件 2.自定义文件中的配置 *在application.yml文件中仅配置logging.config时,使用配置文件的文件输出路径 <!-- 定义日志文件 输入位置 --> <property name="log_dir"

JJJJ的博客 778

vos如何对接okcc(保姆级教程)

1.添加账户 点击 系统->账户管理 [图片] 2.创建费率 系统->费率管理 点击添加

qq_46333281的博客 3453

SpringBoot日志文件

SpringBoot日志

m0_70386582的博客 1943

STM32F105双路CAN通讯无法进入接收中断问题及解决方法

STM32F105RBT6双路CAN通讯无法进入接收中断问题及解决方法

m0_62383223的博客 3441

DM达梦数据库远程客户端工具连接6001错误,disql可以正常连接

DM达梦数据库远程客户端工具连接6001错误,disql可以正常连接

weixin_45906061的博客 4509

elk日志启动异常:no applicable action for springProfile

现象 项目中加入logback-kafka-appender和logstash-logback-encoder的elk日志,启动时日志中出现下列错误 15:56:36,022 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@9:36 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]] 15:56:

进击的小白 1334

CDD数据库文件制作(十一)——服务配置(0x19_DTC Code)

虽然选择Copy和Reference都可以加载DTC,但是如果我们在DTC库中有修改DTC,通过Copy的方式加载的DTC在DTC Table中不会跟着DTC库的修改而自动更新。通过Reference的方式加载的DTC可以自动更新。找到Fault Memory的DTC Table,鼠标放在DTC Table区域,右键点击选择Copy …根据需要(客户协议)勾选响应的19服务子功能。如何创建一个新的DTC code?按照字母与下方要素可做一一对应。首先在DTC库中新建DTC。支持10 01/10 03。

LOVE135149的博客 1917

no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]

代码异常提示如下: 16:59:58,897 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file-error] - Active log file name: logs/error.log 16:59:58,897 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file-error] - File property is set to [logs/error..

悟●禅●酒的专栏 7161

基于matlab的LFM脉冲压缩仿真

传统雷达测距是通过发射点频脉冲串实现的,通过发射脉冲与回波的时延确定目标的距离。此类方法易于实现,对接收机的要求较低。一般要获取更好的距离分辨力,需要增加发射信号的带宽,对于点频脉冲信号即需要减小发射脉冲宽度;而为获取更大的探测距离,提升雷达威力,则需要发射更大占空比的脉冲串。由于点频信号的时宽带宽积约等于1,因此不能同时增加信号的时宽和带宽。若要保持距离分辨力,增大占空比就需要减少雷达的脉冲重复周期(PRT)。这样会减小雷达的无模糊探测距离,也会造成目标回波频繁被遮挡,损失雷达威力。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 1770

爬虫反爬:一文掌握 BotBrowser 的原理和使用(能绕过很多验证码的指纹浏览器)

BotBrowser是使用经过修改的Chromium内核(修改Chromium的C++源代码)的隐形浏览器,可靠地绕过Cloudflare、Shape、PerimeterX、Datadome、Akamai、Kasada、hCaptcha和reCAPTCHA。BotBrowser是一个跨平台的自动化工具,它重新定义了web自动化。专为爬虫、RPA(机器人流程自动化)和 Web 测试设计。与 Puppeteer/Selenium 不同,它通过无头模式(Headless)和API 级控制。

数据知道的博客 1万+

springboot logback no applicable action for [springProfile], current ElementPath is [[configuration]

在springboot项目里使用logback报如下错误 14:25:46,762 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@3:72 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]] 14:25:46,762 |-ERROR in ch.qos.logback.core.joran.spi

lyterrific的博客 1万+

【PG高可用】一 PostgreSQL高可用方案repmgr部署(非常详细)

repmgr安装部署

DBA之路的博客 7052

SpringBoot的日志

自定义打印日志、日志级别、日志持久化、lombok框架打印日志

Java 8421

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Spring Boot |SpringBoot的日志框架及配置

文章目录一、常用的日志框架1.1 日志门面1.2 日志实现1.3 Spring Boot的日志框架选择二、SLF4j的使用2.1 SLF4j使用原理2.2 统一日志管理三、SpringBoot日志关系 一、常用的日志框架 市场上存在非常多的日志框架,分为日志门面(日志的抽象层)和日志实现。 1.1 日志门面 JUL(java.util.logging) JCL(ApacheCommons Lo...

匿名攻城狮 1814

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SpringBoot日志

我们说spring使用了slf4j框架,但是整个框架也不是一个真正的日志实现,而是一个抽象层,他对现有的一些日志框架制定了一种规范标准,也就是slf4j就是个接口,所以slf4j,需要和具体的日志框架配合使用slf4j就是其他日志框架的门面,可以理解为提供日志服务的统一API接口,并不涉及到具体日志逻辑实现。

huapiaoy的博客 2820

spring boot 日志乱码_SpringBoot整合日志框架

>SpringBoot版本:2.1.1.RELEASE当我们在进行web开发时,经常会用到各种各样的框架,常见的有spring、mybatis、hibernate等等,每个框架底层都有着自己的日志实现,那么难道我们在进行开发时,还需要在使用不同框架的时候使用其对应的API嘛?这将会大大增加我们的开发成本。还有如果我们在后期对项目进行二次开发时,如果要换日志框架,难道还得需要把原本的日志AP...

weixin_39616961的博客 625

详解SpringBoot日志

详解SpringBoot的日志,包括日志框架,日志级别,日志配置等。

. 1万+

Spring Boot与日志 ——日志框架、日志配置||SLF4j使用||SpringBoot日志关系||切换日志框架

1、日志框架 SLF4j使用 1、如何在系统中使用SLF4j 以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法; 给系统里面导入slf4j的jar和 logback的实现jar 注:每一个日志的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件; 2、遗留问题 a(slf4j+l...

qq_39368007的博客 639

springboot日志之springboot日志关系

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> springboot使用它来做日志功能: <depende...

level_Tiller的博客 216

【SpringBoot】Spring Boot 与日志

一、日志框架 小张:开发了一个大型分布式系统; System.out.println("");将关键数据打印在控制台;去掉?写在一个文件? ​ 框架来记录系统的一些运行时信息;日志框架 ; zhanglogging.jar; ​ 高大上的几个功能?异步模式?自动归档?xxxx? zhanglogging-good.jar? ​ 将以前框架卸下来?换上新的框架,重新修改之前相关...

天天新知 487

SpringBoot ——Spring Boot日志配置

Spring Boot 采用了 slf4j+logback 的组合形式,Spring Boot也提供对JUL、log4j2、Logback提供了默认配置 1、默认日志配置 修改日志默认级别 2、修改日志默认配置 修改日志文件生成路径 ​ ​ 修改日志输出格式 ​ 3、日志底层实现 在web项目中,引用了spring-boot-starter-web依赖,SpringBoot中默认日志启动器为spring-boot-starter-logging,默认采用的是logback日志.

qq_43842093的博客 956

Springboot 系列(四)Spring Boot 日志框架

注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别。 前言 Spring 框架选择使用了 JCL 作为默认日志输出。而 Spring Boot 默认选择了 SLF4J 结合 LogBack。那我们在项目中该使用哪种日志框架呢?在对于不同的第三方 jar 使用了不同的日志框架的时候,我们该怎么处理呢...

未读代码 747

SpringBoot基础——Spring Boot与日志

一、日志框架 市场上存在非常多的日志框架。JUL(java.util.logging),JCL(Apache Commons Logging),Log4j,Log4j2,Logback、SLF4j、jboss-logging等。 Spring Boot在框架内容部使用JCL,spring-boot-starter-logging采用了 slf4j+logback的形式,Spring Boot也能自...

热爱永不过时! 245

SpringBoot 日志总结

在日常开放中追踪和排查问题,使用System.out.println打印不方便管理,如输出的类,时间等。Logback:ceki首创log4j之后,又推出了logback “可靠、通用、快速而又灵活的Java日志框架”,其直接实现了SLF4J。还支持注解:@Log4j、@Log4j2、@JBossLog、@CommonsLog。SpringBoot默认门面采用:SLF4J,实现采用:logback。SLF4J:是门面的担当,本质是个空壳,用来适配各种日志。如上代码使用日志,每一个类都需要如下这段代码。...

terrybg 1万+

SpringBoot 日志管理

先说明:项目中不要写System.out.println(),应该用日志记录信息!而关于日志的演变也是非常久远的。JDK1.4 开始,通过 java.util.logging 提供日志功能。虽然是官方自带的log lib,JUL的使用确不广泛。原因其实简单:就是那个时候做的真的很烂,也非常不好用。所以后面逐渐涌现出来像Log4j、Logback等优秀的日志框架。今天,我们不会去深度探讨这其中的关系,重在讲解Springboot应用中的主要用法。如果对这方面感兴趣,可以参考这篇文章好,正篇开始!

路漫漫其修远兮,吾将上下而求索 1336
上一篇: 解决跨域问题之JSONP
下一篇: SpringBoot之使用Thymeleaf以及WebJars
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值