class - 将记录器添加到 Jenkins 管道共享库类

标签 class logging groovy jenkins-pipeline shared

试图将记录器添加到 myClass。我想在不使用“script.echo”的情况下在 Jenkins 控制台中看到它。

class myClass implements Serializable {
    def _logger
    def script
    myClass(def script, Map config) {
        _logger = script.getContext(TaskListener.class).getLogger()
        this.script = script
        this.config = config // some data
        log 'Initializing myClass...'
    }

    @NonCPS
    private void log(message) {
        _logger.println(message)
    }
...

def someMethod(){
    ...
    script.sh(someScript)
    ...
}
}

使用 Jenkins 控制台中的这段代码,我看到:
Initializing myClass...                <<<<<<<<<<<<<<<<<
[Pipeline] sh
[test-job] Running shell script
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
an exception which occurred:
    in field com.macys.devops.utils.myClass._logger
    in object com.macys.devops.utils.myClass@54e9341c
    in field com.cloudbees.groovy.cps.impl.BlockScopeEnv.locals
    ....
    in field com.cloudbees.groovy.cps.Continuable.e
    in object org.jenkinsci.plugins.workflow.cps.SandboxContinuable@4c564ac6
    in field org.jenkinsci.plugins.workflow.cps.CpsThread.program
    ...
    in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@6b58d460
Caused: java.io.NotSerializableException: java.io.PrintStream

当我评论

this.script = script:



logger 可以工作,但我无法执行 DSL 命令(例如 script.sh)。

我做错了什么?

最佳答案

尝试移动记录器创建:

   _logger = script.getContext(TaskListener.class).getLogger()


记录方法:
@NonCPS private void log(message) { script.getContext(TaskListener.class).getLogger().println(message) }

关于class - 将记录器添加到 Jenkins 管道共享库类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52431474/

相关文章:

java - 将 Netflix Zuul 与 Netflix Hystrix 相结合

JavaScript如何找到包含字符串的最接近的类

java - 如何在 Java 中跨多个类使用同一个 Scanner

java - 如何正确关闭 log4j2

git - 在命令上设置 git 默认标志

android - 如何在与任何 PC 分开的手机上记录我的 Android 应用程序的 Activity ?

java - 线程 6,RECV TLSv1 警报 : fatal, 握手失败

Groovy - 是否可以将类作为参数传递?

c++ - 使用初始化列表来初始化字段和在构造函数中初始化它们有什么区别?

vba - 类成员函数在简单范围函数上抛出错误