首页 > 其他分享 >SLF4J 日志框架与 SpirngBoot

SLF4J 日志框架与 SpirngBoot

时间:2023-07-14 14:56:57浏览次数:30  
标签:logging 框架 SLF4J slf4j 日志 logback SpirngBoot

SLF4J 是一个相对成熟的日志框架, 它基于外观模式(门面模式)实现了插拔式的日志实现替换功能, 而且还提供了其他日志框架的迁移方案。

迁移方案

目的 依赖库 备注
将 Apache Commons Logging 框架打印的日志桥接至 SLF4J 框架 jcl-over-slf4j 需要在构建工具中排除 jcl 的依赖
将 java.util.logging 框架打印的日志派发至 SLF4J 框架 jul-to-slf4j 需要调用 SLF4JBridgeHandler.removeHandlersForRootLogger(); 卸载 jul 中默认的 ConsoleHandler, 并且调用 SLF4JBridgeHandler.install(); 来注册 SLF4JBridgeHandler
将 log4j2 日志实现打印的日志桥接至 SLF4J 框架 log4j-over-slf4j 需要在构建工具中排除 log4j2 的依赖
将 Java Platform Logging 框架打印的日志派发至 SLF4J 框架 slf4j-jdk-platform-logging
基于 OSGI 的 SLF4J osgi-over-slf4j (没有遇到过 OSGI 的使用场景, 这个了解的不多)

日志实现

日志实现 依赖库 备注
logback logback-classic
log4j2 log4j-slf4j2-impl 由 apache 提供
log4j1 / 已弃用, 由于 log4j1 仍然存在一些安全漏洞, 因此推荐使用 reload4j 来代替 log4j1
reload4j slf4j-reload4j reload4j 是一个基于 log4j1 的分支实现, 它修复了 log4j1 中存在的已知安全漏洞
jul slf4j-jdk14 不要和 jul-to-slf4j 同时使用
slf4j-simple slf4j-simple 向标准输出流或文件进行输出的简单日志功能实现
slf4j-nop slf4j-nop 直接丢弃日志, 不进行任何记录操作

实现原理

slf4j-api 2.0 之前是通过反射获取固定的 Class 来实现与日志实现库绑定的,在 2.0 中 SLF4J 的这个机制替换为了 SPI,因此在 2.0 之前日志实现库被称作 binding 而在 2.0 及以后日志实现库被称作 provider。

与 Spring 的集成

SpirngFramework 中主要使用的是一个基于 jcl 简化的日志框架: spring-jcl, 它通过检查 classpath 下的相关 Class 来实现与 SLF4J、log4j2 或 JUL 的绑定,在 SpringBoot 中也提供了使用 logback(slf4j-api) 来作为日志实现的 spring-boot-starter-logging。

配置

SpringBoot 中通过 org.springframework.boot.context.logging.LoggingApplicationListener#initializeSystem 来委派给对应的日志系统来完成配置,如: org.springframework.boot.logging.logback.LogbackLoggingSystem#initialize -> org.springframework.boot.logging.AbstractLoggingSystem#initializeWithConventions 来完成日志系统的配置, 它会按照以下顺序进行配置:

  1. 加载 logback-test.xml、logback.xml 进行配置, 否则执行下一步
  2. 加载 logback-test-spring.xml、logback-spring.xml 进行配置, 否则执行下一步
  3. 进行编程式的默认配置

在 logback 的编程式默认配置是通过 org.springframework.boot.logging.logback.DefaultLogbackConfiguration#apply 来完成的, 通过代码可以看到系统中默认添加了一个向控制台输出的 consoleAppender, 并且会根据对配置文件中的 logging.file.namelogging.file.path 属性的判断添加一个使用 SizeAndTimeBasedRollingPolicy 的 fileAppender

SpringBoot 中 root logger 的默认打印级别是 info, 可以在配置文件中通过 logging.level.root 属性修改其日志级别。SpringBoot 中还提供了 logger 分组功能, 默认有 web, sql 两个分组, 因此也可以通过 logging.level.web 和 logging.level.sql 修改相关 logger 的日志级别。

SpringBoot 中默认配置的两个 appender 基本可以满足大多数的使用需求, 因此推荐通过 Spring 配置文件或者编程式微调相关配置是最便捷的使用方案。

标签:logging,框架,SLF4J,slf4j,日志,logback,SpirngBoot
From: https://www.cnblogs.com/xtyuns/p/17553704.html

相关文章

  • WiredTiger引擎的日志和检查点机制
    每个数据库系统都要确保持久性和可靠性。MongoDB使用journal和检查点来每个数据库系统都必须确保持久性和可靠性。MongoDB使用Journals和Checkpoints完成WAL(Write-Ahead-Logging)。从最基本的开始,为什么首先需要WAL?这是为了确保我们的数据在每次写操作之后都是持久的,并且在不......
  • 日志
    目录日志轮转访问权限日志轮转1、项目的日志需要考虑日志轮转,不然可能会把磁盘空间打爆。设置单个文件大小100MB,最大文件数量10个,每小时转储一次等等。访问权限linux/unix系统上的文件和文件夹需要设置相应的访问权限,符合安全规范:程序文件目录-------550(r-xr-x---)配置文......
  • 遇到问题一定要学会看日志
    如果你生病了到医院,医生首先会问你哪里不舒服,然后通过你的描述来确认病情,如果还无法确认就得让你去验血或者拍片。最后根据结果来进一步确认你到底有什么病。这个道理大家都明白,其实作为一个运维人,服务器在我们眼里就是我们的病人,而我们就是给它看病的医生。如何确认病情?我们自然......
  • 发送请求忘记指定协议方式,日志com.jcraft.jsch.JSchException: java.net.ConnectExcep
      2023-07-1319:06:51.487-ERROR17629---[http-nio-192.168.2.206-36093-exec-8]c.t.b.p.b.c.common.util.sftp.SftpPool:com.jcraft.jsch.JSchException:java.net.ConnectException:拒绝连接(Connectionrefused)_atcom.jcraft.jsch.Util.createSocket(......
  • Kubernetes轻量级日志工具Loki安装及踩坑记录
    Loki简介Loki是Grafana出品的一个轻量级日志系统,熟悉ELK的都知道ELK使用起来的成本,而且仅仅是日志检索使用ELK的话有点大材小用了。Loki8技术栈中使用了以下组件。Promtail用来将容器日志发送到Loki或者Grafana服务上的日志收集工具,该工具主要包括发现采集目标以及给日志......
  • expect 保存日志文件
    1.$expect_out(buffer)这种方式需要注意不能在shell嵌套expect的情况下使用,因为在这种情况下expect脚本中的$xx变量会被解析成shell部分传入的参数,无法起到原本在expect脚本下的作用。其次,$expect_out(buffer)需要和send内容在两个不同的expect循环中出现。#!/bin/expectse......
  • 如何实现怎样实时监测Android系统打印的日志信息的具体操作步骤
    怎样实时监测Android系统打印的日志信息在开发Android应用程序的过程中,日志信息是非常重要的调试工具。通过日志信息,我们可以了解应用程序的运行状态、错误信息以及其他关键信息。为了更好地调试和分析应用程序的日志信息,我们可以实时监测Android系统打印的日志信息。本文将介绍如......
  • 企业网络日志分析的关键利器【EventLog Analyzer】
    在数字化时代,企业网络的安全和运维管理变得至关重要。随着企业规模的扩大和信息系统的复杂化,网络日志分析成为了不可或缺的一环。EventLogAnalyzer(以下简称EventLogAnalyzer)作为一款强大的日志分析工具,为企业提供了关键的功能和洞察力,帮助其实现网络安全的保护和高效的运维管理。......
  • MySql开启日志 --记录每条执行的SQL语句
    --第一条SETGLOBALlog_output='TABLE';SETGLOBALgeneral_log='ON';--在重启mysql重启Mysql详情请看:(10条消息)如何重启MySQL,正确启动MySQL_mysqlrestart_wuyepiaoxue789的博客-CSDN博客--重启完成之后可以去数据库`Mysql`中的general_log表里查看,也可以执行一下的......
  • journalctl 清理journal日志
    在CentOS7开始使用的systemd使用了journal日志,这个日志的管理方式和以往使用syslog的方式不同,可以通过管理工具维护。使用df-h检查磁盘文件,可以看到/run目录下有日志目录/run/log/journal,占用了数G空间FilesystemSizeUsedAvailUse%Mountedon/dev/mapper......