SpringBoot学习历程(五):集成Logback日志配置

Spring Boot 集成 SLF4j:从基础配置到高级实践与问题解决全指南 SLF4J作为日志门面框架,通过统一API实现业务代码与日志实现的解耦,提供灵活切换和性能优化等优势。Spring Boot默认集成SLF4J+Logback组合,通过起步依赖自动引入相关库和桥接包,统一管理应用日志流。本文详细解析SLF4J的设计原理、核心价值及其与Spring Boot的深度集成,帮助开发者理解日志框架的最佳实践。 阅读详情

前言

  • 本人github仓库地址:https://github.com/RabbitsInTheGrass/springBoot-Learning
  • 默认情况下,SpringBoot会用Logback来记录日志,并用INFO级别输出到控制台。

1. 引入日志依赖

<!-- 引入web依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

在Spring Boot中,Logback是默认的日志记录框架,只需添加spring-boot-starter-web,它就能引入logback依赖项。

2. 日志输出

2.1 日志输出级别

日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。 Spring Boot中默认配置ERROR、WARN和INFO级别的日志输出到控制台。
开启调试模式:

  1. 在运行命令后加入–debug标志;
  2. 在application.properties/yml中配置debug=true,该属性置为true的时候,核心Logger(包含嵌入式容器、hibernate、spring)会输出更多内容,但是你自己应用的日志并不会输出为DEBUG级别。

2.2 彩虹色日志输出

彩虹色输出日志:
通过在application.properties/yml中设置spring.output.ansi.enabled参数来支持。
3. NEVER:禁用ANSI-colored输出(默认项)
2. DETECT:会检查终端是否支持ANSI,是的话就采用彩色输出(推荐项)
4. ALWAYS:总是使用ANSI-colored格式输出,若终端不支持的时候,会有很多干扰信息,不推荐使用

当有多处指定了要记录的日志的最下日志级别时,走优先级最高的,优先级: logback-spring.xml中 > 启动jar包时 > xxx.properties/xxx.yml中

3. 自定义日志配置

根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:

  1. Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
  2. Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
  3. Log4j2:log4j2-spring.xml, log4j2.xml
  4. JDK (Java Util Logging):logging.properties

SpringBoot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml)。

4. spring对日志的配置文件属性支持

#LOGGING 
#日志配置文件的位置。例如,Logback的classpath:logback.xml
logging.config = classpath:logging-config.xml
#记录异常时使用的转换字。
logging.exception-conversion-word =%wEx 
#日志文件名(例如`myapp.log`)。名称可以是确切的位置或相对于当前目录。
logging.file = 
#要保留的归档日志文件的最大数量。仅支持默认的登录设置。
logging.file.max-history = 0 
#最大日志文件大小。仅支持默认的登录设置。
logging.file.max-size = 10MB 
#日志级别严重性映射。例如`logging.level.org.springframework = DEBUG`。
logging.level。* =
#日志文件的位置。例如,`/ var / log`。
logging.path = 
#输出到控制台的Appender模式。仅使用默认的Logback设置支持。
logging.pattern.console = 
#日志格式的Appender模式。仅使用默认的Logback设置支持。
logging.pattern.dateformat = yyyy-MM-dd HH:mm:ss.SSS 
#输出到文件的Appender模式。仅使用默认的Logback设置支持。
logging.pattern.file = 
#日志级别的Appender模式。仅使用默认的Logback设置支持。
logging.pattern.level =%5p 
#为日志记录系统初始化时注册一个关闭钩子。
logging.register-shutdown-hook = false 

5. 整合Logback

5.1 logback-spring.xml

在resources目录下新建一个logback-spring.xml文件。
配置示例:

<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <contextName>RabbitsInTheGrass_XJ</contextName>

    <!-- 通过property标签,来存放key-value数据,便于后面的动态获取,提高程序的灵活性 -->
    <property name="log.path" value="E:\myLog" />

    <!-- 彩色日志 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <!-- 文件输出日志格式 -->
    <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n" />

    <!-- 输出到控制台  -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36}:%L- %msg%n</pattern>-->
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置日志编码字符集 -->
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
    </appender>

    <!--输出到文件-->
    <!-- 时间滚动输出 level为 DEBUG 日志 -->
    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文件输出格式-->
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_debug.log</file>
        <!-- 此日志文件只记录debug级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志归档 -->
            <fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 时间滚动输出 level为 INFO 日志 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文件输出格式-->
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_info.log</file>
        <!-- 此日志文件只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志归档路径以及格式 -->
            <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 时间滚动输出 level为 WARN 日志 -->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文件输出格式-->
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_warn.log</file>
        <!-- 此日志文件只记录warn级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 时间滚动输出 level为 ERROR 日志 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文件输出格式-->
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_error.log</file>
        <!-- 此日志文件只记录ERROR级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
    </appender>

    <!--
        注:日志级别有: trace|debug|info|warn|error|fatal
        注:当有多处指定了要记录的日志的最下日志级别时,走优先级最高的,优先级:
           logback-spring.xml中 > 启动jar包时 > xxx.properties/xxx.yml中
    -->

    <!-- 开发环境 -->
    <springProfile name="dev">
        <logger name="com" level="debug" />
        <root level="info">
            <appender-ref ref="CONSOLE" />
        </root>
    </springProfile>
    <!-- 测试环境+生产环境 -->
    <springProfile name="test,prod">
        <logger name="com" level="info" />
        <root level="info">
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
        </root>
    </springProfile>
</configuration>

详解:

5.1.1 根节点configuration标签

  1. scan:默认值为true,开启对配置信息的自动扫描(默认时间为60秒扫描一次) 。配置文件如果发生改变,将会被重新加载。
  2. scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
  3. debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

5.1.2 属性一:contextName 设置上下文名称

每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过%contextName来打印日志上下文名称

5.1.3 属性二:property 设置变量

用来定义变量值的标签, 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。

5.1.4 子节点一:appender 标签

appender用来格式化日志输出节点,有俩个属性name和class,name自定义,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。

5.1.4.1 控制台输出ConsoleAppender

encoder表示对日志进行编码:

  • %d{HH: mm:ss.SSS}——日志输出时间。
  • %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用。
  • %-5level——日志级别,并且使用5个字符靠左对齐。
  • %logger{36}——日志输出者的名字。
  • %msg——日志消息。
  • %n——平台的换行符。

ThresholdFilter为系统定义的拦截器,可以过滤某个级别以下的日志不输出到文件中。

5.1.4.2 输出到文件RollingFileAppender

其中重要的是rollingPolicy的定义:

  • < file>${log.path}</ file> 正在记录的日志文件的路径及文件名;
  • < fileNamePattern>${log.path}/logback.%d{yyyy-MM-dd}.log </ fileNamePattern>定义了日志的切分方式——把每一天的日志归档到一个文件中;
  • < maxHistory>30</ maxHistory>表示只保留最近30天的日志,以防止日志填满整个磁盘空间。同理,可以使用%d{yyyy-MM-dd_HH-mm}来定义精确到分的日志切分方式;
  • < totalSizeCap>1GB</ totalSizeCap>用来指定日志文件的上限大小,例如设置为1GB的话,那么到了这个值,就会删除旧的日志。
  • 可以在rollingPolicy中嵌套滚动策略:
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
	<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>

SizeAndTimeBasedFNATP策略是: 在每天都会拆分日志的前提下,当该天的日志大于规定大小时进行拆分并以【%i】进行区分,i从0开始。

5.1.5 子节点二:loger 标签

loger标签用来设置某一个包或者具体的某一个类的日志打印级别、以及指定appender。loger标签仅有一个name属性,一个可选的level和一个可选的addtivity属性。

  • name:用来指定受此loger约束的某一个包或者具体的某一个类。
  • level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。
  • addtivity:是否向上级loger传递打印信息。默认是true。
  • < appender-ref ref=“console”/> 指定了名字为“console”的appender。

5.1.6 子节点三:root 标签

root节点是必须配置的节点,用来指定最基础的日志输出级别,只有一个level属性。

  • level:设置打印级别,跟大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。
  • 一般都默认是DEBUG。
    可以包含零个或多个元素,标识这个appender将会添加到这个loger。

5.2 多环境日志配置

根据不同的环境(prod:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出,在 logback-spring.xml中使用 springProfile 节点来定义,方法如下:

<!-- 开发环境 -->
<springProfile name="dev">
    <logger name="com" level="debug" />
    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="DEBUG_FILE" />
        <appender-ref ref="INFO_FILE" />
        <appender-ref ref="WARN_FILE" />
        <appender-ref ref="ERROR_FILE" />
    </root>
</springProfile>
<!-- 测试环境+生产环境 -->
<springProfile name="test,prod">
    <logger name="com" level="info" />
    <root level="info">
        <appender-ref ref="DEBUG_FILE" />
        <appender-ref ref="INFO_FILE" />
        <appender-ref ref="WARN_FILE" />
        <appender-ref ref="ERROR_FILE" />
    </root>
</springProfile>

多个环境使用同一个在name中用逗号隔开。springProfile 标签的 name 属性对应 application.properties 中的 spring.profiles.active 的配置。即 spring.profiles.active 的值可以看作是日志配置文件中对应的 springProfile 是否生效的开关。

使用中的问题

  1. 建议使用占位符的方式参数化记录日志
  2. logback 内部机制保证 logger 在记录日志时,不必每一次都去遍历它的父辈以获得关于日志级别、Appender 的信息
  3. 在 logback 中,将日志信息格式化,以及输出到目的地,是最损耗性能的操作
[springboot]Slf4j日志框架的体系结构 刚刚接触到java log日志的同学可能会被各种日志框架吓到,包括各种日志框架之间的jar总是发生冲突,另很多小伙伴头疼不已。那我们本篇的内容就是将各种java 日志框架发展过程,以及他们之间的关系,以及如何选型来介绍给大家。... 阅读详情

相关推荐

RAG-Anything 实战指南:从零构建企业级多模态知识库

本文是RAG-Anything的实战指南,详细介绍了如何从零构建企业级多模态知识库。通过一体化框架,它能无差别解析文本、表格、图片、公式等多格式文档,并构建可深度理解和智能检索的知识图谱。指南涵盖了环境搭建、核心实战、智能查询及生产级部署优化,帮助企业将杂乱文档转化为智能知识大脑。

pandas7gardener的博客 242

Springboot + slf4j日志

slf4j springboot推荐的日志类库是slf4j、日志系统为logback。slf4j有个接口叫Logger,提供了丰富的日志输出方法,包含了所有日志级别的输出。使用方式也是特别的简单,用slf4j的工厂类获取一个logger ,然后就可以输出日志了,默认情况下,日志只会输出到控制台。 使用 package cn.com.infosec.netseal.common.core.controller; import org.slf4j.Logger; import org.slf4j.Logger

qq_42873640的博客 2494

给IC设计新人的Tessent Scan入门指南:从RTL到ATPG的完整DFT流程解析

本文为IC设计新手提供Tessent Scan的完整DFT流程指南,从RTL代码检查到ATPG测试向量生成,详细解析扫描链配置、插入及验证的关键步骤。通过实战案例和工具命令示例,帮助工程师快速掌握Tessent工具链的应用技巧,提升芯片可测试性设计的效率和质量。

weixin_32541663的博客 451

SpringBoot——Slf4j

在开发中,我们经常使用 System.out.println() 来打印一些信息,但是这样不好,因为大量的使用 System.out 会增加资源的消耗。我们实际项目中使用的是 slf4j 的 logback 来输出日志,效率挺高的,Spring Boot 提供了一套日志系统,logback 是最优的选择。引用百度百科里的一段话:SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。

qq_39367410的博客 7226

地质工程师必备:Dips软件从数据导入到主结构面分析的完整流程解析

本文详细解析了地质工程师使用Dips软件进行主结构面分析的完整流程。从数据准备与导入、结构面分组与扇形区划分,到主结构面计算与工程解读,系统阐述了如何将野外节理数据转化为控制岩体稳定性的关键信息。重点介绍了利用等值线图识别优势组、计算统计主值及其置信椭圆,并强调了地质判断与工程应用结合的重要性。

table的专栏 341

AI在个性化营养方案制定中的应用:从代谢组学到膳食规划

本文章的主要目的是全面探讨AI在个性化营养方案制定过程中的应用,从代谢组学的数据收集与分析,到基于这些数据制定合理的膳食规划。范围涵盖了AI技术在该领域的核心概念、算法原理、数学模型、实际项目应用,以及相关的工具和资源推荐等方面。旨在为科研人员、营养师、软件开发人员等提供一个系统的知识体系,帮助他们更好地理解和应用AI技术来实现个性化营养方案的制定。核心概念与联系:介绍AI、代谢组学和膳食规划的核心概念,以及它们之间的相互联系,并通过文本示意图和Mermaid流程图进行展示。

架构师的AI之路,分享AI应用开发架构的学习与实践。 1030

slf4j(一)springboot集成

一、说明:SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J 是一个用于日志系统的简单 Facade,允许最终用户在部署其应用时使用其所希望的日志系统。spring-boot内部已经集成了slf4j,所以我们只要对slf4j做下简单的配置即可。 二、简单配置: 1、首先我们需要一个文件用来做日志相关的配置: <configuration> <!-- 格

w_t_y_y的博客 4883

深入解析组合逻辑环(combinational loop)的成因与解决方案

本文深入解析了数字电路设计中组合逻辑环(combinational loop)的成因与危害。通过边沿检测和中断轮询(round_robin)仲裁器等实例,揭示了代码如何意外形成环路,并对比了插入触发器、重构逻辑以及状态机思维三种核心解决方案,帮助硬件工程师从根本上避免这一常见设计陷阱,确保电路稳定可靠。

weixin_28278377的博客 313

SpringBoot用slf4j日志 及其 项目配置、MVC支持

SLF4J查了一下单词,他是Simple Logging Facade forJava)其实我觉得每次有专有名词,就查一下完整的英文,更能帮助我理解并且记住这个新知识。它是一个简单的Java日志门面框架,提供通用的接口,用于访问不同的日志实现,有Log4j、Logback、JCL等。SLF4J的目标是为不同的日志实现提供一个统一的接口,这样我以后就可以在不同的日志实现之间进行无缝切换了。

qq_46258291的博客 3648

SCI投稿Title Page、Cover letter、Highlights、Manuscript模板

(简要介绍一下论文的创新性). I hope this paper issuitable for “Journal Name”.版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/weixin_48615832/article/details/120317336。

qq_15963745的博客 3700

IEEE S&P 2026 大模型安全论文整理

本文梳理了 IEEE S&P 2026(第47届 IEEE 安全与隐私研讨会)中与 LLM Safety 相关的论文,涵盖大模型越狱攻击、防御与对齐、隐私保护、RAG 安全、多模态大模型安全、智能体安全、图-LLM 安全、工具链安全及生成式 AI 安全与隐私等方向。

CSPhD-winston的博客 1334

六.SpringBoot之集成Logback日志

一、简介 Java知名的日志有很多,比如:JUL、Log4j、JCL、SLF4J、Logback、Log4j2,那么这些日志框架之间有着怎样的关系?诞生的原因又是解决什么问题?下面一起来看。 1.1 JUL Java有自己的日志框架JUL(Java Util Logging)在java.util.logging下,因为对开发者不友好,使用成本太高和日志级别分类不清晰的问题,所有很少有开发者用...

zhang__rong的博客 258

上线之前多一道闸:业务审核系统的接入定义、双轨状态机与可靠生效闭环

运营后台“保存即生效”,让价格、库存、人群等配置每次修改都相当于一次无评审的上线。本文以至尊会员降价活动为例,系统拆解业务审核系统:用带业务语义的操作编码、规则化审核人与候选人快照、完整的生效回调契约做好接入定义;把业务改造为提交待生效,以不可变快照、字段级差异和唯一约束加幂等号防误配防重复;用审批轨与执行轨双轨状态机、链路式重新提交和以事件为准的审核链路理清状态;最后以发件箱、幂等键、超时先查后试、乐观锁与对账闭合生效环节,并结合两个可运行的Java程序,给出五种生效策略的事故率实测对比。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 6万+

SpringBoot2.x使用slf4j+logback日志,以及动态修改日志级别

前言:记录一下SpringBoot学习历程 SpringBoot中内置了slf4j日志框架,我们直接使用就好了。 使用slf4j 新建一个测试controller,如: public final Logger log = LoggerFactory.getLogger(getClass()); @GetMapping("/test") public void tes...

qq_36174487的博客 7951

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Kite的学习历程之SpringBoot中日志

SpringBoot的日志操作

weixin_46554504的博客 194

计算机控制技术及应用

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

SpringBoot第四谈(springboot使用拦截器、Servlet、过滤器Filter、Spring Boot 项目配置字符编码、SpringBoot打包部署、集成Logback日志)

本人是一名物联网工程专业的学生,即将进入大三,写博客即是为了记录自己的学习历程,又希望能够帮助到很多和自己一样处于起步阶段的萌新。 临渊羡鱼,不如退而结网。一起加油! 博客主页:https://blog.csdn.net/qq_44895397 SpringBoot使用拦截器 1、定义一个拦截器,实现HandlerInterceptor接口 public class StudentHandler implements HandlerInterceptor { @Override p..

小游子YKY的博客 5183

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JAVA日志发展历程及springboot日志使用

一、介绍日志发展历程 jdk1.3 System.out.println("")追踪 只能用于写代码时调试,上线部署后,定位问题,很难找到出问题的地方。System.out.println("")只会在控制台打印日志,造成日志积压后,查询不到历史日志。 logUtil 相对于System.out.println("")进行改进,将日志写入到文件中,方便进行定位。但仍然有很多不足需要改进 log4j 对logUtil进行了改进 1.为了适应不同环境的需要,减少不必要的日志输出,增加了日志级别的划分。(追踪1

study_study_know的博客 259

SpringBoot之日志框架

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

lixinkuan的博客 822

logback解决依赖中logback.xml覆盖原项目中的配置问题

logback.xml读取问题

weixin_44646065的博客 3676

Springboot 日志详解

Springboot 日志详解,Logback + SLF4J,Log4J2 + SLF4j

dejunyang的博客 659

SpringBoot 日志系统解析

logger {length}: 输出日志的logger名, 可有一个整形参数,功能是缩短logger名contextName | cn: 上下文名称输出日志的打印时间, 模式语法与兼容p/le/level:日志级别M/method: 输出日志的方法名r/relative: 从程序启动到创建日志记录的时间m/msg/message: 程序提供的信息

Box_clf的博客 633

SpringBoot——日志系统解析

日志作用:记录程序的运行轨迹,方便查找关键信息以及快速定位解决问题 通过debug模式会进入到getLogger方法中 跟进getILoggerFactory()方法 通过performInitialization()方法实现寻址 点击跟进bind方法 跟进findPossibleStaticLoggerBinderPathSet方法 接着跟进getSingleton方法,如果StaticLoggerBinder不存在,则会抛异常 跟进reportActualBind

qq_43842093的博客 1315

Java日志

如果需要更高级的日志配置,Spring Boot 支持自定义 Logback、Log4j2 或 Java Util Logging 的配置文件。只需要在类路径下提供相应的配置文件,Spring Boot 就会自动加载它。对于 Logback,我们可以提供或文件。对于 Log4j2,我们可以提供或log4j2.xml文件。对于 Java Util Logging,我们可以提供文件。这些自定义配置文件允许我们进行更详细的配置,例如设置日志滚动策略、定义复杂的日志过滤规则等。

曾续缘的博客 833

Spring Boot(十)Logback和Log4j2集成与日志发展史

一、简介 Java知名的日志有很多,比如:JUL、Log4j、JCL、SLF4J、Logback、Log4j2,那么这些日志框架之间有着怎样的关系?诞生的原因又是解决什么问题?下面一起来看。 1.1 JUL Java有自己的日志框架JUL(Java Util Logging)在java.util.logging下,因为对开发者不友好,使用成本太高和日志级别分类不清晰的问题,所有很少有开发者用。 ...

磊哥聊Java 807

记录spring_boot的日志系统学习

首先,添加lombok的依赖,然后idea如果不支持lombok还得下载插件,而且lombok是和JDK版本,它的更新速度没有那么快,添加@Slf4j注解后,可以直接使用,但是实际开发中,只要有一个人用了这个,所有的开发人员都需要配置,所以不太建议;JDK官方提供了日志门面,JCL,不提供实现日志功能,整合日志(它的原理是通过类加载器,来判定是否存在相关的日志接口的实现,如果存在,则使用,不存在,则继续查找其他的)Spring_boot日志文件归档,可以定义日志文件的最大size,和最大的文件数量等。

m0_64639742的博客 1187
上一篇: SpringBoot学习历程(四):个性设置Banner
下一篇: SpringBoot学习历程(六):集成Lombok
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RabbitsInTheGrass

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值