欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何設(shè)置springboot禁止日志輸出到控制臺

 更新時間:2025年01月14日 14:26:19   作者:左直拳  
文章總結(jié):本文主要介紹了SpringBoot項目中使用SLF4J記錄日志時,日志默認輸出到控制臺的原因及解決方法,日志框架如Logback默認會將日志輸出到控制臺,可以通過`logback-spring.xml`配置文件或配置類來禁止日志輸出到控制臺,并設(shè)置日志輸出級別

我們一個Spring Boot項目,使用了org.slf4j.Logger.info記錄日志。

類似代碼如下:

@Slf4j
public class CTest {
    public void test() {
    	。。。
        log.info("Hello World!");
    }
}

結(jié)果運行的時候,系統(tǒng)除了將日志記錄到日志文件,還將日志打印到控制臺。由于日志太多太密集,屏幕不停地滾動,令人目不暇接,加上亂碼,簡直不知所謂。

為啥日志還會自動輸出到控制臺呢?我一向孤陋寡聞,好奇去問AI。AI告訴我,系統(tǒng)使用org.slf4j.Logger.info記錄日志,而SLF4J 只是一個日志門面(Facade),具體的日志記錄行為是由綁定的具體日志實現(xiàn)框架(如 Logback、Log4j、java.util.logging 等)決定的。就相當(dāng)于,org.slf4j.Logger.info只定義了日志的接口,具體實現(xiàn)要看用了什么日志工具包。如果沒有指定,Spring Boot會默認采用Logback。

我看了看pom.xml,沒有發(fā)現(xiàn)有引用什么日志包,因此可以確定,我們系統(tǒng)用的應(yīng)該是Logback。

我記得Spring Boot的核心是控制反轉(zhuǎn)(IoC),AOP和容器,然后AI說,除此之外,還有約定大于配置,自動配置,起步依賴等等。

起步依賴就是為程序啟動自動提供了許多準備,自動配置應(yīng)該就包含了上面說的,默認采用Logback作為日志框架的做法。

一、禁止日志輸出到控制臺

回到日志內(nèi)容默認輸出到控制臺,這是Logback的做派。如果要禁止,需要在配置文件或代碼中指定。

這個配置文件,不是指application.yml這種Spring Boot項目級的配置文件,它們只能簡單地設(shè)置日志的輸出級別和輸出路徑,而禁止輸出到控制臺,只能在專有的logback-spring.xml進行配置。

1、application.yml只能簡單地設(shè)置日志的輸出級別和輸出路徑

application.yml

logging:
  level:
    root: info      # 設(shè)置全局日志級別
    com.yourpackage: debug  # 針對特定包的日志級別
  file:
    path: ./log/seller.log  # 日志輸出路徑
  pattern:
    file: '%d{yyyy-MM-dd HH:mm:ss} - %msg%n'  # 日志文件的格式
    console: '%d{yyyy-MM-dd HH:mm:ss} - %msg%n'  # 控制臺輸出的日志格式

2、日志配置文件logback-spring.xml設(shè)置

logback-spring.xml需要手動創(chuàng)建,位置也是在resources根目錄下,SpringBoot會自動識別。

文件內(nèi)容如下:

resources/logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 定義文件日志輸出 -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>./log/seller.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 配置 root 只使用文件輸出 -->
    <root level="info">
        <appender-ref ref="FILE" />
    </root>
</configuration>

3、也可以通過配置類進行設(shè)置

當(dāng)然也可以通過創(chuàng)建配置類來設(shè)置:

import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.ConsoleAppender;
import ch.qos.logback.core.FileAppender;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import ch.qos.logback.classic.spi.ILoggingEvent;
import java.util.Iterator;

@Configuration
public class LoggingConfig {

    @Bean
    public void configureLogging() {
        LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
        Logger rootLogger = loggerContext.getLogger("ROOT");

        // 移除 ConsoleAppender
        removeConsoleAppender(rootLogger);

        // 添加 FileAppender
        addFileAppender(loggerContext, rootLogger);
    }

    private void removeConsoleAppender(Logger rootLogger) {
        Iterator<Appender<ILoggingEvent>> iterator = rootLogger.iteratorForAppenders();
        while (iterator.hasNext()) {
            Appender<ILoggingEvent> appender = iterator.next();
            if (appender instanceof ConsoleAppender) {
                rootLogger.detachAppender(appender);
                appender.stop();
            }
        }
    }

    private void addFileAppender(LoggerContext context, Logger rootLogger) {
        // 創(chuàng)建 FileAppender
        FileAppender<ILoggingEvent> fileAppender = new FileAppender<>();
        fileAppender.setContext(context);
        fileAppender.setFile("./log/seller.log");

        // 設(shè)置日志輸出格式
        PatternLayoutEncoder encoder = new PatternLayoutEncoder();
        encoder.setContext(context);
        encoder.setPattern("%d{yyyy-MM-dd HH:mm:ss} - %msg%n");
        encoder.start();

        fileAppender.setEncoder(encoder);
        fileAppender.start();

        // 添加到 rootLogger
        rootLogger.addAppender(fileAppender);
    }
}

二、設(shè)置日志輸出級別

Logback的日志輸出有所謂級別:Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7

其中FATAL最高,DEBUG最低。級別越高,記錄到日志的機會就越小。如果設(shè)為DEBUG,可能日志內(nèi)容會很多。

這是我另外一個項目中,resources/logback-spring.xml的部分內(nèi)容

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">
	。。。
    <!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 -->
    <root level="warn">
        <appender-ref ref="console"/>
        <appender-ref ref="debug"/>
        <appender-ref ref="error"/>
    </root>
</configuration>

三、日志輸出到控制臺亂碼問題

我發(fā)現(xiàn),日志內(nèi)容輸出到控制臺,其中的漢字會是亂碼。IDE、運行jar包的命令行、包括日志配置文件都設(shè)了UTF-8,但仍然是亂碼。但如果用System.out.println()直接輸出到控制臺,又正常。

這個問題暫時還沒有解決。記錄一下。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于File與MultipartFile的用法概述

    關(guān)于File與MultipartFile的用法概述

    這篇文章主要介紹了關(guān)于File與MultipartFile的用法概述,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringBoot初始教程之統(tǒng)一異常處理詳解

    SpringBoot初始教程之統(tǒng)一異常處理詳解

    本篇文章主要介紹了SpringBoot初始教程之統(tǒng)一異常處理詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Servlet文件的上傳與下載詳解

    Servlet文件的上傳與下載詳解

    很多朋友不清楚在Servlet中怎么上傳下載文件,談到這個問題,首先需要我們掌握開發(fā)servlet的步驟,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-06-06
  • SpringBoot?實現(xiàn)全局異常處理的示例代碼

    SpringBoot?實現(xiàn)全局異常處理的示例代碼

    本文主要介紹了SpringBoot實現(xiàn)全局異常處理,全局異常處理器的使用可以顯著提高Spring Boot項目的代碼質(zhì)量和可維護性,減少冗余代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Springboot如何使用Aspectj實現(xiàn)AOP面向切面編程

    Springboot如何使用Aspectj實現(xiàn)AOP面向切面編程

    這篇文章主要介紹了Springboot如何使用Aspectj實現(xiàn)AOP面向切面編程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringCloud配置刷新原理解析

    SpringCloud配置刷新原理解析

    這篇文章主要介紹了SpringCloud之配置刷新的原理,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-05-05
  • java中使用POI生成Excel并導(dǎo)出過程

    java中使用POI生成Excel并導(dǎo)出過程

    這篇文章主要介紹了java中使用POI生成Excel并導(dǎo)出過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java流式操作之Collectors工具類操作指南

    Java流式操作之Collectors工具類操作指南

    Collectors是Collector的工具類,類中提供了很多流收集、歸約、分組、分區(qū)等方法,方便我們直接使用,下面這篇文章主要給大家介紹了關(guān)于Java流式操作之Collectors工具類操作的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • java8 forEach結(jié)合Lambda表達式遍歷 List操作

    java8 forEach結(jié)合Lambda表達式遍歷 List操作

    這篇文章主要介紹了java8 forEach結(jié)合Lambda表達式遍歷 List操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 使用Java自制一個一個Nacos

    使用Java自制一個一個Nacos

    Nacos是?Dynamic?Naming?and?Configuration?Service的首字母簡稱,一個更易于構(gòu)建云原生應(yīng)用的動態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺,本文將嘗試用Java實現(xiàn)一個Nacos,感興趣的可以了解下
    2024-01-01

最新評論