2010-04-05 35 views
15

Tôi đang gặp phải lỗi này:Làm thế nào tôi có thể sử dụng 'đăng nhập' bên trong một src/groovy/lớp

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

Dưới đây là nội dung của lớp:

package org.utils 

class MyClass { 
    int organizationCount = 0 

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

} 

Do i cần phải thêm một tuyên bố nhập khẩu? Tôi cần thêm gì? Lưu ý rằng lớp này nằm trong src/groovy/org/utils. Tôi biết rằng biến 'log' có thể truy cập trong bộ điều khiển, dịch vụ, v.v. Không chắc chắn trong các lớp 'src'.

Cảm ơn.

Trả lời

3

Biến nhật ký được tiêm bởi grails và do đó chỉ có sẵn trong các lớp đặc trưng của grails như bộ điều khiển, dịch vụ, v.v ... và tôi không nghĩ bạn có thể "nhập" theo bất kỳ cách nào.

Bên ngoài các lớp này, bạn sẽ chỉ phải sử dụng log4j "thường xuyên", tức là

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

cảm ơn khách hàng tiềm năng! thật không may, tôi đang gặp sự cố khi sử dụng phương pháp 'gỡ lỗi'. Tôi có ngoại lệ này: Lỗi: Không có chữ ký của phương thức: java.util.logging.Logger.debug() được áp dụng cho các loại đối số: (org.codehaus.groovy.runtime.GStringImpl) giá trị: [Có 15363 (các) tổ chức được tìm thấy.] tuy nhiên, khi tôi thử mức 'thông tin', mọi thứ đều tìm thấy. Đây là mã mẫu: Chuỗi s = "Có $ {organizationCount} tổ chức được tìm thấy." Logger.getLogger (this.class.getName()). Thông tin (s) Lưu ý rằng khi tôi thay thế 'thông tin' bằng 'debug', tôi có ngoại lệ đó. – firnnauriel

+0

@firnnauriel: có vẻ như bạn đang gặp sự cố với phương pháp gỡ lỗi quá tải so với ma thuật loại của groovy. Hãy thử tạo chuỗi dưới dạng chuỗi Java "truyền thống" bằng cách sử dụng dấu +, thay vì GString. –

+0

Bạn cũng có thể sử dụng Log4j, mà sẽ gọi toString() trên đối số, do đó, nó không quan trọng nếu nó là một GString hoặc String. Chỉ cần nhập org.apache.log4j.Logger thay vì JUL Logger. –

7

Trong Groovy 1.8, bạn có thể cũng chú thích các lớp học với @Log (ví java.util.logging) hoặc @Log4j (đối với log4j) và nó sẽ "kỳ diệu" có thuộc tính log. Xem http://docs.codehaus.org/display/GROOVY/Groovy+1.8+release+notes#[email protected] để biết chi tiết.

PS .: Nếu bạn sử dụng java.util.logging cuộc gọi log.debug sẽ vẫn không thành công do không có phương thức debug.

2

Trong grails 3, hệ thống ghi nhật ký mặc định là logback. Chỉ cần thêm chú thích @ Slf4j vào lớp src/groovy của bạn sẽ xử lý mọi thứ.

import groovy.util.logging.Slf4j 

@Slf4j 
class MyUtil { 
0

Log4j là một trong những khai thác gỗ tốt nhất cho 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 

Hy vọng nó sẽ giúp bạn ....

0

Vâng, tôi đã làm điều này trong grails 3.1.8 sử dụng 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" 
    } 
} 
Các vấn đề liên quan