SLF4J原始碼解析(一)

2021-09-03 03:05:19 字數 2123 閱讀 8391

閱讀原始碼之前,首先提幾個問題

帶著上面的兩個問題看下原始碼

bind()方法中通過呼叫findpossiblestaticloggerbinderpathset()方法來查詢日誌框架的繫結

findpossiblestaticloggerbinderpathset()方法中通過classloader或者logge***ctoryclassloader來獲取名為"static_logger_binder_path"的resources "static_logger_binder_path"的值在檔案一開始已經定義過了

private static string static_logger_binder_path = "org/slf4j/impl/staticloggerbinder.class";
// org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar!/org/slf4j/logge***ctory.class

static setfindpossiblestaticloggerbinderpathset() else

while(paths.hasmoreelements())

} catch (ioexception var4)

return staticloggerbinderpathset;

}

這裡拿整合log4j舉例,"org/slf4j/impl/staticloggerbinder.class"就在log4j的log4j-slf4j-impl庫中,這個類負責初始化log4j相關的類。staticloggerbinder實現了logge***ctorybinder介面。

// org/apache/logging/log4j/log4j-slf4j-impl/2.11.1/log4j-slf4j-impl-2.11.1.jar!/org/slf4j/impl/staticloggerbinder.class

// 這裡的包名定義為org.slf4j.impl,使得上述第2步的class loader可以載入到這個類

package org.slf4j.impl;

public final class staticloggerbinder implements logge***ctorybinder

其他日誌框架也定義了staticloggerbinder類,且實現了logge***ctorybinder介面。 例如: logback,jcl

// ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/staticloggerbinder.class

// 這裡的包名定義為org.slf4j.impl,使得上述第2步的class loader可以載入到這個類

package org.slf4j.impl;

public class staticloggerbinder implements logge***ctorybinder

// org/slf4j/slf4j-jcl/1.7.25/slf4j-jcl-1.7.25.jar!/org/slf4j/impl/staticloggerbinder.class

// 這裡的包名定義為org.slf4j.impl,使得上述第2步的class loader可以載入到這個類

package org.slf4j.impl;

public class staticloggerbinder implements logge***ctorybinder

private static void reportmultiplebindingambiguity(setbinderpathset) 

util.report("see for an explanation.");}}

**中使用slf4j來記錄日誌,可以任意切換底層日誌框架而不需要修改**,只需要更新依賴以及日誌配置檔案即可。

SLF4J原始碼解析(一)

閱讀原始碼之前,首先提幾個問題 帶著上面的兩個問題看下原始碼 bind 方法中通過呼叫findpossiblestaticloggerbinderpathset 方法來查詢日誌框架的繫結 org slf4j slf4j api 1.7.25 slf4j api 1.7.25.jar org slf4...

slf4j使用 日誌

slf4j使用 注意jar版本對應 slf4j所提供的核心api是一些介面以及乙個logge ctory的工廠類。而在使用slf4j的時候,不需要在 中或配置檔案中指定你打算用那個具體的日誌系統。只需要在專案中加入定的slf4j logo.jar包就可以。這個和spring的ioc思想有點像,想用哪...

解決slf4j 衝突

發現配置的logback.xml檔案沒有起作用,於是分析了一下啟動log,發現log 現了slf4j衝突異常 slf4j class path contains multiple slf4j bindings.slf4j failed to load class org.slf4j.impl.sta...