首页 > 编程语言 >【日常记录-Java】应用引入Slf4J

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

时间:2024-11-01 14:17:55浏览次数:5  
标签:%- Java log Slf4J 日常 import 日志 logback qos

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设计简洁明了,易于学习和使用;

标签:%-,Java,log,Slf4J,日常,import,日志,logback,qos
From: https://blog.csdn.net/zhaoyaxuan001/article/details/143292627

相关文章

  • 【日常记录-Java】SLF4J扫描实现框架的过程
    1.简介    SLF4J(SimpleLoggingFacadeforJava)作为一种简单的门面或抽象,服务于其他各种日志框架,例如JUL、log4j、logback等,核心作用有两项:提供日志接口;提供获取具体日志对象的方法;2.扫描过程 2.1引入依赖    在使用SLF4J时,需要引入其API依赖以及......
  • JAVA 二叉树面试题
    @目录摘要代码Node节点main函数问题1:递归——求二叉树的最大深度问题2:求二叉树的最小深度问题3:求二叉树中节点的个数问题4:求二叉树中叶子节点的个数问题5:求二叉树中第k层节点的个数,不是求第k层叶子节点个数问题6:判断两棵树是否相同问题7:给定一个二叉树,检查它是否是镜像对称的。问......
  • 为什么 C++ 编译速度比 Java 慢得多
    ###为什么C++编译速度比Java慢得多在探讨为什么C++编译速度比Java慢得多时,我们可以归纳出几个核心原因:C++的编译模型更为复杂、模板元编程、宏处理以及链接时间。其中,C++的编译模型更为复杂这一点尤为突出。C++需要处理的细节更多,如模板实例化、头文件的重复包含等,这些......
  • Java 传参时,如何做到两个 String 实参的实际值交换_3
    ###Java传参时,如何做到两个String实参的实际值交换在Java中,所有的参数传递都是值传递,这意味着方法接收的是实参值的一个副本。对于基本数据类型,这个副本是实际值;对于对象,副本是引用的一个拷贝。因此,直接在方法内部交换两个`String`实参的实际值是不可能的。然而,可以通过一......
  • 一文彻底熟练掌握并使用Java的NIO操作
    一、基本概念JavaNIO是Java1.4引入的,用于处理高速、高并发的I/O操作。与传统的阻塞I/O不同,NIO支持非阻塞I/O和选择器,可以更高效地管理多个通道。二、核心组件通道(Channel)Channel是NIO中用于读取和写入数据的主要接口,提供双向数据传输的能力。常见的通道实现......
  • 基于Java的医疗保险报销系统设计与实现
    基于Java语言、Spring框架、SpringBoot、HTML/CSS/JavaScript、Vue、Jwt、Element-ui等技术,进行医疗保险报销系统的设计。本系统旨在将医疗保险报销系统中的分散信息进行归纳与整合,对其进行统一的信息管理,使其整个报销流程更加的系统化、科学化、透明化。在医疗保险报销系统......
  • Java-SE-泛型编程-总结/java
    泛型一、泛型的定义和使用类定义:在定义一个泛型类时,需要在类名后加上<T>,以指示这是一个泛型类。例如:publicclassPair<T>{...}方法定义:在定义泛型方法时,需要在返回类型前加上<T>,这样编译器才会知道这是一个泛型方法。例如:public<T>Tadd(Pair<T>p){...}......
  • JAVA开发笔记之mac基于jenv管理多java版本
    0x00本文主要记录mac上jenv管理多版本java的坑;前提是配置好brew镜像,确保brewupdate会正常执行而不是卡住。 0x01安装jenvbrewinstalljenv#添加jenv环境变量,修改用户文件夹下对应的~/.bash_profile或者~/.zhsrcexportPATH="$HOME/.jenv/bin:$PATH"eval"$(jenvi......
  • java+vue计算机毕设高校毕业生就业管理系统的设计与实现【开题+程序+论文+源码】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育的普及和毕业生人数的逐年攀升,高校毕业生就业问题已成为社会各界关注的焦点。传统的就业管理模式在信息处理、资源匹配及效率提升方面已......
  • Java读取properties配置文件
    需要导入的jar<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.14</version></dependency>方法:使用Spring PropertiesLoaderUtils.loadProperties();方法一......