Файл конфигурации log4j2 не распознается

Я пытаюсь настроить log4j2 в своей структуре Geb. На всю жизнь я не могу понять, как собрать это вместе. У меня есть файл log4j2.xml (не log4j.xml) с регистратором "Selenium". В DefaultPage я пытаюсь получить Logger с именем Selenium из файла конфигурации LogManager.getLogger("Selenium").

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="TRACE">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss,SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
      <Logger name="Selenium" level="TRACE">
          <AppenderRef ref="Console"/>
      </Logger>
    <Root level="TRACE">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

DefaultPage.groovy

class DefaultPage extends geb.Page {
    static content = {
        pageId(wait: true) { $("meta", name: "pageId").getAttribute("content") }
        pageHeading(wait: true) { $("meta", name: "heading").getAttribute("content") }
    }

    static final Logger logger = LogManager.getLogger("Selenium")

    /**
     * Uses jquery to create a mouseover on an element
     * @param element The jquery element created in the page object.
     */
    static def mouseOver(element) {
        logger.error("Hovering over ${element}")
        element.jquery.mouseover()
    }
}

Тест выполняется, и вывод записывается в STDERR, что ожидается, потому что у меня есть logger.error. Однако он не поддерживает формат даты. Кроме того, у меня есть другие классы, вызывающие этот регистратор с .info, и они не видны в STDOUT. Когда я отлаживаю уровень логгера, это ОШИБКА, а не TRACE.

Вот моя файловая структура:

functional
|
 --src
   |
   |--test
      |
      |--groovy
      |     |
      |     |--com.x.functional
      |         |
      |         |--pages
      |              |
      |              |--DefaultPage.groovy
      |              |--Other classes that want to use log4j2.
      |
      |--resources
             |
             |--log4j2.xml

Спасибо.

EDIT Замена log4j на log4j2. Добавление статуса конфигурации = TRACE. Изменен формат даты для миллисекунд с ',' вместо '.'


person TIMBERings    schedule 28.02.2014    source источник
comment
Шаблон для даты: %d{HH:mm:ss,SSS} (обратите внимание на запятая вместо . для миллисекунд)   -  person dmahapatro    schedule 01.03.2014


Ответы (2)


Log4J2 будет искать файл конфигурации с именем log4j2.xml в пути к классам. Если он не может найти этот файл, он попробует несколько альтернатив (см. страницу руководства по настройке), но log4j.xml по умолчанию не распознается. (Можно указать log4j2 взять какой-либо указанный файл в качестве конфигурации: http://logging.apache.org/log4j/2.x/faq.html#config_location )

Если файл конфигурации не найден, устанавливается конфигурация по умолчанию, которая регистрирует ERROR и более высокие события в StdErr.

Я подозреваю, что это то, что происходит. Самый простой способ исправить это — переименовать файл конфигурации log4j2.xml и поместить его в путь к классам. Затем вы можете включить внутреннее ведение журнала log4j2, указав <Configuration status="trace"> для дальнейшего устранения неполадок, если это необходимо.

person Remko Popma    schedule 01.03.2014
comment
Должно быть, я читал не ту документацию, я думал, что там написано log4j.xml. Сначала у меня был log4j2.xml, теперь снова log4j2.xml. ‹Статус конфигурации=TRACE› находится на месте вместо ERROR, однако не повезло. Я все еще получаю только вывод ERROR, который будет конфигурацией по умолчанию. Я также сделал изменение шаблона даты. Таким образом, все проблемы, которые были решены, по-прежнему имеют ту же проблему. Я создал еще один регистратор с именем, которого не было в конфигурации log4j2. Регистратор селена и регистратор x были настроены одинаково. Таким образом, мы нажимаем на дефолт. - person TIMBERings; 01.03.2014
comment
У вас есть файлы jar log4j-api и log4j-core в пути к классам? Кроме того, находится ли файл log4j2.xml в пути к классам? Если ответ на оба вышеперечисленных вопроса положительный, то после изменения на <Configuration status="trace"> вы должны были начать видеть внутреннее ведение журнала log4j2 на своей консоли (например, элементы инициализации при анализе файла конфигурации log4j2.xml, какие приложения установлены и т. д.). Вы это видите? Как только это будет исправлено, я думаю, что ведение журнала уровня trace в вашем приложении также будет работать. - person Remko Popma; 02.03.2014
comment
Я знаю, что это старый пост, но это избавило меня от множества разочарований. - person Paul Stoner; 24.09.2020

Старый вопрос, но я отвечу, если кто-то продолжит искать, как это решить.

Как говорит TIMBERings, рекомендуется поместить файл в папку Resources. Если вы работаете с eclipse, вам нужно добавить папку «Ресурсы» к источникам в пути сборки Java.

<Configuration status="trace"> указывать не нужно, достаточно <Configuration>.

Можно поставить "." или "," между ss и SSS %d{HH:mm:ss.SSS} (это просто форматирование).

С уважением.

person Dante Ramos    schedule 12.12.2018