首页 > 其他分享 >logback

logback

时间:2023-08-11 13:44:25浏览次数:56  
标签:logging log logback https 日志 com

Logback、Log4J、JUL 都是日志框架,而 SLF4J、commons-logging(日志门面)可以认为是这些日志框架的统一接口。

2023-08-11-102421

想要通过日志门面调用日志框架,就需要使用桥接器:

2023-08-11-03315

使用日志门面

导入依赖:

<!-- logback-classic 就是桥接器,这个包会自动引入 slf4j-api 包 -->
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.3.11</version>
    <scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.7</version>
</dependency>

Java 中的写法:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private final Logger logger = LoggerFactory.getLogger(Object.class);

logback 配置

Spring Boot 建议使用 logback-spring.xml 而不是 logback.xml,因为 Spring Boot 会对 Logback 进行扩展,可以进行高级配置。

<?xml version="1.0" encoding="UTF-8"?>
<!--
scan:当此属性设置为 true 时,配置文件如果发生改变,将会被重新加载。
scanPeriod:每隔多长时间检测一遍文件是不是被修改了
-->
<configuration scan="true" scanPeriod="10 seconds">

    <!-- Spring Boot 对 Logback 的扩展,第一种扩展 -->
    <springProfile name = "staging" >
        <!-- 当 staging 环境激活时 -->
    </springProfile>
    <springProfile  name = "dev | staging" >
        <!-- 当 dev 或 staging 环境激活时 -->
    </springProfile>
    <springProfile  name = "!production" >
        <!-- 当 production 环境没有激活时 -->
    </springProfile>

    <!--
    Spring Boot 对 Logback 的扩展,第二种扩展
    从 Spring Environment 中读取 myapp.fluentd.host 属性值保存到 fluentHost 中,后续可以直接使用 fluentHost。
    -->
    <springProperty scope="context" name="fluentHost" source="myapp.fluentd.host" defaultValue="localhost"/>

    <!-- 
    自定义属性
    ${}:如果没有自定义属性或者没有使用 Logback 的扩展,那么这个就是获取系统属性,System.setProperty("", "");
    -->
    <property name="k1" value="${fluentHost}"/>
    
    <property name="log.path" value="/logs" />

    <!-- %d{HH:mm:ss.SSS} %-5level [%t] %class.%method Line:%-3L - %msg%n -->
    <!-- %d{HH:mm:ss.SSS} %-5level [%thread] %logger{200} - %msg%n -->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS,GMT+8} %-5level [%thread] %logger{200} - [%method,%line] - %msg%n" />

    <!-- 将日志输出到控制台 -->
    <appender name="唯一名称1" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log.pattern}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 将日志滚动输出到文件 -->
    <appender name="唯一名称2" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤级别 -->
            <level>ERROR</level>
            <!-- 匹配到就允许 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 匹配不到就禁止 -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 将日志输出到这个文件 -->
        <file>${log.path}/文件名.log</file>
        <!-- 追加日志 -->
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 归档的文件路径和文件名,将下面的 fileName 改为文件路径和文件名 -->
            <fileNamePattern>${log.path}/文件名.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <!--
            单个归档日志文件的大小
            当 <file> 配置的文件超过了 <maxFileSize> 值后,会将日志保存到 <fileNamePattern> -->
            <maxFileSize>2GB</maxFileSize>
            <!-- 单个归档日志保留的最大天数,超过这个数量后,会删除之前的文件 -->
            <maxHistory>7</maxHistory>
            <!--
            归档日志文件总大小,超过这个数量后,会删除之前的文件
            <maxHistory> + <totalSizeCap> = 归档日志保留 7 天内,但是最多 20GB 大小
            -->
            <totalSizeCap>7GB</totalSizeCap>
            <!-- 在启动的时候清理归档日志 -->
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>

        <encoder>
            <pattern>${log.pattern}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 日志异步输出 -->
    <appender name="async-唯一名称1" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 队列快满的时候,也要保留所有级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 阻塞队列的最大容量 -->
        <queueSize>1024</queueSize>
        <!-- 当队列满了后,不会向队列中继续添加所有级别的日志,而是丢弃这些日志 -->
        <neverBlock>true</neverBlock>
        <appender-ref ref="唯一名称1"/>
    </appender>

    <!-- 指定包或类的日志级别 -->
    <logger name="包名+类名" additivity="false" level="INFO">
        <!-- 关联 <appender> 的 name -->
        <appender-ref ref="唯一名称1"/>
        <appender-ref ref="xxx"/>
    </logger>

    <!-- <root> 是必须的,没有满足的 <logger> 都会使用 <root> -->
    <root level="INFO">
        <appender-ref ref="唯一名称1"/>
    </root>
</configuration>

也可通过配置文件设置日志级别:

logging:
  level:
    org.springframework: warn

下面是一些常见的日志级别:

<logger name="org.mybatis" additivity="false" level="DEBUG">
    <appender-ref ref="console"/>
</logger>

<logger name="org.apache.ibatis.datasource" additivity="false" level="DEBUG">
    <appender-ref ref="console"/>
</logger>

<logger name="druid.sql.Statement" additivity="false" level="debug">
    <appender-ref ref="console"/>
</logger>

<logger name="com.alibaba.druid.filter.stat.StatFilter" additivity="false" level="error">
    <appender-ref ref="console"/>
</logger>

参考资料

https://howtodoinjava.com/spring-boot2/logging/profile-specific-logging/

https://logback.qos.ch/manual/appenders.html

https://blog.51cto.com/u_15067232/4283028

https://howtodoinjava.com/logback/rollingfileappender/

https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.logging.logback-extensions

https://www.baeldung.com/java-lang-unsupportedclassversion

https://stackoverflow.com/questions/47457105/class-has-been-compiled-by-a-more-recent-version-of-the-java-environment

标签:logging,log,logback,https,日志,com
From: https://www.cnblogs.com/jnyyxz/p/17622354.html

相关文章

  • 利用Spring boot+LogBack+MDC实现链路追踪
    这篇文章主要介绍了利用Spring boot+LogBack+MDC实现链路追踪,MDC 可以看成是一个与当前线程绑定的哈希表,可以往其中添加键值对,下文详细介绍需要的小伙伴可以参考一下  MDC介绍API说明MDC使用1.拦截器2.工具类MDC存在的问题子线程日志打印丢失traceIdHTTP调用丢......
  • 基于SpringBoot应⽤的logback⽇志配置
    SpringBoot默认整合了logback-classic⽇志框架,我们需要对logback⽇志框架进⾏配置以⾃定义⽇志输出格式、⽇志⽂件配置、⽇志⽂件保存策略等信息<?xmlversion="1.0"encoding="UTF-8"?><configuration><appendername="stdout"class="ch.qos.logback.core.ConsoleA......
  • logback模板配置及其使用(Stringboot)
    日志模板<?xmlversion="1.0"encoding="UTF-8"?><configurationscan="true"scanPeriod="60seconds"debug="false"><propertyname="service.name"value="xxxx"/>&l......
  • java日志脱敏(密码/身份证/其他自定义等)logback
    java日志脱敏(密码/身份证/其他自定义等)logback原文链接:https://blog.csdn.net/weixin_39286166/article/details/126889660一.脱敏规则类 importch.qos.logback.classic.pattern.MessageConverter;importch.qos.logback.classic.spi.ILoggingEvent;importorg.apache.c......
  • springboot logback 配置文件 自定义logback配置文件
    logging:level:#配置全部的调试级别#root:trace#配置具体包路径下的调试级别com.example.springboot03:tracepattern:#默认控制台输出格式console:'%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-ddHH:mm:ss.SSSXXX}}){faint}%clr(${LOG_......
  • java pom引入logback配置
    Java使用Pom引入logback配置导言在Java开发中,我们经常需要使用日志来记录系统的运行情况。logback是一个使用广泛的Java日志框架,它提供了强大的日志功能和灵活的配置选项。本文将介绍如何使用Pom引入logback配置,让刚入行的小白快速上手。步骤概览步骤操作1创建Maven......
  • SLF4J: Class path contains multiple SLF4J bindings报错,logback-classic.jar与slf4j
    1.问题:控制台一直报错: 1SLF4J:ClasspathcontainsmultipleSLF4Jbindings.2SLF4J:Foundbindingin[jar:file:/logback-classic/1.1.11/logback-classic-1.1.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]3SLF4J:Foundbindingin[jar:file:/slf4j/slf4j-log......
  • SpringBoot项目从0到1配置logback日志打印
    大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。以下是正文!一、写文背景我们在写后端项目的时候,日志打印是必需的。支持SpringBoot项目的日志框架一般有log4j、logback,这二者各有优......
  • logback
    1.logback是什么?  Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback-classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4JAPI使你可以......
  • Logback SiftingAppender 使用
    1、简介SiftingAppender可根据给定的运行时属性将日志分离或筛选。例如,SiftingAppender可以根据用户会话将日志事件分开,以便不同用户生成的日志进入不同的日志文件,每个用户一个日志文件。SiftingAppender有两个属性:timeoutSiftingAppender会关闭并取消引用超时(连续多长时......