为什么在将 Groovy 脚本与 @Grab 一起使用时,带有 slf4j-nop 的 SLF4J 会输出 StaticLoggerBinder 警告
Why does SLF4J with slf4j-nop output the StaticLoggerBinder warning when using a Groovy script with @Grab
我有一个 Groovy 脚本,它使用 Grape @Grab
annotation. Included with that are a dependency on spring-web
to use RestTemplate
, and a dependency on slf4j-nop
指定依赖项以避免 Failed to load class "org.slf4j.impl.StaticLoggerBinder"
警告。
#!/usr/bin/env groovy
@Grab('org.springframework:spring-web:5.3.18')
@Grab('org.slf4j:slf4j-nop:1.7.36')
import org.springframework.web.client.RestTemplate
new RestTemplate().getForObject('http://www.example.com', String)
然而,尽管如此,我仍然收到 SLF4J 警告:
$ ./restTemplateLoggingTest.groovy
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
鉴于它是一个脚本,重要的是输出不包含外来噪音,因为它可能以编程方式使用和操作。
当我 运行 我的脚本时,如何防止输出此日志记录警告?
实验表明,使用 @GrabConfig(systemClassLoader=true)
将依赖项附加到系统类加载器会导致不再发出日志:
#!/usr/bin/env groovy
@GrabConfig(systemClassLoader=true)
@Grab('org.springframework:spring-web:5.3.18')
@Grab('org.slf4j:slf4j-nop:1.7.36')
import org.springframework.web.client.RestTemplate
new RestTemplate().getForObject('http://www.example.com', String)
虽然我有一些模糊的猜测,但我不确定这是为什么。
请注意,尽管解决了这个问题,但这并不是 Javadocs 为 GrabConfig#systemClassLoader
描述的用途:
Set to true if you want to use the system classloader when loading the grape. This is normally only required when a core Java class needs to reference the grabbed classes, e.g. for a database driver accessed using DriverManager.
我有一个 Groovy 脚本,它使用 Grape @Grab
annotation. Included with that are a dependency on spring-web
to use RestTemplate
, and a dependency on slf4j-nop
指定依赖项以避免 Failed to load class "org.slf4j.impl.StaticLoggerBinder"
警告。
#!/usr/bin/env groovy
@Grab('org.springframework:spring-web:5.3.18')
@Grab('org.slf4j:slf4j-nop:1.7.36')
import org.springframework.web.client.RestTemplate
new RestTemplate().getForObject('http://www.example.com', String)
然而,尽管如此,我仍然收到 SLF4J 警告:
$ ./restTemplateLoggingTest.groovy
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
鉴于它是一个脚本,重要的是输出不包含外来噪音,因为它可能以编程方式使用和操作。
当我 运行 我的脚本时,如何防止输出此日志记录警告?
实验表明,使用 @GrabConfig(systemClassLoader=true)
将依赖项附加到系统类加载器会导致不再发出日志:
#!/usr/bin/env groovy
@GrabConfig(systemClassLoader=true)
@Grab('org.springframework:spring-web:5.3.18')
@Grab('org.slf4j:slf4j-nop:1.7.36')
import org.springframework.web.client.RestTemplate
new RestTemplate().getForObject('http://www.example.com', String)
虽然我有一些模糊的猜测,但我不确定这是为什么。
请注意,尽管解决了这个问题,但这并不是 Javadocs 为 GrabConfig#systemClassLoader
描述的用途:
Set to true if you want to use the system classloader when loading the grape. This is normally only required when a core Java class needs to reference the grabbed classes, e.g. for a database driver accessed using DriverManager.