2015-08-27 3 views
4

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

В принципе, я хотел бы запустить этот код, если конфигурационный файл Isnt найдено:

// A default configuration that shows ALL Logger output, without a XML config! 
    LoggerContext ctx = (LoggerContext) LogManager.getContext(false); 
    Configuration config = ctx.getConfiguration(); 
    LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME); 
    loggerConfig.setLevel(Level.ALL); 
    ctx.updateLoggers(); // This causes all Loggers to refetch information from their LoggerConfig.   

Как я могу обнаружить, что LOG4J2 не удалось загрузить конфигурацию?

+0

Просто предположим, но, возможно, 'if (config instanceof DefaultConfiguration)' может сделать трюк. –

+0

Это было умно, добавьте его в качестве ответа, и я его выберу. config - это экземпляр XmlConfiguration, когда LOG4J2.XML находится в пути к классам, или DefaultConfiguration в противном случае. –

+0

Просто примечание для будущих людей. Если вы получаете ошибку с методом getContext(), который не существует, вам нужно поменять импорт org.apache.logging.log4j.spi.LoggerContext с org.apache.logging.log4j. core.LoggerContext – Frederik

ответ

4

Похоже ...

if (config instanceof DefaultConfiguration) 

... было бы достаточно, так как DefaultConfiguration используется всякий раз, когда нет ничего другого в наличии, см documentation для конфигурации Log4j2:

Если нет конфигурации файл может быть расположен DefaultConfiguration . Это вызовет вывод журнала на консоль.

+0

Для большинства людей достаточно использовать значение по умолчанию без дополнительной настройки, но DefaultConfiguration также настроен на прохождение записей уровня DEBUG, которые я хотел в этом случае. –