国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

由jar包沖突導(dǎo)致的logback日志不輸出

這篇具有很好參考價(jià)值的文章主要介紹了由jar包沖突導(dǎo)致的logback日志不輸出。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

最近接手一個(gè)廠商移交的項(xiàng)目,發(fā)現(xiàn)后管子系統(tǒng)不打印日志。

項(xiàng)目使用的logback

本地?cái)帱c(diǎn)調(diào)試發(fā)現(xiàn)logback-classic?jar沖突導(dǎo)致?打出的war中沒有?相關(guān)的jar

解決方法:

去除pom?文件中多余的?logback-classic?應(yīng)用,只保留最新版本的。?重新打包環(huán)境后,日志可正常輸出。

java是如何加載logback
我們都知道,當(dāng)我們需要引入logback時(shí),是不是需添加任何配置 來引入logback.xml文件的,只需要將logback.xml配置文件定義到resources目錄即可,那么框架會(huì)自動(dòng)加載這個(gè)日志配置文件,并按照配置幫我自己生成日志到指定的目錄下,那么它是如何自動(dòng)加載的。
很顯然第一個(gè)想到就是通過spi。
在說明如何加載的一個(gè)前提是,你需要知道sl4j、log4j、logback之間的關(guān)系。
可以看這篇 SLF4J和Logback和Log4j和Logging的區(qū)別與聯(lián)系

這里我還是貼一張圖來說明一下:

slf4j是一個(gè)門面,而logback、log4j都是這個(gè)門面的實(shí)現(xiàn)。
所以logback肯定是在sl4j.jar中加載的。

3.1、回顧下我們獲取日志對(duì)象是如何獲取的
上面方法會(huì)加 //加載org/slf4j/impl/StaticLoggerBinder.class這個(gè)類這個(gè)類,那么我們先看下slf4j下有沒有這個(gè)類:

//通過LoggerFactory獲取一個(gè)logger對(duì)象
final static Logger logger = LoggerFactory.getLogger(HttpClientUtil.class);

//通過LoggerFactory獲取一個(gè)logger對(duì)象,那么我們看下這個(gè)方法如下:

它果然是在slf4j這個(gè)門面中定義的。

public static Logger getLogger(Class<?> clazz) {
? ?//看下是如何獲取logger 的
? ?Logger logger = getLogger(clazz.getName());
? ?if (DETECT_LOGGER_NAME_MISMATCH) {
? ? ? ?Class<?> autoComputedCallingClass = Util.getCallingClass();
? ? ? ?if (autoComputedCallingClass != null && nonMatchingClasses(clazz, autoComputedCallingClass)) {
? ? ? ? ? ?Util.report(String.format("Detected logger name mismatch. Given name: \"%s\"; computed name: \"%s\".", logger.getName(),
? ? ? ? ? ? ? ? ? ? ? ? ? ?autoComputedCallingClass.getName()));
? ? ? ? ? ?Util.report("See " + LOGGER_NAME_MISMATCH_URL + " for an explanation");
? ? ? ?}
? ?}
? ?return logger;
}
?

getLogger

public static Logger getLogger(String name) {
? ? //看下這個(gè)方法
? ? ILoggerFactory iLoggerFactory = getILoggerFactory();
? ? return iLoggerFactory.getLogger(name);
}
?

public static ILoggerFactory getILoggerFactory() {
? ? ?if (INITIALIZATION_STATE == UNINITIALIZED) {
? ? ? ? ?synchronized (LoggerFactory.class) {
? ? ? ? ? ? ?if (INITIALIZATION_STATE == UNINITIALIZED) {
? ? ? ? ? ? ? ? ?INITIALIZATION_STATE = ONGOING_INITIALIZATION;
? ? ? ? ? ? ? ? ?//看這個(gè)方法
? ? ? ? ? ? ? ? ?performInitialization();
? ? ? ? ? ? ?}
? ? ? ? ?}
? ? ?}
? ? ?......
} ? ??
?

查看performInitialization 的bind方法

? private final static void performInitialization() {
? ? ?//綁定
? ? ?bind();
? ? ?if (INITIALIZATION_STATE == SUCCESSFUL_INITIALIZATION) {
? ? ? ? ?versionSanityCheck();
? ? ?}
?}

private final static void bind() {
? ? ....
? ? staticLoggerBinderPathSet = findPossibleStaticLoggerBinderPathSet();
? ? .....
}
?
?private static String STATIC_LOGGER_BINDER_PATH = "org/slf4j/impl/StaticLoggerBinder.class";

static Set<URL> findPossibleStaticLoggerBinderPathSet() {
? ? ?// use Set instead of list in order to deal with bug #138
? ? ?// LinkedHashSet appropriate here because it preserves insertion order
? ? ?// during iteration
? ? ?Set<URL> staticLoggerBinderPathSet = new LinkedHashSet<URL>();
? ? ?try {
? ? ? ? ?ClassLoader loggerFactoryClassLoader = LoggerFactory.class.getClassLoader();
? ? ? ? ?Enumeration<URL> paths;
? ? ? ? ?if (loggerFactoryClassLoader == null) {
? ? ? ? ?//加載org/slf4j/impl/StaticLoggerBinder.class這個(gè)類
? ? ? ? ? ? ?paths = ClassLoader.getSystemResources(STATIC_LOGGER_BINDER_PATH);
? ? ? ? ?} else {
? ? ? ? ? ? ?paths = loggerFactoryClassLoader.getResources(STATIC_LOGGER_BINDER_PATH);
? ? ? ? ?}
? ? ? ? ?while (paths.hasMoreElements()) {
? ? ? ? ? ? ?URL path = paths.nextElement();
? ? ? ? ? ? ?staticLoggerBinderPathSet.add(path);
? ? ? ? ?}
? ? ?} catch (IOException ioe) {
? ? ? ? ?Util.report("Error getting resources from path", ioe);
? ? ?}
? ? ?return staticLoggerBinderPathSet;
?}

這個(gè)jar下沒有這個(gè)路徑,那么肯定是在slf4j-logback.jar,slf4j-log4j.jar這樣的jar包下實(shí)現(xiàn)的。
搜索logback相關(guān)jar,發(fā)現(xiàn)在這個(gè)jar下有這個(gè)路徑類

然后繼續(xù),看bind方法后面

如果你的項(xiàng)目中只有l(wèi)ogback-classic這一個(gè)Jar,沒有其它日志框架,那么直接點(diǎn)到這個(gè)方法中就到logback方法中,如下:

這個(gè)類中靜態(tài)方法就會(huì)執(zhí)行

看下init方法

autoConfig()中findURLOfDefaultConfigurationFile方法

再繼續(xù)看autoConfig()方法

后面就不在細(xì)說明,可以直接到源碼里面看看。
這里整個(gè)logback自動(dòng)注入的過程就完結(jié)了
?

具體排查過程待補(bǔ)充

最終原因?jar包沖突?

表現(xiàn)?war包中沒有?logback-classic.jar?這個(gè)文件,? 解決沖突后 ,logback-classic.jar?出現(xiàn)了?問題解決。文章來源地址http://www.zghlxwxcb.cn/news/detail-809060.html

到了這里,關(guān)于由jar包沖突導(dǎo)致的logback日志不輸出的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 淺談因?yàn)轫?xiàng)目中的Logback于Nacos的Logback沖突導(dǎo)致的項(xiàng)目啟動(dòng)失敗 ERROR in ch.qos.logback.core.rolling.RollingFileAppender[CO

    淺談因?yàn)轫?xiàng)目中的Logback于Nacos的Logback沖突導(dǎo)致的項(xiàng)目啟動(dòng)失敗 ERROR in ch.qos.logback.core.rolling.RollingFileAppender[CO

    環(huán)境 :? Nacos 2.2.1? ?,? ?Spring-cloud? ?Hoxton.SR1 ,?com.alibaba.cloud.version? 2.2.8 ( 留意這個(gè)版本 ) ????????最近新搭建了一次虛擬機(jī), 然后重新部署了Nacos , 同時(shí)也在一個(gè)新項(xiàng)目里引入了Nacos 的服務(wù)注冊(cè)功能 , 以下是服務(wù)Pom版本管理配置 然后再實(shí)際使用模塊pom文件中引入服務(wù)注冊(cè)

    2024年02月06日
    瀏覽(15)
  • SpringBoot設(shè)置日志輸出級(jí)別及Logback日志工具輸出到文件

    SpringBoot設(shè)置日志輸出級(jí)別及Logback日志工具輸出到文件

    1.SpringBoot設(shè)置日志輸出級(jí)別 越高包含的就越多,輸出的信息也就越多 2.Logback日志工具使用 1.首先需要把你yaml文件里面關(guān)于日志的配置去掉,避免沖突報(bào)錯(cuò) 2.在resource目錄下創(chuàng)建logback-spring.xml文件 2.運(yùn)行后指定路徑就會(huì)生成.log文件 3.此時(shí)一般默認(rèn)只有info信息寫入,其他兩個(gè)

    2024年02月16日
    瀏覽(31)
  • logback日志按照類型輸出到不同文件

    公司要將項(xiàng)目的日志分為不同的類別,如所有日志、請(qǐng)求日志、錯(cuò)誤日志和 SQL 日志。 目前使用的日志框架為slf4j + logback。 要將日志分為不同的類別,可以使用 Logback 的日志級(jí)別和過濾器來實(shí)現(xiàn)。 然后,可以針對(duì)特定的日志類型設(shè)置不同的日志級(jí)別和過濾器。 Logback 的appe

    2024年02月16日
    瀏覽(17)
  • springboot Logback 不同環(huán)境,配置不同的日志輸出路徑

    springboot Logback 不同環(huán)境,配置不同的日志輸出路徑

    mac 筆記本開發(fā),日志文件寫到/data/logs/下,控制臺(tái)報(bào)出:Failed to create parent directories for [/data/logs/........... 再去手動(dòng)在命令窗口創(chuàng)建文件夾data,報(bào)Read-only file system resource 目錄下的配置文件列表: 在logback-spring.xml添加配置, 只有l(wèi)ocal寫到當(dāng)前項(xiàng)目下的data目錄,其他環(huán)境寫到系統(tǒng)

    2024年04月23日
    瀏覽(24)
  • Logback日志記錄只在控制臺(tái)輸出sql,未寫入日志文件【解決】

    Logback日志記錄只在控制臺(tái)輸出sql,未寫入日志文件【解決】

    原因:持久層框架對(duì)于Log接口實(shí)現(xiàn)方式不一樣,日記記錄的位置及展示方式也也不一樣 可以分別配置到兩個(gè)環(huán)境中,dev用StdOutImpl,prod用Slf4jImpl或者其他的都行,具體需要看他是如何實(shí)現(xiàn)的,使用logger對(duì)象輸出的都是會(huì)寫入日志的,使用System.out或err的只會(huì)在控制臺(tái)顯示,以下是實(shí)驗(yàn)

    2024年02月09日
    瀏覽(95)
  • springboot日志使用 SLF4J+Logback 實(shí)現(xiàn)(springboot默認(rèn)的日志實(shí)現(xiàn)),日志打印到控制臺(tái)及日志輸出到指定文件

    還是直接上代碼 @Slf4j 這玩意 默認(rèn)支持 不用引入 yml 配置文件 下面分享 xml 方式 在 資源目錄下創(chuàng)建 logback-spring.xml 粘貼走 即可 重啟 看控制臺(tái)變化 還有磁盤 有沒有寫入 坑 : 我在創(chuàng)建的時(shí)候 發(fā)現(xiàn) xml 沒有生效 排查了半天 發(fā)現(xiàn) 在創(chuàng)建 logback-spring.xml 這個(gè)文件的時(shí)候 我不是手

    2024年04月22日
    瀏覽(99)
  • 23、springboot日志使用入門-- SLF4J+Logback 實(shí)現(xiàn)(springboot默認(rèn)的日志實(shí)現(xiàn)),日志打印到控制臺(tái)及日志輸出到指定文件

    23、springboot日志使用入門-- SLF4J+Logback 實(shí)現(xiàn)(springboot默認(rèn)的日志實(shí)現(xiàn)),日志打印到控制臺(tái)及日志輸出到指定文件

    就是springboot的默認(rèn)的日志依賴實(shí)現(xiàn)。創(chuàng)建項(xiàng)目的時(shí)候存在這個(gè)依賴?yán)锩妗?下面的日志實(shí)現(xiàn)就是基于 SLF4J+Logback SLF4J+Logback:SLF4J是門面,Logback是實(shí)現(xiàn) 設(shè)置日志的級(jí)別,可通過以下方式: ▲ 改變Spring Boot的核心日志級(jí)別 ▲ 改變程序組件(包括所有各種框架)的核心日志級(jí)別

    2024年02月03日
    瀏覽(98)
  • Java Logback日志框架概述及l(fā)ogback.xml詳解

    Java Logback日志框架概述及l(fā)ogback.xml詳解

    日志技術(shù)具備的優(yōu)勢(shì) 可以將系統(tǒng)執(zhí)行的信息選擇性的記錄到指定的位置(控制臺(tái)、文件中、數(shù)據(jù)庫(kù)中)?!?可以隨時(shí)以開關(guān)的形式控制是否記錄日志,無需修改源代碼。 日志體系結(jié)構(gòu) Logback日志框架 Logback是由log4j創(chuàng)始人設(shè)計(jì)的另一個(gè)開源日志組件,性能比log4j要好 Logback是基于

    2024年02月10日
    瀏覽(34)
  • Windows配置開機(jī)自啟jar包,不顯示黑窗口,并輸出日志

    Windows配置開機(jī)自啟jar包,不顯示黑窗口,并輸出日志

    如果是在 Linux 下開機(jī)自啟一個(gè)服務(wù)相對(duì)比較簡(jiǎn)單,這次遇到一個(gè)需求是關(guān)于 Windows 開機(jī)自啟的: 在 Windows 環(huán)境下開機(jī)自動(dòng)運(yùn)行一個(gè) SpringBoot 服務(wù); 而且由于是一個(gè)后臺(tái)服務(wù),要求對(duì)終端用戶無感知; 為后期維護(hù)方便,需要將原來的控制臺(tái)輸出記錄到日志文件。 以下實(shí)現(xiàn)方

    2023年04月08日
    瀏覽(24)
  • Spring Boot學(xué)習(xí)隨筆- 本地化測(cè)試(@SpringBootTest)、熱部署(spring-boot-devtools)、日志Logback常用級(jí)別使用、指定包級(jí)別輸出

    Spring Boot學(xué)習(xí)隨筆- 本地化測(cè)試(@SpringBootTest)、熱部署(spring-boot-devtools)、日志Logback常用級(jí)別使用、指定包級(jí)別輸出

    學(xué)習(xí)視頻:【編程不良人】2021年SpringBoot最新最全教程 頻繁啟動(dòng)服務(wù)器進(jìn)行功能的訪問非常繁瑣、SpringBoot給我們提供了用于測(cè)試的依賴,自動(dòng)集成Junit,使用了這個(gè)以來后,test包在打包時(shí)不會(huì)被打包進(jìn)去 @SpringBootTest注解 修飾在類上,用來啟動(dòng)本地Spring環(huán)境 作用 熱部署是指

    2024年02月05日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包