从groovy脚本

时间:2016-06-07 17:00:58

标签: groovy logback logback-groovy

我有一个Java库,在其上面我有轻量级的groovy脚本,它们可以作为基于终端的命令行实用程序。所以而不是要求我的用户

java -cp ... com.foo.bar.package.SomeMainClass ...

他们可以访问“标准”POSIX类实用程序:

footool -a <arg> -b <another> -vfg <positional_arg>

我希望-v参数控制日志记录级别到控制台appender。现在,我 in 一个groovy脚本。 Groovy拥有最出色的CLIbuilder,可以轻松解析参数。使用groovy程序配置Logback。我想做的应该很容易。正确?

然而,似乎几乎不可能检查-v标志的值,并因此为已经在XML中指定的appender设置阈值过滤器Level,甚至创建从头开始过滤和追加并添加到记录器。

真的?似乎必须是一种不为Joran编写30行Java代码的方式。我需要做些什么才能在我的groovy脚本中使用这个(或者不是30行Joran的Java代码的东西)?

def cliBuilder = new CliBuilder...
def options = cli.parse(args)
def logLevel = options.v ? Level.DEBUG : Level.INFO

appender("CONSOLE", ConsoleAppender) {
  filter(ThresholdFilter) {
    level = logLevel
  }
  encoder(PatternLayoutEncoder) {
    pattern = "%-4relative [%thread] %-5level %logger{30} - %msg%n"
  }
}

1 个答案:

答案 0 :(得分:2)

您可以简单地使用不带&魔法的程序化Groovy配置:

logback.groovy

这对于将日志记录重定向到import ch.qos.logback.classic.Logger import static org.slf4j.LoggerFactory.getLogger import static org.slf4j.Logger.ROOT_LOGGER_NAME as ROOT import static ch.qos.logback.classic.Level.WARN ((Logger) getLogger(ROOT)).setLevel(WARN) // one-liner ((ch.qos.logback.classic.Logger) org.slf4j.LoggerFactory.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME)).setLevel(ch.qos.logback.classic.Level.WARN)

也很有用
stderr