нет выхода log4j в приложении Grails - PullRequest
11 голосов
/ 02 июня 2009

В моем приложении Grails 1.1 есть следующая конфигурация log4j

log4j = {

    // Enable Hibernate SQL logging with param values
    trace 'org.hibernate.type'
    debug 'org.hibernate.SQL'

    debug 'com.mycompany'

    appenders {
        console name: 'stdout', layout: pattern(conversionPattern: '%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %c{1} - %m%n')
        file name: 'hibeFile', file: 'hibe.log', layout: pattern(conversionPattern: '%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %c{1} - %m%n')
    }

    // By default, messages are logged at the error level to both the console and hibe.log
    root {
        error 'stdout', 'hibeFile'
        additivity = true
    }
}

Когда я запускаю модульные тесты, единственный генерируемый вывод журнала производится из классов Hibernate. Я не понимаю, почему для моих собственных классов не создаются выходные данные журналов, то есть те, которые находятся в пространстве имен com.mycompany. Как ни странно, когда я запускаю интеграционные тесты, вывод log4j соответствует ожиданиям.

Если я захожу в протокол испытаний для модульного теста и нажимаю ссылку «System.out», я вижу свои сообщения журнала в следующем формате:

DEBUG (member.InviteServiceTests): Calling getInvite with member (4517)

Обратите внимание, что это не тот шаблон, который я указал в моей конфигурации log4j. Кроме того, если я изменю конфигурацию log4j с:

debug 'com.mycompany'

до:

fatal 'com.mycompany'

Я все еще вижу сообщения журнала на уровне отладки в отчете о тестировании. Кажется, что корневой логгер переопределяется при запуске модульных тестов? Я пытался записывать классы под com.mycompany, используя отдельный регистратор, но это, похоже, не имеет никакого значения

Спасибо, Дон

Ответы [ 4 ]

17 голосов
/ 07 июня 2009

Don

Если классы, которые вы пытаетесь зарегистрировать, являются стандартными классами Grails (домен, контроллер, служба и т. Д.), Вы сможете использовать что-то вроде:

 log4j = {

    // Logging warnings and higher for all of the app
    warn 'grails.app'
    // Logging infos and higher for all controllers
    info 'grails.app.controller'
    // Logging debug and higher for the BarService
    debug 'grails.app.service.BarService'

    appenders {
    // ...as above...
    }    
    root {
    // ...as above...
    }
}

В руководстве пользователя Grails чуть более подробное описание в разделе регистрации.

9 голосов
/ 05 июня 2009

Так как Grails регистрирует делегатов в log4j, вы можете использовать -Dlog4j.debug и посмотреть, как настроен log4j ( ссылка ). Возможно, поднят другой файл.


Существует как минимум одно исправление критической ошибки для ведения журнала, которое нацелено на 1.2, но не на 1.1.x. Конфигурация похожа на вашу. Возможно, сообщения ошибочно зарегистрированы в другом файле?

0 голосов
/ 01 сентября 2011

Вам нужно ввести регистратор в ваш контроллер в модульном тесте:

mockLogging(<controller class name>, true)

Второй аргумент говорит, чтобы регистрировать сообщения отладки и ниже.

0 голосов
/ 03 июня 2009

Don

Я не совсем раскрыл тонкости ведения журналов DSL в 1.1, но это может быть полезно для вас: плагин динамического ведения журнала позволяет вам включать / выключать каналы журналирования, когда ваше приложение работает, а также генерирует некоторые настройки, можно потом поставить в конф.груве.

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

...