Использование переменной окружения в свойстве уровня пакета log4j? - PullRequest
1 голос
/ 21 мая 2019

Я использую log4j для управления регистрацией в приложении Clojure.Я хотел бы иметь возможность использовать системную переменную, чтобы установить уровень журнала для одного пакета в файле log4j.properties.Так, например, вот мой базовый файл свойств:

log4j.rootLogger=INFO,console,sentry
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ} %-5p [%t] %-4r %c %x - %m%n

log4j.logger.company.logging.logger=DEBUG

Это устанавливает уровень ведения журнала в DEBUG в company.logging.logger (где находится конкретный код ведения журнала. Однако я не хочу этого - яхочу, чтобы он был DEBUG на локальном компьютере, но INFO на производстве (AWS). Поэтому я использую переменную окружения:

log4j.rootLogger=INFO,console,sentry
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ} %-5p [%t] %-4r %c %x - %m%n

log4j.logger.company.logging.logger=${env:LOG_LEVEL}

Это не работает. LOG_LEVEL в данном случаеустановлен на DEBUG, и я могу подтвердить, что в противном случае он будет работать, используя переменную окружения для установки уровня ведения журнала root на DEBUG.

Так, например:

log4j.rootLogger=${env:LOG_LEVEL},console,sentry
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ} %-5p [%t] %-4r %c %x - %m%n

log4j.logger.company.logging.logger=${env:LOG_LEVEL}

Это устанавливает уровень ведения журнала всего приложения на DEBUG. Это нежелательно: это делает журналы приложений настолько многословными, что их невозможно использовать.

Вопрос заключается в следующем:

Можно ли использовать переменные среды для установки уровня журнала отдельного пакета в log4j? Это ошибка в экосистеме L4J? Или это предполагаемое поведение, и есть другой способ решить эту проблему?

1 Ответ

0 голосов
/ 23 мая 2019

Поскольку вы используете API-интерфейсы Lo4j 1.x, вы можете программно установить уровень журнала одного или нескольких пакетов Java равным значению, полученному из переменной среды, для которой вы будете устанавливать значение по умолчанию во время разработки и другое значение в производстве

См. https://stackoverflow.com/a/4598829/483566 для примера того, как реализовать это. Один из комментариев в этой ссылке предлагает следующее:

LogManager.getLogger(Class.forName("org.hibernate.util.JDBCExceptionReporter")).setLevel(Level.FATAL);

... который легко перевести на Clojure.

Примечание. Похоже, вы используете Logj 1.x с окончанием срока службы. Вы должны использовать Log4j2 или что-то вроде tools.logging .

...