当前位置: 首页 > 知识库问答 >
问题:

登录Groovy脚本

魏鹤轩
2023-03-14

我有一个基本的Groovy脚本,我希望尽可能简单地创建日志。我希望消息转到标准输出,以及一个日志文件,日志文件中的每个条目都有一个时间戳。

我不能使用@Log符号,因为它是一个脚本,我没有要注入的类。否则我认为这将是理想的。

共有3个答案

慕璞
2023-03-14

下面是我尝试为几个logback功能创建的一个简单示例,包括登录到文件。扩展上述Mark O'Connor的答案

富。groovy:

import groovy.util.logging.Slf4j

@Grab('ch.qos.logback:logback-classic:1.2.1') 

@Slf4j
class Foo {
    @Slf4j
    static class Bar {
        def bar() {
            assert log.name == 'Foo$Bar'
            assert log.class == ch.qos.logback.classic.Logger
            log.trace "bar"
            log.debug "bar"
            log.warn  "bar"
            log.info  "bar"
            log.error "bar"
        }
    }

    def foo() {
        assert log.name == "Foo"
        assert log.class == ch.qos.logback.classic.Logger
        log.trace "foo"
        log.debug "foo"
        log.warn  "foo"
        log.info  "foo"
        log.error "foo"
    }
}

@Slf4j
class Baz {
    def baz() {
        log.name = 'Baz'
        assert log.name == 'Baz'
        assert log.class == ch.qos.logback.classic.Logger
        log.trace "baz"
        log.debug "baz"
        log.warn  "baz"
        log.info  "baz"
        log.error "baz"
    }
}

new Foo().foo()
new Foo.Bar().bar()
new Baz().baz()

logback-test.xml或logback.xml:

<configuration debug="true"> <!-- debug attr enables status data dump -->

   <timestamp key="sec" datePattern="yyyyMMdd_HHmmss"/>

   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
      <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
      <encoder>
         <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> <!-- see Chapter 6 Layouts for format specifiers -->
      </encoder>
   </appender>

   <!-- for RollingFileAppender see Chapter 3 Appenders -->
   <appender name="FILE" class="ch.qos.logback.core.FileAppender">
      <file>foo_${sec}.log</file>
      <append>true</append> <!-- true is the default for append -->
      <immediateFlush>true</immediateFlush> <!-- true is the default for immediateFlush -->
      <encoder>
         <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
      </encoder>
   </appender>

   <!-- TRACE < DEBUG < INFO <  WARN < ERROR -->
   <!-- Read Chapter 2 Architecture of logback doc for effective
      level (level inheritance) and accumulation (appender additivity) -->
   <root level="debug">
      <appender-ref ref="STDOUT"/>
   </root>

   <logger name="Foo" level="trace" additivity="true">
      <appender-ref ref="FILE"/>
   </logger>

   <!-- if a logger isn't specified for a name, its level="null" and additivity="true", "null" being synonymous to "inherited" -->

   <!-- '$' acts as '.' it seems -->
   <logger name="Foo$Bar" level="inherited" additivity="true"/> <!-- if additivity false, no appender, otherwise, STDOUT and FILE -->

</configuration>

另请参阅logback留档

金何平
2023-03-14

使用日志注释是在groovy中启用日志记录的最简单方法。将其与Grape注释相结合,以下拉日志框架,您可以在一个脚本中获得所需的一切:

// 
// Dependencies
// ============
import groovy.util.logging.Slf4j

@Grapes([
    @Grab(group='ch.qos.logback', module='logback-classic', version='1.0.13') 
])

// 
// Classes
// =======

@Slf4j
class StandardGreeting {

    def greet() {
        log.trace "Hello world"
        log.debug "Hello world"
        log.warn  "Hello world"
        log.info  "Hello world"
        log.error "Hello world"
    }
}

@Slf4j
class SpecialGreeting {

    def greet() {
        log.trace "Hello world"
        log.debug "Hello world"
        log.warn  "Hello world"
        log.info  "Hello world"
        log.error "Hello world"
    }
}

@Slf4j
class GreetingRunner {

    def greetings  = [new StandardGreeting(), new SpecialGreeting()]

    def run() {
        log.info "Starting to talk"

        greetings.each {
            it.greet()
        }

        log.info "Finished talking"
    }
}

// 
// Main program
// ============
def runner = new GreetingRunner()

runner.run()
司徒高丽
2023-03-14

您可以在脚本中使用以下模式(在Groovy编辑器中尝试)。

import java.util.logging.Logger

Logger logger = Logger.getLogger("")
logger.info ("I am a test info log")

以上记录输出到标准输出。为了将其记录到文件中,您必须使用getLogger创建一个记录器。为方便起见,请遵循API。

 类似资料:
  • 我设置了一个cron任务来调用这个漂亮的脚本。在groovy脚本中,我使用“ch.qos.logback”来记录日志。 如果我手动运行脚本,日志工作正常,但是当通过cron作业运行时,没有输出到日志文件。 有人见过类似的问题吗?谢谢你!

  • 问题内容: 我是Jenkins中使用的Groovy脚本的新手。我的问题是,我们如何根据作业名称和内部版本号获取作业的时间戳? 示例 :我想获取“ MyDeployJob”(JobName)的时间戳,并获取BuildNumber-105的时间戳。 我尝试使用方法方法,但无法正常工作。另外,我发现环境变量具有时间戳,但是我无法弄清楚如何使用Groovy Script获取细节。请帮助。 提前致谢。 问题

  • 我有一些库脚本:lib1。groovy: lib2.groovy: lib3.groovy: 并希望在另一个脚本中使用它们:conf.groovy: conf.groovy是由用户配置的,他不知道我的后台lib脚本!他只知道提供的方法/任务:a()、b()、c()。实际上,我创建lib脚本是为了简化用户。 有没有办法将lib目录中的所有脚本(脚本lib1、lib2m、lib3)都包含到conf.g

  • 我对Groovy很陌生,我想从主groovy脚本中的另一个groovy脚本中导入一个类。我已经看到了这篇文章。但是由于环境限制,我不能使用GroovyClassLoader之类的函数或导入任何库/框架。我唯一的可能性是使用评估方法。 我试过这个: 主脚本(评估不会抛出任何错误) Csvreader脚本 但是,我需要通过evaluate调用传递参数(并将方法移到类之外),或者需要创建类的实例。不幸的

  • 我现在正在编写一个基本的PhP登录脚本,以便以后开发,我已经掌握了登录工具。php文件,但当我使用错误的详细信息登录(检查登录工具是否正常工作)时,我会出现以下错误: “PHP语法检查:解析错误:语法错误,第27行代码中出现意外的'$un'(T_变量)$q=”从username='$un'和pass=SHA1('$p')的用户中选择用户id、用户名“;” 任何关于为什么我得到这个错误的帮助都将不胜

  • 我有一个Python Spark程序,我使用运行该程序。我想把日志记录语句放进去。 我想使用Spark使用的相同记录器,以便日志消息以相同的格式显示,并且级别由相同的配置文件控制。我该怎么做? 我尝试将语句放入代码中,并从。在这两种情况下,我都能看到Spark的日志消息,但我看不到。我一直在看Python日志文档,但没有从中找到答案。 不确定这是否是特定于提交给Spark的脚本,或者只是我不了解日