多个脚本的简单 Groovy Logback 配置

Simple Groovy Logback Configuration for Multiple Scripts

我有以下内容:

C:\Scripts\Groovy\foo.groovy

@Grab (group = 'ch.qos.logback', module = 'logback-classic', version = '1.1.3')
def logger = org.slf4j.LoggerFactory.getLogger ('foo')
logger.info ("Hello, Foo!')

C:\Scripts\Groovy\bar.groovy

@Grab (group = 'ch.qos.logback', module = 'logback-classic', version = '1.1.3')
def logger = org.slf4j.LoggerFactory.getLogger ('bar')
logger.info ("Hello, Bar!')

脚本分别通过groovy foo.bargroovy bar.groovy执行。

问题:

  1. 每个脚本可以加几行代码追加日志 分别发送给 "foo.log" 和 "bar.log" 的消息?
  2. 可以个人 创建配置文件,例如 "logback_foo.groovy" 和 "logback_bar.groovy",将日志消息附加到日志文件?
  3. 可以 常用配置文件,例如"logback.groovy",用于 将消息附加到每个脚本的日志文件?

我有多个小型实用程序脚本,不想为每个脚本设置一个 Gradle 项目。我确实将 Gradle 用于重要项目,并且我已经成功地让一个更大的项目发挥作用。

我是 Groovy 和 LogBack 的新手,所以请提供每个 script/configuration 文件的内容和执行脚本的命令。

答案:

  1. 您可以直接在静态初始化程序中添加一个 FileAppender,如本问题的答案所示:Groovy + write log to file + Inject Logging Using Annotations

  2. 您还可以将以上内容与每个脚本的单独配置文件结合使用:

logback_foo.groovy:

foo {
    file = 'foo.log'
}

并使用ConfigSlurper阅读:

def config = new ConfigSlurper().parse(new File('logback_foo.groovy').toURL())
assert config.foo.file == 'foo.log'
  1. 但是恕我直言,最好的方法是利用 logback's native groovy configurationlogback.groovy,这样:

logback.groovy: (logback 配置)

appender('console', ConsoleAppender) {
    encoder(PatternLayoutEncoder) {
        pattern = "%d{HH:mm:ss.SSS} %-5level [%thread] - %msg%n"
    }
}

appender('foo', FileAppender) {
    file = 'foo.log'
    append = true
    encoder(PatternLayoutEncoder) {
        pattern = "%d{HH:mm:ss.SSS} %-5level [%thread] - %msg%n"
    }
}

appender('bar', FileAppender) {
    file = 'foo.log'
    append = true
    encoder(PatternLayoutEncoder) {
        pattern = "%d{HH:mm:ss.SSS} %-5level [%thread] - %msg%n"
    }
}

logger('Foo', INFO, ['console', 'foo'])
logger('Bar', INFO, ['bar'])

foo.groovy:(bar.groovy会很相似)

@Grapes([
    @GrabConfig(systemClassLoader=true),
    @Grab(group='ch.qos.logback', module='logback-classic', version='1.1.3')
])

import groovy.util.logging.Slf4j

@Slf4j
class Foo {
    static main(args) {
        log.debug 'Foo debug'
        log.info  'Foo info'
        log.warn  'Foo warn'
        log.error 'Foo error'
    }
}