2010-04-05 8 views
15

ich begegnet diesen Fehler:Wie kann ich in einem src/groovy/class 'log' verwenden

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

Hier ist der Inhalt der Klasse:

package org.utils 

class MyClass { 
    int organizationCount = 0 

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

} 

Muss ich hinzufügen eine Importaussage? Was muss ich hinzufügen? Beachten Sie, dass sich die Klasse in src/groovy/org/utils befindet. Ich weiß, dass die Variable 'log' in Controllern, Diensten usw. zugänglich ist. Nicht sicher in 'src' Klassen.

Danke.

Antwort

3

Die Logvariable wird von Grails injiziert und steht daher nur in den grailsspezifischen Klassen wie Controllern, Diensten usw. zur Verfügung - und ich glaube nicht, dass Sie das "importieren" können.

Außerhalb dieser Klassen, werden Sie nur log4j verwenden müssen "regelmäßig", dh

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

danke für die führen! Leider habe ich Probleme mit der Debug-Methode. Ich habe diese Ausnahme: Fehler: Keine Signatur der Methode: java.util.logging.Logger.debug() gilt für Argumenttypen: (org.codehouse.groovy.runtime.GStringImpl) Werte: [Es gibt 15363 Organisation (en) gefunden.] jedoch, wenn ich 'Info' Ebene versuchte, ist alles zu finden. Hier ist der Beispielcode: String s = "Es gibt $ {organisationCount} Organisation (en) gefunden." Logger.getLogger (this.class.getName()). Info (s) Beachten Sie, dass ich diese Ausnahme habe, wenn ich 'info' durch 'debug' ersetze. – firnnauriel

+0

@firnnauriel: Es sieht so aus, als ob du ein Problem mit der überladenen Debug-Methode und der Magie des Groovy-Typs hast. Versuchen Sie, die Zeichenfolge als "traditionelle" Java-Zeichenfolge zu erstellen, indem Sie + anstelle von GString verwenden. –

+0

Sie könnten auch Log4j verwenden, das toString() für das Argument aufruft, also ist es egal, ob es ein GString oder String ist. Importieren Sie einfach org.apache.log4j.Logger anstelle des JUL Loggers. –

7

In Groovy 1.8, können Sie auch die Klasse mit @Log mit Anmerkungen versehen kann (für java.util.logging) oder @Log4j (für log4j) und es wird "magisch" eine log Eigenschaft haben. Details finden Sie unter http://docs.codehaus.org/display/GROOVY/Groovy+1.8+release+notes#[email protected].

PS .: Wenn Sie java.util.logging verwenden, wird der Aufruf log.debug immer noch fehlschlagen, weil es keine debug Methode gibt.

2

In Grails 3 ist das Standardprotokollierungssystem Logback. Einfach die @ Slf4j-Annotation zu Ihrer src/groovy-Klasse hinzufügen, wird sich um alles kümmern.

import groovy.util.logging.Slf4j 

@Slf4j 
class MyUtil { 
0

Log4j ist eines der besten Protokollierung für groovy

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 

es Hoffnung wird Ihnen helfen ....

0

Nun, ich habe dies in Grails 3.1.8 getan, die Logback verwendet.

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" 
    } 
} 
Verwandte Themen