Почему Grails (в Tomcat) регистрирующийся и к catalina.out и к моему пользовательскому файлу appender?

У меня есть следующее для моей конфигурации log4j DSL в Grails 1.2:

log4j = {
    appenders {
        console name: 'stdout', layout: pattern(conversionPattern: conversionPattern)

        environments {
            production {
                // ... some code to determine file path ...

                rollingFile name: 'file', file: "${logDirectory}/${appName}.log", layout: pattern(conversionPattern: conversionPattern)
                rollingFile name: 'StackTrace', file: "${logDirectory}/${appName}-stacktrace.log"
        }
    }

    environments {
        development { root { warn 'stdout' } }
        test { root { warn 'stdout' } }
        production { root { error 'file' } }
    }

    // ... package-specific logging configurations ...
}

Когда я развертываюсь как война к Tomcat, мои журналы записаны и в catalina.out и в мой регистратор 'файла', определенный для производства.

Я попробовал:

  • добавление additivity = false к root {} определение для production {}, который не работает (и я действительно не ожидал бы это к, так как это, по-видимому, устанавливает аддитивность для самого корневого регистратора?).
  • определение 'stdout' консоли appender в a development {} и test {} блок в appenders {} закрытие, но это не работает также.

Возможно, это - проблема с моей конфигурацией Tomcat и не моим log4j DSL? Самым близким я пришел к нахождению кого-то с подобной проблемой, является этот поток списка рассылки, для которого не было никакого (простого) решения.

Как я могу препятствовать тому, чтобы журналы были записаны в catalina.out в производстве?

10
задан Rob Hruska 9 March 2010 в 17:10
поделиться

1 ответ

Мне удалось обойти эту проблему, выполнив следующие действия в Config.groovy :

import org.apache.log4j.Logger

log4j = {
    // ... configuration from question ...
}

environments {
    production {
        def logger = Logger.getRootLogger()
        logger.removeAppender('stdout')
    }
}

Однако это похоже на грязный взлом, и я надеясь, что есть лучший способ сделать это, специфичный для Grails log4j DSL.

Кроме того, все, что приложение могло бы записать в stdout, вероятно, не будет записано, что может быть плохо, если есть журналы / исключения / трассировки стека, которые каким-то образом записываются непосредственно в stdout.

3
ответ дан 4 December 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: