example logging groovy

logging - log4j example



Groovy Script y log4j (2)

Aquí hay un ejemplo simple que usa @Grab para extraer la log4j lib, y luego usa la anotación integrada de Groovy''s @Log4j para conectar una variable de log .

Luego puede configurar su registrador en el script y agregar un FileAppender

@Grab(''log4j:log4j:1.2.17'') import org.apache.log4j.* import groovy.util.logging.* @Log4j class HelloWorld{ def execute() { // Need to set log level as described here: // http://groovy.329449.n5.nabble.com/log4j-annotation-not-working-td4368806.html log.level = Level.INFO // add an appender to log to file log.addAppender(new FileAppender(new TTCCLayout(), ''myscript.log'')); // this will NOT print/write as the loglevel is info log.debug ''Execute HelloWorld.'' // this will print log.info ''Simple sample to show log field is injected.'' } } def helloWorld = new HelloWorld() helloWorld.execute()

Cuando corras verás esto en tu myscript.log

11 [main] INFO HelloWorld - Simple sample to show log field is injected.

Desafortunadamente, la configuración del registrador de archivos config.groovy es específica de Grails . Ya que no estás en Grails, el DSL no está ahí para interpretar las cosas de log4j. Sin embargo, eche un vistazo a ConfigSlurper en Groovy que parece que le proporcionará un DSL similar para traer su configuración.

He estado buscando aquí y allá buscando un ejemplo funcional de log4j logging en un script Groovy.

No hay clase explícita (es solo un script). No hay griales. No consolar ... archivar.

Sólo un simple script con log4j.

¿Es log4j mejor para esto (groovy) o son mejores otras bibliotecas de registro?

¿Alguien me puede señalar un ejemplo o una demostración de cómo se hace esto? Me las arreglé para ponerlo en la consola, pero no para archivar.

Estaría bien si la configuración de log4j estuviera también en un archivo config.groovy, ya que estoy usando un archivo de configuración para otras cosas.

ACTUALIZAR

Gracias al ejemplo de neversleepz, tengo el siguiente trabajo bien:

archivo config.groovy:

log4j { appender.stdout = "org.apache.log4j.ConsoleAppender" appender."stdout.layout"="org.apache.log4j.PatternLayout" appender.scrlog = "org.apache.log4j.FileAppender" appender."scrlog.layout"="org.apache.log4j.PatternLayout" appender."scrlog.layout.ConversionPattern"="%d %5p %c{1}:%L - %m%n" appender."scrlog.file"="rootscript.log" rootLogger = "debug,scrlog,stdout" }

Y mi guión:

import org.apache.log4j.* import groovy.util.logging.* def config = new ConfigSlurper().parse(new File(''config.groovy'').toURL()) PropertyConfigurator.configure(config.toProperties()) Logger log = Logger.getInstance(getClass()) // Need to set log level as described here: // http://groovy.329449.n5.nabble.com/log4j-annotation-not-working-td4368806.html log.level = Level.INFO // this will NOT print/write as the loglevel is info log.debug ''Executing Script.'' // this will print log.info ''Simple sample to show log INFO field is injected.'' log.warn ''Simple sample to show log WARN field is injected.'' log.error ''Simple sample to show log ERR field is injected.''

¡Gracias por esto!

También he configurado para un RollingFileAppender, y DailyRollingFileAppender también los pondré aquí:

log4j { // appender.stdout = "org.apache.log4j.ConsoleAppender" appender."stdout.layout"="org.apache.log4j.PatternLayout" // appender.scrlog = "org.apache.log4j.DailyRollingFileAppender" appender."scrlog.DatePattern"="''.''yyyy-MM-dd" appender."scrlog.Append"="true" appender."scrlog.File"="rootscript.log" appender."scrlog.layout"="org.apache.log4j.PatternLayout" appender."scrlog.layout.ConversionPattern"="%d %5p %c{1}:%L - %m%n" rootLogger="debug,scrlog,stdout" }

y

log4j { // appender.stdout = "org.apache.log4j.ConsoleAppender" appender."stdout.layout"="org.apache.log4j.PatternLayout" // appender.scrlog = "org.apache.log4j.DailyRollingFileAppender" appender."scrlog.DatePattern"="''.''yyyy-MM-dd" appender."scrlog.Append"="true" appender."scrlog.File"="rootscript.log" appender."scrlog.layout"="org.apache.log4j.PatternLayout" appender."scrlog.layout.ConversionPattern"="%d %5p %c{1}:%L - %m%n" rootLogger="debug,scrlog,stdout" logger.ProcessLogger="debug,scrlog" }


Otra forma de hacer esto sería usar el paquete de registro de Groovy. Puede usar lo mismo fácilmente importando el registro de utilidad y utilizando la anotación @Log como en este ejemplo

import groovy.util.logging.* @Log class Test{ public class() { log.debug "Logging" } }

Sin embargo, dado que la anotación funciona en una clase, necesitaría crear su script groovy dentro de una clase. Los scripts de forma libre no obtienen el acceso del registrador de esta manera.

Espero que esto ayude.