最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

類似代碼如下:

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

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

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

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

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

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

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

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

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

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、也可以通過配置類進(jìn)行設(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最低。級別越高,記錄到日志的機(jī)會就越小。如果設(shè)為DEBUG,可能日志內(nèi)容會很多。

這是我另外一個項(xiàng)目中,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、運(yùn)行jar包的命令行、包括日志配置文件都設(shè)了UTF-8,但仍然是亂碼。但如果用System.out.println()直接輸出到控制臺,又正常。

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

總結(jié)

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

相關(guān)文章

  • Spring Security 使用 OncePerRequestFilter 過濾器校驗(yàn)登錄過期、請求日志等操作

    Spring Security 使用 OncePerRequestFilter 

    OncePerRequestFilter是一個過濾器,每個請求都會執(zhí)行一次;一般開發(fā)中主要是做檢查是否已登錄、Token是否過期和授權(quán)等操作,而每個操作都是一個過濾器,下面介紹Spring Security 使用 OncePerRequestFilter 過濾器校驗(yàn)登錄過期、請求日志等操作方法,感興趣的朋友一起看看吧
    2024-06-06
  • 項(xiàng)目總結(jié)之HttpURLConnection的disconnect的問題

    項(xiàng)目總結(jié)之HttpURLConnection的disconnect的問題

    這篇文章主要介紹了項(xiàng)目總結(jié)之HttpURLConnection的disconnect的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • javacv依賴太大導(dǎo)致jar包也大的解決辦法

    javacv依賴太大導(dǎo)致jar包也大的解決辦法

    隨著項(xiàng)目的復(fù)雜度和依賴關(guān)系的增加,打包后的JAR包可能會變得很大,這篇文章主要介紹了javacv依賴太大導(dǎo)致jar包也大的解決辦法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-09-09
  • 一篇文章帶你入門Java運(yùn)算符

    一篇文章帶你入門Java運(yùn)算符

    這篇文章主要介紹了Java基本數(shù)據(jù)類型和運(yùn)算符,結(jié)合實(shí)例形式詳細(xì)分析了java基本數(shù)據(jù)類型、數(shù)據(jù)類型轉(zhuǎn)換、算術(shù)運(yùn)算符、邏輯運(yùn)算符等相關(guān)原理與操作技巧,需要的朋友可以參考下
    2021-08-08
  • JavaWeb文件上傳開發(fā)實(shí)例

    JavaWeb文件上傳開發(fā)實(shí)例

    這篇文章主要為大家詳細(xì)介紹了JavaWeb文件上傳開發(fā)實(shí)例,如何進(jìn)行文件上傳操作,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 淺談SpringBoot @Autowired的兩種注入方式

    淺談SpringBoot @Autowired的兩種注入方式

    本文主要介紹了兩種SpringBoot @Autowired注入方式,具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • Mybatis利用OGNL表達(dá)式處理動態(tài)sql的方法教程

    Mybatis利用OGNL表達(dá)式處理動態(tài)sql的方法教程

    這篇文章主要給大家介紹了關(guān)于Mybatis利用OGNL表達(dá)式處理動態(tài)sql的方法教程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • SpringBoot實(shí)現(xiàn)EMQ設(shè)備的上下線告警

    SpringBoot實(shí)現(xiàn)EMQ設(shè)備的上下線告警

    EMQX?的上下線系統(tǒng)消息通知功能在客戶端連接成功或者客戶端斷開連接,需要實(shí)現(xiàn)設(shè)備的上下線狀態(tài)監(jiān)控,所以本文給大家介紹了如何通過SpringBoot實(shí)現(xiàn)EMQ設(shè)備的上下線告警,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-10-10
  • Spring?Boot?使用?Disruptor?做內(nèi)部高性能消息隊(duì)列

    Spring?Boot?使用?Disruptor?做內(nèi)部高性能消息隊(duì)列

    這篇文章主要介紹了Spring?Boot?使用?Disruptor?做內(nèi)部高性能消息隊(duì)列,工作中遇到項(xiàng)目使用Disruptor做消息隊(duì)列,對你沒看錯,不是Kafka,也不是rabbitmq。Disruptor有個最大的優(yōu)點(diǎn)就是快,還有一點(diǎn)它是開源的哦,下面做個簡單的記錄
    2022-06-06
  • Spring Cloud Consul實(shí)現(xiàn)選舉機(jī)制的代碼工程

    Spring Cloud Consul實(shí)現(xiàn)選舉機(jī)制的代碼工程

    Spring Cloud Consul 是 Spring Cloud 提供的對 HashiCorp Consul 的支持,它是一種基于服務(wù)網(wǎng)格的工具,用于實(shí)現(xiàn)服務(wù)注冊、發(fā)現(xiàn)、配置管理和健康檢查,本文給大家介紹了如何用Spring Cloud Consul實(shí)現(xiàn)選舉機(jī)制,需要的朋友可以參考下
    2024-11-11

最新評論

顺平县| 夹江县| 黄浦区| 定安县| 呼玛县| 防城港市| 乾安县| 盐源县| 时尚| 九台市| 泗水县| 牟定县| 威信县| 九龙坡区| 崇州市| 闵行区| 巴里| 洛扎县| 德阳市| 宁明县| 象州县| 抚顺县| 明星| 石家庄市| 繁昌县| 故城县| 那坡县| 五原县| 南宁市| 宿迁市| 长武县| 徐汇区| 静宁县| 绵竹市| 新宾| 洮南市| 句容市| 台南市| 黑山县| 福州市| 铜梁县|