Đây là nỗ lực của tôi lúc tạo ra một ví dụ rất nhỏ cho một số tính năng logback bao gồm đăng nhập vào một tập tin. Mở rộng câu trả lời @ Mark O'Connor trên
foo.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 hoặc 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>
Xem logback documentation cũng
này sẽ không làm việc với kịch bản không có một lớp được định nghĩa, đó là những gì tôi nghĩ Steve đang ngụ ý. –
@RomanGoyenko Đủ công bằng, nhưng các tập lệnh có thể được cấu trúc bằng cách sử dụng các lớp học. Ghi chú đăng nhập rất tiện lợi! –