2014-12-16 2 views
1

Similar question, но я использую log4j2.Отключить журналы freemarker из logs4j

Мне нужен способ, чтобы отключить все журналы FreeMarker, в их documentation они говорят, что мы можем сделать это по телефону Logger.selectLoggerLibrary(Logger.LIBRARY_NONE), но они говорят, что

selectLoggerLibrary должен быть вызваны рано, до FreeMarker может войти что-нибудь, или еще он не будет иметь (последовательного) эффекта.

Как это можно назвать в приложении struts2? (Я пробовал называть его в методе prepare() в моем классе действий, но его не работает.) Или есть ли другой способ отключить журналы?

ответ

4

Вопрос в том, почему вам нужно отключить его так?

Этого не нужно, поэтому я предполагаю, что здесь находится настоящая проблема. Есть ли какая-то неисправность? Потому что, если этого не происходит, почему бы не просто указать категорию регистратора freemarker, которая будет проигнорирована в конфигурации вашего регистратора? Это нормальный способ сделать это, FreeMarker или нет.

В любом случае, в 2.3.22 (выпуск ожидается в начале 2015 года) вы можете использовать -Dorg.freemarker.loggerLibrary=none, где вы запускаете JVM (то есть вы устанавливаете системное свойство org.freemarker.loggerLibrary). В противном случае, если вы могли бы назвать этот метод в ServletContextListener, это, безусловно, достаточно рано.

Update:

Реагируя на комментарии ... в большинстве случаев вы будете иметь 3-библиотеки, которые используют различные протоколировании "рамку", как SLF4J, Викисклад вырубка, ИЮЛ, Log4j, Log4j2. Таким образом, вы должны убедиться, что все они перенаправляются в одну библиотеку журналов, что, безусловно, является Log4j2 в вашем случае. Я подозреваю, что это неправильно сделано в вашем случае, поэтому теперь несколько библиотек журналов регистрируются на консоли, каждая со своими настройками конфигурации.

FreeMarker 2.3.x использует Log4j 1.x, если обнаруживает, что присутствует org.apache.log4j.Logger. Другие библиотеки журналов, которые он также может обнаруживать и использовать (Log4j2 не входит в их число) имеют более низкий приоритет. (FreeMarker 2.4.x всегда будет использовать SLF4J, если он присутствует.) Таким образом, если вы добавите org.apache.logging.log4j:log4j-1.2-api к своим зависимостям, тогда FM будет использовать org.apache.log4j.Logger, и поэтому log4j-1.2.-api перенаправит сообщения журнала FM в Log4j2. Это сработало для меня с этой конфигурацией Log4j2:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN"> 
    <Appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n" /> 
    </Console> 
    </Appenders> 
    <Loggers> 
    <Root level="debug"> 
     <AppenderRef ref="Console" /> 
    </Root> 
    <Logger name="freemarker" level="off"> 
     <AppenderRef ref="Console" /> 
    </Logger> 
    </Loggers> 
</Configuration> 
+0

Ум ... Если вам, ребята, нужно решение, тогда, возможно, вам стоит уточнить, в чем проблема, вместо того, чтобы просто голосовать. И, если это ошибка или какая-то несовместимость, я также могу ее исправить. – ddekany

+0

Спасибо! вызывается из 'ServletContextListener'. Не знаю, почему, но я не могу настроить его в log4j2.xml, чтобы его игнорировать, проверял каждую вещь, которую я нашел в Интернете. звучит как freemarker, игнорирует мою конфигурацию log4j2 ... поэтому отключить от «ServletContextListener» пока единственный вариант. –

+0

Woops! В первый раз, когда я увидел ответ от мобильного приложения, я увидел, что у него есть один downvote, теперь с рабочего стола я хочу принять ответ и upvote, я вижу, что я был downvote, это была наверняка ошибка, но это не позволит меня переверните или удалите, cuz его через 3 часа ... –

Смежные вопросы