返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot3集成SLF4J+logback进行日志记录的实现
  • 667
分享到

SpringBoot3集成SLF4J+logback进行日志记录的实现

2024-04-02 19:04:59 667人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录1 快速实现2 配置xml2.1 configuration2.2 property和springProperty2.3 root2.4 appender2.4.1 Consol

SpringBoot会默认使用logback作为日志框架,在生成springboot项目的时候可以直接勾选logback,那么就可以直接使用logback了。手动添加的话,建议使用slf4j+logback,后面项目更容易维护:

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.21</version>
</dependency>

<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-core</artifactId>
  <version>1.1.7</version>
</dependency>

<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.1.7</version>
</dependency>

SLF4J 是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。大概意思是指你只需要按统一的方式写记录日志的代码,而无需关心日志是通过哪个日志系统,以什么风格输出的,因为它们取决于部署项目时绑定的日志系统。
例如,在项目中使用了 SLF4J 记录日志,并且绑定了 Log4j(即导入相应的依赖),则日志会以 Log4j 的风格输出;后期需要改为以 Logback 的风格输出日志,只需要将 Log4j 替换成 Logback 即可,不用修改项目中的代码。

1 快速实现

假如我们需要实现这么一个需求:在文件中记录调用接口事件和传参,并在控制台显示。实现起来很简单,三步即可。

第一步,在resource目录下创建一个logback.xml文件,内部写入:

<?xml version='1.0' encoding='UTF-8'?>
<!--日志配置-->
<configuration>
    <!--直接定义属性-->
    <property name="logFile" value="logs/mutest"/>
    <property name="maxFileSize" value="30MB"/>

    <!--控制台日志-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d [%thread] %-5level %logger{50} -[%file:%line]- %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--滚动文件日志-->
    <appender name="fileLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logFile}.log</file>
        <encoder>
            <!--日志输出格式-->
            <pattern>%d [%thread] %-5level -[%file:%line]- %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${logFile}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>${maxFileSize}</maxFileSize>
        </rollingPolicy>
    </appender>
    <!--创建一个具体的日志输出-->
    <logger name="com.mutest" level="info" additivity="true">
        <!--可以有多个appender-ref,即将日志记录到不同的位置-->
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="fileLog"/>
    </logger>

    <!--基础的日志输出-->
    <root level="info">
    </root>
</configuration>

关于这段xml的详情,第二章节会详细讲解

第二步,在application.yml文件中配置项目要使用的日志配置文件路径:

logging:
  config: classpath:logback.xml

第三步,在接口添加日志记录:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.WEB.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    // getLogger()的入参是当前类,否则输出日志的类名会是错误的
    private final Logger logger = LoggerFactory.getLogger(TestController.class);

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public String logTest(String name, String age) {
        logger.info("logTest,name:{},age:{}", name, age);
        return "success";
    }
}

当然,如果你安装了lombok这个插件,就更简单了: Lombok使用详解

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class TestController {

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public String logTest(String name, String age) {
        log.info("logTest,name:{},age:{}", name, age);
        return "success";
    }
}

启动项目后调用接口,控制台输出如我们所期望:

同时,项目中增加了一个log目录,生成mutest.log文件,里面记录了日志:

功能是实现了,但我们脑子里还是有很多小问号,不急,接下来就细细讲来。

2 配置xml

首先,在resource目录下创建一个文件,命名为logback.xml。现在先向里面写一些固定的内容,就是下面这个样子:

<?xml version='1.0' encoding='UTF-8'?>
<!--日志配置-->
<configuration>
    <!--直接定义属性-->
    <property name="" value=""/>
    <!--通过配置文件定义属性-->
    <springProperty name="" source=""/>
    
    <!--定义并描述一个日志的输出属性-->
    <appender name="" class="">

    </appender>
    <!--创建一个具体的日志输出-->
    <!--name指定包名-->
    <logger name="" level="" additivity="">
        <!--ref值指向appender的name-->
        <appender-ref ref=""/>
    </logger>

    <!--基础的日志输出-->
    <root level="">
        <appender-ref ref=""/>
    </root>
</configuration>

2.1 configuration

<configuration>是logback.xml这个xml文件的根节点,它包含以下属性:

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

例如,下面这个configuration:

<configuration scan="true" scanPeriod="60 seconds" debug="false">  
      <!-- 其他配置省略-->  
</configuration>  

2.2 property和springProperty

这两个节点可以设置全局变量。

property可以直接设置,例如:

<property name="logFile" value="logs/mutest"/>

这样就设置了一个名为logFile的变量,后续通过${logFile}的方式就引用到了其值logs/mutest。

而springProperty则要配合配置文件,例如:

<springProperty name="logFile" source="log.file"/>

也是设置了一个名为logFile的变量,但没有直接赋值,而是通过source指向了配置文件的路径,配置文件中是这样的:

log:
  file: logs/mutest

2.3 root

root节点,必选节点,用来指定最基础的日志输出级别并指定<appender>,可以理解为根logger。

一个典型的root节点如下:

<root level="debug">
    <appender-ref ref="console" />
    <appender-ref ref="file" />
</root>

2.4 appender

appender节点是非常关键的一个节点,负责格式化一个日志输出节点(也就是描述日志存储类型、位置、滚动规则等属性)。我个人理解,appender作用类似于构造一个日志模板,而logger是真正的日志输出者,使用某个appender作为模板去写日志。

appender有三种类型,分别是ConsoleAppender(控制台日志)、FileAppender(文件日志)、RollingFileAppender(滚动文件日志)。

2.4.1 ConsoleAppender

ConsoleAppender的作用是将日志输出到控制台,一般在本地调试时使用,它的配置非常简单,一个典型的ConsoleAppender如下:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d [%thread] %-5level %logger{50} -[%file:%line]- %msg%n</pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>

appender 有name和class两个属性:

  • name:appender节点的名称,在后文中被logger节点引用。一个logback配置文件中不能有重复的appender name。
  • class:使用何种日志输出策略,分别是ConsoleAppender(控制台日志)、FileAppender(文件日志)、RollingFileAppender(滚动文件日志)。

2.4.2 FileAppender

FileAppender用于把日志添加到文件。一个典型的FileAppender如下:

<appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
    <file>testFile.log</file> 
    <append>true</append> 
    <encoder> 
        <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
    </encoder>
</appender> 

相对于ConsoleAppender,它多了一些子节点,让我们一一来看:

  • <file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
  • <append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。
  • <encoder>:对记录事件进行格式化。(具体参数稍后讲解 )
  • <prudent>:如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。
  • <pattern>:日志的输出格式。

pattern定义了日志的输出格式,我们以<pattern>%d [%thread] %-5level -[%file:%line]- %msg%n</pattern>为例,分解开来:

  • %date:表示日期
  • %thread:表示线程
  • %-5level:表示级别从左显示 5 个字符宽度
  • %logger{50}:表示 Logger 名字最长 50 个字符
  • %msg:表示日志消息
  • %n:换行符

2.4.3 RollingFileAppender

RollingFileAppender用于滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。一个典型的RollingFileAppender节点如下:

<configuration>
    <!--直接定义属性-->
    <property name="logFile" value="logs/mutest"/>
    <property name="maxFileSize" value="30MB"/>

    <appender name="fileLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文件存储路径,来自property设置-->
        <file>${logFile}.log</file>
        <encoder>
            <pattern>%d [%thread] %-5level -[%file:%line]- %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--每天生成一个新的活动日志文件,旧的日志归档,后缀名为2019.08.12这种格式-->
            <fileNamePattern>${logFile}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--活动日志文件最大值,超过这个值将产生新日志文件-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--只保留最近30天的日志-->
            <maxHistory>30</maxHistory>
            <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
</configuration>

另外,RollingFileAppender节点下有一些常用的子节点:

  • <rollingPolicy>:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。
  • <filter>:日志输出拦截器,可以自定义拦截器也可以用系统一些定义好的拦截器。
  • <rollingPolicy>:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类。
    • SizeAndTimeBasedRollingPolicy:根据日志文件大小和时间周期作为切分条件,满足其中任意一个就要做切分。maxFileSize的值决定了当天的日志文件大小上限,超过这个上限,同一天将会有多个日志文件,因此<fileNamePattern>${logFile}.%d{yyyy-MM-dd}.%i</fileNamePattern>中有一个%i,就是为应对同一天生成多个日志文件而写,在日志量很大的情况下,会出现mutest.log.2020-07-28.0.log、mutest.2020-07-28.1.log这种情况。
    • TimeBasedRollingPolicy:只以时间周期为切分条件,在这种策略下,存档日志名称格式设置为<fileNamePattern>${logFile}.%d{yyyy-MM-dd}.log</fileNamePattern>即可。
    • SizeBasedTriggeringPolicy:只以文件大小为切分条件,在这种策略下,<maxFileSize>日志滚动的唯一触发条件。
  • <fileNamePattern>:必要节点。以${logFile}.%d{yyyy-MM-dd}.%i.log为例(mutest.2019-07-28.0.log),有这么几个部分:
    • ${logFile}:固定文件名称前缀,这里是引用了<property>中设置的变量。
    • %d{yyyy-MM}:指定日志名称中间日期的格式,如果只有%d,将默认使用yyyy-MM-dd格式。
    • %i:当日志量过大,导致同一天生成两个及以上日志文件时,这个属性将为日志名称加一个索引作为后缀,以加以区分。
    • .log.zip:指定存档日志文件的压缩格式。

还有几个属性,要根据滚动策略去添加:

  • <maxFileSize>:这是活动文件的大小,SizeAndTimeBasedRollingPolicy策略和SizeBasedTriggeringPolicy策略下必须有。默认值是10MB。超过这个大小,就要生成新的活动文件了。
  • <maxHistory>:可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且<maxHistory>是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删。
  • <totalSizeCap>:可选节点,表示日志文件总大小超过1GB将删除存档日志文件。

2.5 logger

logger节点,可选节点,作用是指明具体的包或类的日志输出级别,以及要使用的<appender>(可以把<appender>理解为一个日志模板)。

一个典型的logger节点如下:

<!-- name 属性表示匹配的logger类型前缀 -->  
<logger name="com.mutest.demo">  
    <level value="INFO" />  
    <!-- 引用的appender,类似于spring的ref -->  
    <appender-ref ref="fileLog" />  
    <appender-ref ref="STDOUT" /> 
</logger>  
  • name:必写属性,指定具体包或类,被指定的包或类中的日志输出将遵从该logger规定配置。
  • level:非必写属性,指定日志输出级别,该级别将覆盖root配置的输出级别。
  • addtivity:非必写属性,是否向上级loger传递打印信息。默认是true。
  • appender-ref:引用的appender,引用后将实现appender中定义的行为,例如上面示例中引用了fileLog这个appender,那么com.mutest.demo中打印的日志将按fileLog的配置进行记录。一个logger可以有多个引用,互不影响。

3 更多情形

3.1 日志级别

logback有5种级别,分别是TRACE < DEBUG < INFO < WARN < ERROR,定义于ch.qos.logback.classic.Level类中。

  • Trace:是追踪,就是程序推进一下,你就可以写个trace输出,所以trace应该会特别多,一般不会设置到这个级别。
  • Debug:指出细粒度信息事件对调试应用程序是非常有帮助的。
  • Info:消息在粗粒度级别上突出强调应用程序的运行过程。
  • Warn:输出警告及warn以上级别的日志。
  • Error:输出错误信息日志.

此外OFF表示关闭全部日志,ALL表示开启全部日志。

那么,在logback中,日志级别如何设置呢?

首先,<root>中可以设置日志级别,如果不设置,root logger默认级别是DEBUG。

 <root level="info"></root>

其次,logger中可以设置日志级别,设置后将覆盖<root>的设置,不设置将继承<root>的日志级别

<logger name="com.mutest" level="error" additivity="false">
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="fileLog"/>
</logger>

另外,还可以在配置文件中设置更加具体的日志级别,例如将com.mutest.controller包下所有的日志输出级别设置为info,那么即使logger中,设置为error级别,日志仍然输出。

logging:
  config: classpath:logback.xml
  level:
    com.mutest.controller: info

3.2 日志滚动

如果不设置日志滚动策略,那么会一直向一个文件中追加日志,日志文件会越来越大,想要查找有用信息会很慢,而且有占满磁盘的风险。所以,我们要设置滚动策略,即满足一定条件,生成一个新文件,而旧日志文件进行归档。

3.2.1 时间策略

以时间周期为切分条件,<rollingPolicy>的class要设置为ch.qos.logback.core.rolling.TimeBasedRollingPolicy,一个典型示例(每天生成一个日志文件,保存30天的日志文件)如下:

<configuration> 
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> 
      <maxHistory>30</maxHistory>
    </rollingPolicy> 
    <encoder> 
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
    </encoder> 
  </appender> 
 
  <root level="DEBUG"> 
    <appender-ref ref="FILE" /> 
  </root> 
</configuration>
  • fileNamePattern:必要节点,包含文件名及“%d”转换符,“%d”可以包含一个java.text.SimpleDateFORMat指定的时间格式,如:%d{yyyy-MM}。如果直接使用 %d,默认格式是 yyyy-MM-dd。
  • maxHistory:日志最大保存的日期。比如如果你设置的pattern是按天算的,那么设置maxHistory为30,那么会自动删除30天之前的日志。
  • totalSizeCap:日志最大保存的大小。当超过该值,会自动删除老的日志文件。必须和maxHistory一起使用,而且maxHistory先生效,其次是判断是否达到totalSizeCap。
  • cleanHistoryOnStart:默认false。如果设置为true,再项目启动的时候会自动删除老的日志文件。

3.2.2 文件大小策略

以文件大小为切分条件,<rollingPolicy>的class要设置为ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy,一个典型示例(活动日志文件大小超过30M则生成新的活动日志文件)如下:

<configuration> 
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
      <fileNamePattern>logFile.%d{yyyy-MM-dd}.%i.log</fileNamePattern>  
      <maxFileSize>30MB</maxFileSize>
    </rollingPolicy> 
    <encoder> 
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
    </encoder> 
  </appender> 
 
  <root level="DEBUG"> 
    <appender-ref ref="FILE" /> 
  </root> 
</configuration>

要注意的是,<fileNamePattern>中,%i必须要有,如果同一天产生多个归档日志文件,%i会产生一个后缀加以区分。例如mutest.2019-07-28.0.log 和 mutest.2019-07-28.1.log。

3.2.3 时间与文件大小策略

根据日志文件大小和时间周期作为切分条件,满足其中任意一个就要做切分。<rollingPolicy>的class要设置为ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy,一个典型示例如下:

<configuration> 
  <appender name="fileLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>mutest.log</file>
        <encoder>
            <pattern>%d [%thread] %-5level -[%file:%line]- %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${logFile}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>${maxFileSize}</maxFileSize>
        </rollingPolicy>
    </appender>
 
  <root level="DEBUG"> 
    <appender-ref ref="FILE" /> 
  </root> 
</configuration>

同样,<fileNamePattern>中必须有%i。

3.3 日志过滤

首先,了解一下,日志级别从低到高分为:

TRACE < DEBUG < INFO < WARN < ERROR < FATAL

有时候,我们需要对日志进行过滤,logback提供了多种过滤规则的实现。

3.3.1 LevelFilter

比如说,日志级别为info以上,但我们不想打印warn类型的日志,那么按照下面的配置做:

<filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>warn</level>
    <onMatch>DENY</onMatch>
    <onMismatch>ACCEPT</onMismatch>
</filter>

几个参数的含义:

  • ch.qos.logback.classic.filter.LevelFilter:过滤规则。这里是根据日志级别进行匹配。
  • level:要匹配的日志级别。
  • <onMatch>DENY</onMatch>:匹配到的日志会被拒绝。
  • <onMismatch>ACCEPT</onMismatch>:未匹配到的日志会被打印。

3.3.2 ThresholdFilter

除了 ch.qos.logback.classic.filter.LevelFilter外,还有一种过滤策略:ThresholdFilter。即临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。

比如,设置只打印info级别以上的日志:

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>info</level>
</filter>
 

3.3.3 EvaluatorFilter

EvaluatorFilter是求值过滤器,评估、鉴别日志是否符合指定条件。

<filter class="ch.qos.logback.core.filter.EvaluatorFilter">         
  <evaluator> <!-- 默认为 ch.qos.logback.classic.boolex.JaninoEventEvaluator -->   
    <expression>return message.contains("success");</expression>
  </evaluator>   
  <OnMatch>ACCEPT</OnMatch>  
  <OnMismatch>DENY</OnMismatch>  
</filter>   

属性释义:

  • <evaluator>: 鉴别器,常用的鉴别器是JaninoEventEvaluato,也是默认的鉴别器,它以任意的Java布尔值表达式作为求值条件,求值条件在配置文件解释过成功被动态编译,布尔值表达式返回true就表示符合过滤条件。evaluator有个子标签<expression>,用于配置求值条件。
  • <onMatch>:用于配置符合过滤条件的操作,ACCEPT或DENY
  • <onMismatch>:用于配置不符合过滤条件的操作,ACCEPT或DENY

3.4 与配置文件结合

Spring Boot项目的配置文件有 application.properties 文件和 application.yml 文件两种,而我个人比较喜欢用 yml 文件。

application.yml 文件中对日志的配置:

logging:
  config: logback.xml
  level:
    com.example.demo.dao: trace
  • logging.config 用来指定项目启动的时候,读取哪个配置文件,这里指定的日志配置文件是根路径下的 logback.xml 文件。关于日志的相关配置信息,都放在了 logback.xml 文件中。
  • logging.level 用来指定具体的 Mapper 中日志的输出级别,上面的配置表示 com.example.demo.dao 包下的所有 Mapper 日志输出级别为 Trace,会将操作数据库sql 打印出来。开发时设置成 trace 方便定位问题,在生产环境上,将这个日志级别再设置成 error 级别即可。
  • 常用的日志级别按照从高到低依次为:ERROR、WARN、INFO、DEBUG。

 到此这篇关于SpringBoot3集成SLF4J+logback进行日志记录的实现的文章就介绍到这了,更多相关SpringBoot3 SLF4J logback日志内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot3集成SLF4J+logback进行日志记录的实现

本文链接: https://lsjlt.com/news/163412.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot3集成SLF4J+logback进行日志记录的实现
    目录1 快速实现2 配置xml2.1 configuration2.2 property和springProperty2.3 root2.4 appender2.4.1 Consol...
    99+
    2024-04-02
  • SpringBoot3如何集成SLF4J+logback进行日志记录
    这篇文章主要为大家展示了“SpringBoot3如何集成SLF4J+logback进行日志记录”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot3如何集成SLF4J+logbac...
    99+
    2023-06-28
  • 详解Spring Boot实现日志记录 SLF4J
    在开发中打印内容,使用 System.out.println() 和 Log4j 应当是人人皆知的方法了。 其实在开发中我们不建议使用 System.out 因为大量的使用 System.out 会增加资源的消耗。 而Log4j 更为灵活在...
    99+
    2023-05-31
    spring boot slf4j
  • 如何自Spring Boot中使用Logback对日志进行记录
    这期内容当中小编将会给大家带来有关如何自Spring Boot中使用Logback对日志进行记录,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。为了测试我们新建两个类package com.xia...
    99+
    2023-05-31
    springboot logback
  • Springboot使用Logback实现日志配置与异常记录
    目录概述logback配置详解logback配置异常情况概述 默认情况下,SpringBoot内部使用logback作为系统日志实现的框架,将日志输出到控制台,不会写到日志文件。如果...
    99+
    2022-11-21
    Springboot Logback 日志配置 Springboot Logback异常记录 Springboot Logback
  • golang函数的错误处理与日志记录的集成
    go 中的错误处理与日志记录集成包括:使用 error 类型表示错误,提供错误的字符串表示。使用 log 包进行日志记录,提供标准化的日志级别和记录消息的函数。使用 errors.wra...
    99+
    2024-04-25
    golang 错误处理 日志记录
  • Spring boot2.0 实现日志集成的方法(2)
    目录前言:logback.xml配置文件定义引用自定义logback.xml文件附加说明前言: 上一章Spring boot2.0 日志集成方法分享(1)讲解了s...
    99+
    2024-04-02
  • Spring boot2.0 实现日志集成的方法(3)
    目录前言具体实现定义日志注解定义日志切面基本使用输出信息总结前言 上一章Spring boot2.0 实现日志集成的方法(2)主要讲解了将日志信息根据类别输出到不...
    99+
    2024-04-02
  • 二维码和日志记录:如何在Go和Spring框架中实现无缝集成?
    二维码和日志记录是现代应用程序中常见的两个功能。二维码可以用于识别物品或链接到特定的网站,而日志记录则可以帮助开发人员跟踪应用程序中的错误和异常。在本文中,我们将讨论如何在Go和Spring框架中实现无缝集成二维码和日志记录。 Go是一种...
    99+
    2023-08-19
    spring 日志 二维码
  • 如何使用ActionFilterAttribute实现API日志的记录
    本篇内容主要讲解“如何使用ActionFilterAttribute实现API日志的记录”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用ActionFil...
    99+
    2024-04-02
  • springboot 实现记录业务日志和异常业务日志的操作
    日志记录到redis展现形式 1.基于注解的方式实现日志记录,扫描对应的方法实现日志记录 @Inherited @Retention(RetentionPolicy.RUN...
    99+
    2024-04-02
  • 解析springboot集成AOP实现日志输出的方法
    开发接口系统中主要的一环就是日志输出,如果系统出现问题,日志能帮我们去定位问题,最常见的日志是调用方 所调用的IP 接口地址 对应方法 参数值 以及接口方接收到请求 所返回的参数。如...
    99+
    2024-04-02
  • Golang开发建议:如何进行高效的日志记录和分析
    Golang开发建议:如何进行高效的日志记录和分析引言:日志记录在软件开发中起着至关重要的作用。它不仅可以帮助我们追踪和解决问题,还可以为后续的优化和改进提供有价值的数据支持。本文将介绍如何使用Golang进行高效的日志记录和分析,帮助开发...
    99+
    2023-11-22
    分析 Golang 日志记录
  • 如何在PHP API中实现高效的日志记录?
    PHP API是Web应用程序的核心部分,它们允许应用程序与其他服务进行通信。在开发Web应用程序时,日志记录是一个非常重要的方面。通过日志记录,您可以追踪应用程序中发生的事件,从而更好地了解应用程序的运行状况,并找到潜在的问题。本文将介绍...
    99+
    2023-10-08
    api 日志 编程算法
  • 如何在PHP API中实现可靠的日志记录?
    PHP是一种广泛使用的服务器端编程语言,很多应用程序都使用PHP来实现。在应用程序中,日志记录是非常重要的,因为它可以帮助开发人员识别和解决问题。在本文中,我们将讨论如何在PHP API中实现可靠的日志记录。 为什么需要日志记录? 在应用程...
    99+
    2023-10-08
    api 日志 编程算法
  • 如何在Go中实现Spring框架的日志记录?
    Spring框架是Java开发中非常流行的框架之一,它提供了许多功能和组件来简化开发过程。其中,日志记录是一个非常重要的功能,它可以帮助开发人员更好地了解应用程序的运行情况,并及时发现和解决问题。在Go语言中,我们也可以实现类似于Spri...
    99+
    2023-08-19
    spring 日志 二维码
  • Golang开发注意事项:如何进行有效的错误日志记录
    随着Golang的普及和应用范围的扩大,越来越多的开发者开始选择使用Golang来实现各种应用程序。在开发过程中,错误处理和日志记录是不可避免的部分。良好的错误处理和日志记录是保障应用程序稳定性和可靠性的重要手段。本文将介绍如何在Golan...
    99+
    2023-11-22
  • 如何利用Java技术实现高效的日志记录?
    在现代软件开发中,日志记录是必不可少的一部分。它可以帮助开发人员快速定位错误,并且为系统的运行情况提供有价值的信息。在Java技术中,有很多方式可以实现日志记录。本篇文章将介绍如何利用Java技术实现高效的日志记录。 一、使用Java自带的...
    99+
    2023-09-05
    日志 开发技术 分布式
  • 怎么使用Aop的方式实现自动日志记录
    本篇内容介绍了“怎么使用Aop的方式实现自动日志记录”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用Aop的方式实现自动日志记录自动日志记...
    99+
    2023-06-30
  • 使用Spring MVC拦截器实现日志记录的方法
    最近在研究Spring MVC拦截器,那么今天也算个学习笔记吧!有需要了解使用Spring MVC拦截器实现日志记录的朋友可参考。希望此文章对各位有所帮助。  定义一个类实现HandlerInterceptor,比如: ...
    99+
    2023-05-31
    springmvc 拦截器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作