【日常记录-Java】应用引入Slf4J

1. 简介

        SLF4J(Simple Logging Facade for Java) 是Java的一个简单日志门面,为Java日志访问提供了一套标准、规范的API框架。而具体日志的实现则可以根据这套接口去实现具体的日志框架,以便将来需要更换日志框架时,只替换实现框架即可。常见的具体实现有JUL、log4j、logback、log4j2等。

2. 操作

  2.1 引入依赖

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>2.0.16</version>
</dependency>
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.5.8</version>
</dependency>

  2.2 配置日志实现

        对于Logback,通常在类路径下(如src/main/resources目录)创建一个名为logback-config.xml配置文件,在其中定义日志记录级别、格式、输出目的地等。

<?xml version="1.0" encoding="UTF-8"?>  
<configuration scan="true" scanPeriod="60 seconds" debug="false">  <!-- 工程名/项目名 -->  <contextName>project_name</contextName>  <!-- 把>=debug的日志输出到控制台 -->  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  <encoder>  <pattern>%-4relative %date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</pattern>  <charset>UTF-8</charset></encoder>  </appender>  <!-- 系统日志输出到文件,并设置滚动策略 -->  <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">  <file>logs/info.log</file>  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  <fileNamePattern>logs/info.%d{yyyy-MM-dd}.log</fileNamePattern>  <maxHistory>30</maxHistory>  </rollingPolicy>  <encoder>  <pattern>%-4relative %date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>  <charset>UTF-8</charset></encoder>  <filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>DENY</onMatch><onMismatch>ACCEPT</onMismatch></filter></appender>  <!-- 错误日志输出到文件,并设置滚动策略 -->  <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">  <file>logs/error.log</file>  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  <fileNamePattern>logs/error.%d{yyyy-MM-dd}.log</fileNamePattern>  <maxHistory>30</maxHistory>  </rollingPolicy>  <encoder>  <pattern>%-4relative %date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>  <charset>UTF-8</charset></encoder>  <filter class="ch.qos.logback.classic.filter.LevelFilter">  <level>ERROR</level>  <onMatch>ACCEPT</onMatch>  <onMismatch>DENY</onMismatch>  </filter>  </appender>  <!-- 根日志级别控制,并引用所有appender -->  <root level="INFO">  <appender-ref ref="STDOUT"/>  <appender-ref ref="INFO_FILE"/>  <appender-ref ref="ERROR_FILE"/>  </root>  
</configuration>

2.3 启用配置并使用

import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.joran.spi.JoranException;
import ch.qos.logback.core.util.StatusPrinter2;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.InputStream;public class Main {public static void main(String[] args){// step1: 使用配置文件完成配置LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();try {InputStream configStream = Main.class.getClassLoader().getResourceAsStream("logback-config.xml");if (configStream == null) {throw new RuntimeException("Could not find logback-config.xml");}JoranConfigurator configurator = new JoranConfigurator();configurator.setContext(context);context.reset();configurator.doConfigure(configStream);new StatusPrinter2().printInCaseOfErrorsOrWarnings(context);} catch (JoranException je) {throw new RuntimeException(je);}// step2: 进行日志记录Logger log = LoggerFactory.getLogger(Main.class);log.info("this is a logger!");}
}

3. SLF4J的优势

  • 解耦:SLF4J将应用程序和日志记录框架分离,从而编写独立于日志记录框架的应用程序;
  • 灵活性:由于SLF4J提供了对各种日志框架的绑定与桥接,可以灵活地切换日志框架;
  • 易用性:SLF4J的API设计简洁明了,易于学习和使用;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/883728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十四章 章节练习echarts饼图渲染

目录 一、引言 二、完整代码 三、总结 一、引言 通过前面几个章节的学习&#xff0c;再结合日常项目中经常会使用到的echarts图&#xff0c;来完整以下功能需求&#xff0c;增强对知识点的巩固&#xff1a; 1. 基本渲染 2. 添加功能 3. 删除功能 4. 饼图渲染 运行效果图…

深入探讨全流量回溯分析与网络性能监控系统

AnaTraf 网络性能监控系统NPM | 全流量回溯分析 | 网络故障排除工具 随着数据量的急剧增加&#xff0c;传统的网络监控手段面临诸多挑战。在此背景下&#xff0c;全流量回溯分析和网络性能监控系统成为了保障网络正常运作的重要工具。本文将围绕这两个关键词&#xff0c;探讨它…

Python 深度学习简单介绍

文章目录 常用的深度学习框架1. TensorFlow2. PyTorch3. Keras4. MXNet 安装深度学习框架深度学习基础示例深度学习资源注意事项 Python 是一种高级编程语言&#xff0c;因其简洁的语法、丰富的库和社区支持&#xff0c;成为深度学习领域的主流编程语言。深度学习是一种机器学习…

厨艺爱好者的在线互动平台:Spring Boot实现

摘 要 使用旧方法对厨艺交流信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在厨艺交流信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次开发的厨艺交流平台功能…

WUP-MY-POS-PRINTER 旻佑热敏打印机票据打印uniapp插件使用说明

插件地址&#xff1a;WUP-MY-POS-PRINTER 旻佑热敏打印机票据打印安卓库 简介 本插件主要用于旻佑热敏打印机打印票据&#xff0c;不支持标签打印。适用于旻佑的各型支持票据打印的热敏打印机。本插件开发时使用的打印机型号为MY-805嵌入式面板打印机&#xff0c;其他型号请先…

2006-2023年各地级市债务余额数据

2006-2023年各地级市债务余额数据 1、时间&#xff1a;2006-2023年 2、来源&#xff1a;整理自wind 3、指标&#xff1a;地区、地方政府债-债券数量(只)、地方政府债-债券余额(亿)、地方政府债-债券余额占比(%)、城投债-债券数量(只)、城投债-债券余额(亿)、城投债-债券余额…

CentOS7安装Docker-2024

CentOS7安装Docker-2024 安装 更新yum仓库&#xff1a; yum -y update安装yum-utils并配置阿里云的docker仓库和相关插件&#xff1a; sudo yum install -y yum-utilsyum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum i…

121.WEB渗透测试-信息收集-ARL(12)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;120.WEB渗透测试-信息收集-ARL&#xff08;11&#xff09; 点击管理控制台 连接成功&…

Java | Leetcode Java题解之第513题找树左下角的值

题目&#xff1a; 题解&#xff1a; class Solution {public int findBottomLeftValue(TreeNode root) {int ret 0;Queue<TreeNode> queue new ArrayDeque<TreeNode>();queue.offer(root);while (!queue.isEmpty()) {TreeNode p queue.poll();if (p.right ! nu…

w005基于Springboot学生心理咨询评估系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

NOIP-2022 题解

T1 一眼是计数类的题目&#xff0c;那就要思考怎么计数了 这道题目还是很简单的 类似于动态规划&#xff0c;只要找到转移的方法就行了&#xff0c;从哪里可以做出来 首先 , 先考虑 C 因为 F 是 C 下边随便加一个点 , 所以只要求出 C 就求出了 F 。 首先, 先考虑 C 因为 F 是…

SpringCloud接入nacos配置中心

这里写自定义目录标题 版本选择项目搭建pom.xml本地的 application.ymlchenfu-miniapp-dev.yml 中的配置项接收配置的实体类 版本选择 spring-cloud-Alibaba版本依赖关系 本文章&#xff0c;采用的 springboot 版本是 2.6.13&#xff0c;spring-cloud-alibaba 版本是 2021.0.5…

Reduce函数

Reduce函数&#xff1a; 概念表述&#xff1a; reduce()方法是一个迭代方法对数组中的每个元素按序执行一个提供的 reducer 函数&#xff0c;每一次运行 reducer函数体会将先前元素的计算结果作为参数传入&#xff0c;最后将其结果汇总为单个返回值。用于累积运算。 执行机制&…

(二十二)、k8s 中的关键概念

文章目录 1、总体概览2、第一层&#xff1a;物理机、集群、Node、Pod 之间的关系2、第二层&#xff1a;命名空间 Namespace3、定义4、控制平面&#xff08;Control Plane&#xff09;5、特别的概念 Service6、Deployment 经过 之前几篇文章对 k8s 的实践&#xff0c;结合实践&…

QT 中彻底解决中文乱码问题的指南

在使用 QT 进行开发时&#xff0c;中文乱码问题是许多开发者常遇到的困扰。这不仅影响用户体验&#xff0c;还可能导致数据处理错误。本文将详细介绍在 QT 中彻底解决中文乱码问题的方法&#xff0c;帮助开发者创建更友好的应用程序。 一、中文乱码问题的原因 在 QT 中出现中文…

appium文本输入的多种形式

目录 一、send_keys方法 二、press_keycode方法 三、subprocess方法直接通过adb命令输入 一、send_keys方法 这个是最常用的方法&#xff0c;不过通常使用时要使用聚焦&#xff0c;也就是先点击后等待&#xff1a; element wait.until(EC.presence_of_element_located((By…

AI模型库 : 下一个大型供应链攻击目标

像 Hugging Face 这样的AI模型平台&#xff0c;很容易受到攻击者多年来通过 npm、PyPI 和其他开源存储库成功执行的同类攻击的影响 Hugging Face 等AI模型存储库为攻击者提供了与 npm 和 PyPI 等开源公共存储库相同的将恶意代码植入开发环境的机会。 在今年 4 月即将举行的 Bl…

元学习-学习笔记

学习视频&#xff1a;火炉课堂 | 元学习(meta-learning)到底是什么鬼&#xff1f;_哔哩哔哩_bilibili 一、从传统机器学习到元学习 我们传统的机器学习&#xff0c;是手工设计一个模型&#xff0c;然后将训练数据投进模型中进行训练&#xff0c;得到一个最优的模型参数&#x…

bytetrack训练日志解读和相应源码分析

文章目录 日志结构训练过程概述评估结果对应代码80个周期665次迭代概念说明损失值日志结构 2024-10-12 09:04:25 | INFO | yolox.core.trainer:179 - Training start.

文件inode

磁盘结构&#xff1a; 众所周知扇面是磁盘存储数据的地方&#xff0c;而一个磁盘有个6个磁盘面&#xff0c;而磁头指向都是相同半径的扇面&#xff0c;所以我们可以抽象出来一个三维指针&#xff1b; 这样我们就抽象出来了一个磁盘&#xff0c;而我们的每个磁盘面都有相同名字…