gpt4 book ai didi

slf4j - slf4j 如何绑定(bind)到实现?它真的在编译期间这样做吗?

转载 作者:行者123 更新时间:2023-12-04 02:05:18 25 4
gpt4 key购买 nike

在 slf4j 的文档中,它说绑定(bind)发生在编译时间:

“SLF4J 不依赖于任何特殊的类加载器机制。事实上,每个 SLF4J 绑定(bind)在编译时都是硬连线的,以使用一个且只有一个特定的日志框架。例如,slf4j-log4j12-1.7.5.jar 绑定(bind)绑定(bind)在编译时使用 log4j。在您的代码中,除了 slf4j-api-1.7.5.jar 之外,您只需将一个且只有一个您选择的绑定(bind)放到适当的类路径位置。不要在您的类路径。这是一般想法的图形说明。 http://www.slf4j.org/manual.html

这是如何运作的?

最佳答案

这是slf4j的源代码。
Slf4j 会在类路径中查找路径为“ org/slf4j/impl/StaticLoggerBinder.class ”的所有类。如果有多个,jvm 只会随机选择一个。更多细节可以看这里:http://www.slf4j.org/codes.html#multiple_bindings

// We need to use the name of the StaticLoggerBinder class, but we can't
// reference
// the class itself.

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) {
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;
}

关于slf4j - slf4j 如何绑定(bind)到实现?它真的在编译期间这样做吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17829995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com