Как я могу использовать "журнал" внутри класса 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"
}
}