2010-04-05 18 views
15

Estoy encontrando este error:¿Cómo puedo utilizar 'log' dentro de un src/maravilloso/clase

groovy.lang.MissingPropertyException: No such property: log for class: org.utils.MyClass

Aquí está el contenido de la clase:

package org.utils 

class MyClass { 
    int organizationCount = 0 

    public int getOrganizationCount(){ 
     log.debug "There are ${organizationCount} organization(s) found." 
     return organizationCount 
    } 

} 

¿Es necesario añadir una declaración de importación? ¿Qué necesito agregar? Tenga en cuenta que la clase se encuentra en src/groovy/org/utils. Sé que la variable 'log' está accesible en controladores, servicios, etc. No estoy seguro en las clases 'src'.

Gracias.

Respuesta

3

La variable de registro se inyecta por medio de grails y, por lo tanto, solo está disponible en las clases específicas de grails, como controladores, servicios, etc., y no creo que pueda "importar" de ninguna manera.

Fuera de estas clases, que sólo tendrá que usar log4j "regular", es decir

Logger.getLogger(MyClass.class).debug() 
+0

gracias por la iniciativa! desafortunadamente, estoy teniendo problemas al usar el método de "depuración". Tengo esta excepción: Error: No hay firma del método: java.util.logging.Logger.debug() es aplicable para tipos de argumento: (org.codehaus.groovy.runtime.GStringImpl) values: [Hay 15363 organización (es) encontrada.] Sin embargo, cuando probé el nivel de 'información', todo está encontrado. Aquí está el código de ejemplo: Cadena s = "Se encontraron $ {organizationCount} organización (es)." Logger.getLogger (this.class.getName()). Info (s) Tenga en cuenta que cuando reemplazo 'info' con 'debug', estoy teniendo esa excepción. – firnnauriel

+0

@firnnauriel: parece que estás teniendo un problema con el método de depuración sobrecargado frente a la magia tipo groovy. Intente construir la cadena como una cadena Java "tradicional" usando +, en lugar de una cadena de caracteres. –

+0

También podría usar Log4j, que llamará aString() en el argumento, por lo que no importa si se trata de una cadena de caracteres o cadena. Solo importa org.apache.log4j.Logger en lugar de JUL Logger. –

2

En grails 3, el sistema de registro predeterminado es logback. Simplemente agregando la anotación @ Slf4j a su clase src/groovy se encargará de todo.

import groovy.util.logging.Slf4j 

@Slf4j 
class MyUtil { 
0

Log4j es uno de los mejores de registro para maravilloso

import groovy.util.logging.Log4j 

@Log4j 
public class MyClass{ 
//Use for logger check 
public static void myMethod(){ 
    //log.error(null, "This is the log message", throwable) 

    //log.error(null, "This is the log message", throwable) 

    //log.info("This is the message for info") 

    //log.debugg("This is the message for debugging") 
} 
} 

Log4j.properties

# Define the root logger with appender file 
log =folderpath 
log4j.rootLogger=INFO, R, stdout 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 

# Pattern to output the caller's file name and line number. 
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 
# %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%C:%L [%t] - %m%n 

log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=${log}/filename.log 

log4j.appender.R.MaxFileSize=2048KB 
# Keep one backup file 
log4j.appender.R.MaxBackupIndex=1 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern="%d %5p %c{1}:%L - %m%n" 
# %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%C:%L [%t] - %m%n 

# Direct log messages to stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

espero que le ayudará a ....

0

Bueno, he hecho esto en Grails 3.1.8 que usa Logback.

import org.apache.commons.logging.LogFactory 

public class MyClass{ 

    static final LOG = LogFactory.getLog(this) 

    def function(){ 
    LOG.debug "Debug message" 
    } 

    static staticFunction(){ 
    LOG.debug "Another debug message" 
    } 
} 
Cuestiones relacionadas