2010-04-05 3 views
15

: 클래스의 내용을 여기에는 어떻게 SRC/그루비/클래스 내에서 '로그인'사용이 오류가 발생하고있어

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

을 것 :

package org.utils 

class MyClass { 
    int organizationCount = 0 

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

} 

내가 추가해야합니까는 수입 명세서? 무엇을 추가해야합니까? 클래스는 src/groovy/org/utils에 있습니다. '로그'변수가 컨트롤러, 서비스 등에 액세스 할 수 있다는 것을 알고 있습니다. 'src'클래스에는 확실하지 않습니다.

감사합니다.

답변

3

로그 변수는 grails에 의해 주입되므로 컨트롤러, 서비스 등과 같은 grails 특정 클래스에서만 사용할 수 있습니다. 그리고 어떤 식 으로든 "가져올"수는 없다고 생각합니다. 이러한 클래스 외부

, 당신은 단지 즉

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

주셔서 감사합니다. 불행히도, 난 '디버그'방법을 사용하여 문제가 있어요. 이 예외가 발생했습니다 : 오류 : 메소드의 서명이 없습니다. java.util.logging.Logger.debug()는 인수 유형에 적용 할 수 없습니다 : (org.codehaus.groovy.runtime.GStringImpl) 값 : [15363 조직을 찾았습니다.] 그러나 '정보'수준을 시도하면 모든 것이 발견됩니다. 다음은 샘플 코드입니다. String s = "$ {organizationCount} 개의 조직이 있습니다." Logger.getLogger (this.class.getName()). info (s) 'info'를 'debug'로 바꾸면 예외가 발생합니다. – firnnauriel

+0

@firnnauriel : 오버로드 된 디버그 메소드와 groovy의 타입 매직에 문제가있는 것처럼 보입니다. GString이 아닌 +를 사용하여 "전통적인"Java 문자열로 문자열을 빌드 해보십시오. –

+0

인수에 toString()을 호출하는 Log4j를 사용할 수도 있습니다. 따라서 GString 또는 String인지 여부는 중요하지 않습니다. org.apache.log4j를 가져 오기 만하면됩니다.Logger 대신 Logger를 사용하십시오. –

7

는 그루비 1.8에서, 당신은 또한 (java.util.logging의 경우) @Log 또는 @Log4j와 클래스에 주석을 달 수 있습니다, "정기적으로"의 log4j를 사용해야합니다 (log4j의 경우) log 속성이 "마술처럼"나타납니다. 자세한 내용은 http://docs.codehaus.org/display/GROOVY/Groovy+1.8+release+notes#[email protected]을 참조하십시오.

PS : java.util.logging을 사용하는 경우 debug 메서드가 없어서 log.debug 호출이 계속 실패합니다.

2

grails 3에서 기본 로깅 시스템은 logback입니다. src/groovy 클래스에 @ Slf4j 주석을 추가하기 만하면됩니다.

import groovy.util.logging.Slf4j 

@Slf4j 
class MyUtil { 
0

의 log4j는 ....

끝내

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 

그것은 당신을 도울 것입니다 희망에 가장 적합한 로깅 중 하나입니다

0

Logview를 사용하는 grails 3.1.8에서이 작업을 수행했습니다.

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