多个脚本的简单 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.bar
和groovy bar.groovy
执行。
问题:
- 每个脚本可以加几行代码追加日志
分别发送给 "foo.log" 和 "bar.log" 的消息?
- 可以个人
创建配置文件,例如 "logback_foo.groovy" 和
"logback_bar.groovy",将日志消息附加到日志文件?
- 可以
常用配置文件,例如"logback.groovy",用于
将消息附加到每个脚本的日志文件?
我有多个小型实用程序脚本,不想为每个脚本设置一个 Gradle 项目。我确实将 Gradle 用于重要项目,并且我已经成功地让一个更大的项目发挥作用。
我是 Groovy 和 LogBack 的新手,所以请提供每个 script/configuration 文件的内容和执行脚本的命令。
答案:
您可以直接在静态初始化程序中添加一个 FileAppender
,如本问题的答案所示:Groovy + write log to file + Inject Logging Using Annotations
您还可以将以上内容与每个脚本的单独配置文件结合使用:
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'
- 但是恕我直言,最好的方法是利用 logback's native groovy configuration 和
logback.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'
}
}
我有以下内容:
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.bar
和groovy bar.groovy
执行。
问题:
- 每个脚本可以加几行代码追加日志 分别发送给 "foo.log" 和 "bar.log" 的消息?
- 可以个人 创建配置文件,例如 "logback_foo.groovy" 和 "logback_bar.groovy",将日志消息附加到日志文件?
- 可以 常用配置文件,例如"logback.groovy",用于 将消息附加到每个脚本的日志文件?
我有多个小型实用程序脚本,不想为每个脚本设置一个 Gradle 项目。我确实将 Gradle 用于重要项目,并且我已经成功地让一个更大的项目发挥作用。
我是 Groovy 和 LogBack 的新手,所以请提供每个 script/configuration 文件的内容和执行脚本的命令。
答案:
您可以直接在静态初始化程序中添加一个
FileAppender
,如本问题的答案所示:Groovy + write log to file + Inject Logging Using Annotations您还可以将以上内容与每个脚本的单独配置文件结合使用:
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'
- 但是恕我直言,最好的方法是利用 logback's native groovy configuration 和
logback.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'
}
}