使用 slf4j 和 log4j2 进行 Gradle 日志记录

Kal*_*ist 5 logging gradle jenkins-pipeline

我面临一个问题,即在 Jenkins 管道作业的控制台输出中看不到由 log4j2 语句支持的 slf4j。管道代码在 Groovy 中。详细信息在此线程中

我翻阅了Gradle 日志记录文档,其中指出:

您还可以从构建中使用的其他类(例如 buildSrc 目录中的类)中挂钩到 Gradle 的日志记录系统。只需使用 SLF4J 记录器。您可以像在构建脚本中使用提供的记录器一样使用此记录器。

示例 4. 使用 SLF4J 写入日志消息

import org.slf4j.LoggerFactory

def slf4jLogger = LoggerFactory.getLogger('some-logger')
slf4jLogger.info('An info log message logged using SLF4j')
Run Code Online (Sandbox Code Playgroud)

Gradle 还提供与 Java Util Logging、Jakarta Commons Logging 和 Log4j 日志工具包的集成。您的构建类使用这些日志工具包编写的任何日志消息都将被重定向到 Gradle 的日志系统。

我不确定我是否理解上述引文。我的问题是:

1.简单来说,是不是就不能绕过Gradle日志?2.像下面这样的代码是否仍然会调用日志级别与slf4j/log4j2不同的Gradle日志系统?在这里,我尝试使用由 log4j2 支持的 slf4j,甚至不知道 Gradle 日志记录(类似于 Gradle 日志记录中的示例 4)。

class ConfigurationPluginInitBase implements Plugin<Project> {
private static final Logger logger = LoggerFactory.getLogger(ConfigurationPluginInitBase.class)
.
.
.
protected void configureDependenciesResolution(Project project) {
.
.
.
logger.info("Configuring Dependencies Resolution")
logger.info('Does the buildInfo.json exist? {}' , file.exists())
logger.info('The list of dependencies should be rewritten: {}' ,rewriteDependency)

/*Added this as there was no other way to see what happened to the logger instance*/
println 'Is the logger instance created at all???' + logger
.
.
.
logger.info('List: {}' , listToUpdate)
}

}
Run Code Online (Sandbox Code Playgroud)

log4j2-test.properties

status = error
name = PropertiesConfig

filters = threshold

filter.threshold.type = ThresholdFilter
filter.threshold.level = debug

appenders = console

appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c:- %m%n

loggers = console

logger.console.name = ConsoleLog
logger.console.level = debug
logger.console.additivity = false
logger.console.appenderRef.console.ref = STDOUT

rootLogger.level = info
rootLogger.appenderRef.stdout.ref = STDOUT
Run Code Online (Sandbox Code Playgroud)

部分 build.gradle

.
.
.
dependencies {
    compile gradleApi()
    compile localGroovy()
    compile "org.apache.commons:commons-collections4:4.0"
    compile "org.ajoberstar:grgit:1.9.3"
    compile "org.ajoberstar:gradle-git:1.7.2"
    compile "com.github.zafarkhaja:java-semver:0.9.0"
    compile "de.gliderpilot.gradle.semantic-release:gradle-semantic-release-plugin:1.4.0"
    compile "com.netflix.nebula:nebula-dependency-recommender:5.2.0"
    compile "org.jfrog.buildinfo:build-info-extractor-gradle:4.4.12"
    compile "tools.swedbank.gradle.plugin:qualityreport:v1.12.9"
    compile "tools.swedbank.gradle.plugin:gradle-tde:v1.24.2"

    //slf4j
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.9'

    //log4j2
    compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.1'
    compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.1'

    //Start: Binding slf4j to an implementation, exactly one should be uncommented at a time
    //Use log4j2
    compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.11.1'

    //Use logback
    //compile group: 'ch.qos.logback', name:'logback-classic', version: '1.2.3'
    //compile group: 'ch.qos.logback', name:'logback-core', version: '1.2.3'

    testCompile('org.spockframework:spock-core:1.1-groovy-2.4') {
        exclude group: 'org.codehaus.groovy'
    }
    testCompile gradleTestKit()
}
configurations.all
{
    resolutionStrategy
    {
        force 'org.codehaus.groovy:groovy-all:2.4.12'
    }
}
Run Code Online (Sandbox Code Playgroud)

3.即使我只想使用slf4j+log4j2组合,我是否需要在gradle.properties中配置一些东西?