2010-04-05 8 views
15

: sınıfın içeriği İşteNasıl bir src/harika/sınıf içinde 'log' kullanabilirsiniz ben bu sorunu yaşamaya devam ediyorum

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

oluyor:

package org.utils 

class MyClass { 
    int organizationCount = 0 

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

} 

i eklemem gerekir mi bir ithalat beyanı? Ne eklemek gerekiyor? Sınıfın src/groovy/org/utils içinde bulunduğunu unutmayın. 'Log' değişkeninin kontrol cihazlarında, servislerde vb. Erişilebilir olduğunu biliyorum. 'Src' sınıflarında emin değilim.

Teşekkürler.

cevap

3

Günlük değişkeni, öbekler tarafından enjekte edilir ve böylece yalnızca denetleyiciler, hizmetler, vb. Gibi sınıflara özgü sınıflarda kullanılabilir - ve bunu hiçbir şekilde "içe aktarabileceğinizi" düşünmüyorum. bu sınıfların dışında

, sadece yani

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

Kurşun için teşekkürler! Maalesef, 'debug' yöntemini kullanma konusunda sorun yaşıyorum. Bu istisna yaşıyorum: Hata: Yöntem imzası yok: java.util.logging.Logger.debug() argüman türleri için geçerlidir: (org.codehaus.groovy.runtime.GStringImpl) değerler: [15363 vardır. Kuruluş (lar): Ancak, 'bilgi' seviyesini denediğimde, her şey yolunda. İşte örnek kod: String s = "$ {organizationCount} kuruluşu var." Logger.getLogger (this.class.getName()) info (s) 'Bilgi' yerine 'debug' ile değiştirdiğimde, bu özel duruma sahip olduğumu unutmayın. – firnnauriel

+0

@firnnauriel: aşırı yüklenen hata ayıklama yöntemi ile groovy'un tür sihirbazında bir problem yaşadınız gibi görünüyor. Dizeyi, bir GString yerine + kullanarak "geleneksel" Java dizesi olarak oluşturmayı deneyin. –

+0

Ayrıca, argümandaki toString() öğesini çağırmak üzere Log4j'yi de kullanabilirsiniz, bu yüzden bir GString veya String olup olmaması önemli değildir. Sadece org.apache.log4j dosyasını içe aktarın.JUL Logger yerine Logger. –

7

Groovy 1.8, ayrıca (java.util.logging için) @Log veya @Log4j ile sınıf açıklama olabilir "düzenli" log4j kullanmak gerekecektir (log4j için) ve "sihirli" bir log özelliğine sahip olacaktır. Detaylar için bakınız http://docs.codehaus.org/display/GROOVY/Groovy+1.8+release+notes#[email protected].

Not: debug yönteminin kullanılmadığından, java.util.logging özelliğini kullanmak log.debug çağrı başarısız olur.

2

3. sınıflarda, varsayılan günlük kaydı sistemi günlüğe kaydedilir. Src/groovy sınıfınıza @ Slf4j ek açıklamalarını eklemeniz yeterli olacaktır.

import groovy.util.logging.Slf4j 

@Slf4j 
class MyUtil { 
0

Log4J ....

harika

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 

o size yardımcı olacaktır Umut en iyi günlük biridir

0

Eh, bunu Logback kullanan 3.1.8 grails'de yaptım.

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" 
    } 
} 
İlgili konular