Почему Grails (в Tomcat) регистрируется как в catalina.out, так и в моем пользовательском файловом приложении? - PullRequest
10 голосов
/ 09 марта 2010

У меня есть следующее для моей конфигурации 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' внутри блока development {} и test {} в закрытии appenders {}, но это тоже не работает.

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

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

Ответы [ 2 ]

3 голосов
/ 09 марта 2010

Мне удалось обойти эту проблему, выполнив в 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.

1 голос
/ 20 февраля 2016

В Grails 2.4.5 вы можете определить нулевой аппендидер для stdout

https://grails.github.io/grails2-doc/2.4.x/guide/conf.html#logging

log4j = {
    ...
    appenders {
        'null' name: 'stdout'
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...