Как я могу использовать "журнал" внутри класса src/groovy/class

Я встречаю эту ошибку:

groovy.lang.MissingPropertyException: Нет такого свойства: log для класса: 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. Я знаю, что переменная "log" доступна в контроллерах, службах и т.д. Не уверен в классах "src".

Спасибо.

Ответы

Ответ 1

В Groovy 1.8 вы также можете аннотировать класс с помощью @Log (для java.util.logging) или @Log4j (для log4j), и он будет "волшебным" иметь свойство log. Подробнее см. http://docs.codehaus.org/display/GROOVY/Groovy+1.8+release+notes#[email protected].

PS: Если вы используете java.util.logging, вызов log.debug все равно будет терпеть неудачу, потому что нет метода debug.

Ответ 2

Лог-переменная вводится grails и, следовательно, доступна только в классах, специфичных для grails, таких как контроллеры, службы и т.д. - и я не думаю, что вы можете "импортировать" это каким-либо образом.

Вне этих классов вам просто нужно будет регулярно использовать log4j, т.е.

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

Ответ 3

В grails 3 система регистрации по умолчанию - это logback. Просто добавление аннотации @Slf4j к вашему классу src/ groovy позаботится о вещах.

import groovy.util.logging.Slf4j

@Slf4j
class MyUtil {

Ответ 4

Log4j является одним из лучших протоколов для 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 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

Надеюсь, это поможет вам....

Ответ 5

Хорошо, я сделал это в grails 3.1.8, который использует 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"
   }
}