logging - Iniciando sesión en Groovy Script
log4j java.util.logging (3)
Puede tener el siguiente patrón en su secuencia de comandos (probado en Groovy Editor).
import java.util.logging.Logger
Logger logger = Logger.getLogger("")
logger.info ("I am a test info log")
Los registros anteriores muestran salida a STDOUT. Para registrarlo en un archivo, debe crear un registrador usando getLogger
. Siga la API para su conveniencia.
Tengo un script básico de Groovy, y estoy buscando crear registros lo más simple posible. Quiero que el mensaje vaya a stdout, así como a un archivo de registro, y cada entrada en el archivo de registro tendrá una marca de tiempo.
No puedo usar la notación @Log, porque es un script, y no tengo una clase para inyectar. Esto hubiera sido ideal de lo contrario, creo.
Usar la anotación de registro es la forma más sencilla de habilitar el registro en groovy. Combina esto con una anotación de Grape para desplegar el marco de trabajo de registro y tienes todo lo que necesitas en un script:
//
// Dependencies
// ============
import groovy.util.logging.Slf4j
@Grapes([
@Grab(group=''ch.qos.logback'', module=''logback-classic'', version=''1.0.13'')
])
//
// Classes
// =======
@Slf4j
class StandardGreeting {
def greet() {
log.trace "Hello world"
log.debug "Hello world"
log.warn "Hello world"
log.info "Hello world"
log.error "Hello world"
}
}
@Slf4j
class SpecialGreeting {
def greet() {
log.trace "Hello world"
log.debug "Hello world"
log.warn "Hello world"
log.info "Hello world"
log.error "Hello world"
}
}
@Slf4j
class GreetingRunner {
def greetings = [new StandardGreeting(), new SpecialGreeting()]
def run() {
log.info "Starting to talk"
greetings.each {
it.greet()
}
log.info "Finished talking"
}
}
//
// Main program
// ============
def runner = new GreetingRunner()
runner.run()
Aquí está mi intento de crear un ejemplo mínimo para varias funciones de inicio de sesión, incluido el inicio de sesión en un archivo. Extendiendo la respuesta de @Mark O''Connor arriba
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 o 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>
Ver la documentación de logback también