2010-04-05 10 views
15

sto incontrando questo errore:Come posso usare 'log' all'interno di uno src/Groovy/classe

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

Ecco il contenuto della classe:

package org.utils 

class MyClass { 
    int organizationCount = 0 

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

} 

ho bisogno di aggiungere una dichiarazione di importazione? Cosa devo aggiungere? Si noti che la classe si trova in src/groovy/org/utils. So che la variabile 'log' è accessibile in controller, servizi, ecc. Non sono sicuro nelle classi 'src'.

Grazie.

risposta

3

La variabile di registro viene iniettata da Grails e quindi disponibile solo nelle classi specifiche di Grails come controller, servizi, ecc. E non penso che sia possibile "importarla" in alcun modo.

Al di fuori di queste classi, dovrete semplicemente usare log4j "regolarmente", vale a dire

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

grazie per il cavo! sfortunatamente, sto riscontrando problemi nell'utilizzo del metodo "debug". sto avendo questa eccezione: Errore: Nessuna firma del metodo: java.util.logging.Logger.debug() è applicabile per i tipi di argomenti: valori (org.codehaus.groovy.runtime.GStringImpl): [Ci sono 15363 organizzazione (s) trovato.] tuttavia, quando ho provato il livello di 'info', tutto è trovare. Ecco il codice di esempio: String s = "Sono state trovate organizzazioni $ {organizationCount}." Logger.getLogger (this.class.getName()). Info (s) Nota che quando i sostituire 'info' con 'debug', sto avendo tale eccezione. – firnnauriel

+0

@firnnauriel: sembra che tu stia correndo un problema con il metodo di debug sovraccarico contro il tipo magico di groovy. Prova a costruire la stringa come stringa "tradizionale" di Java usando +, invece di un GString. –

+0

Si potrebbe anche usare Log4j, che chiamerà toString() sull'argomento, quindi non importa se si tratta di un GString o String. Importa solo org.apache.log4j.Logger invece di JUL Logger. –

2

In Grails 3, il sistema di registrazione predefinito è il logback. Semplicemente aggiungendo l'annotazione @ Slf4j alla tua classe src/groovy si prenderà cura di tutto.

import groovy.util.logging.Slf4j 

@Slf4j 
class MyUtil { 
0

Log4j è uno dei migliori di registrazione per groove

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 

Spero che vi aiuterà ....

0

Bene l'ho fatto in Grails 3.1.8 che 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" 
    } 
} 
Problemi correlati