我有一个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"
}
}
答案 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