Реализация нестандартного провайдера Slf4j не отслеживается - PullRequest
0 голосов
/ 11 июня 2018

Slf4j предоставляет библиотеки, чтобы «обмануть» конкретную кодовую базу, чтобы она думала, что конкретный бэкэнд существует при перенаправлении всей регистрации в один совместимый с API slf4j.

Короче говоря, log4j-over-sl4j будет перенаправлять что-либо из журналирования, специфичного для log4jв slf4j.

Таким образом, мой путь к классу теперь имеет

slf4j-api *-over-slf4j slf4j-simple (to be removed)

Я пытаюсь предоставить пользовательский бэкэнд регистрации для slf4j 1.8+ (пожалуйста, не спрашивайте почему),Чтобы начать с этим, я скопировал slf4j-simple в свой проект.

Когда добавлен slf4j-simple, так как ведение журнала зависимости происходит, как и ожидалось, но когда я удаляю зависимость и просто сохраняю точноетот же контент в моей собственной кодовой базе, он не будет забирать его (другой пакет) ...

Как я могу заставить sl4j увидеть моего собственного провайдера?

enter image description here

ОБНОВЛЕНИЕ

Я вижу, что банка имеет некоторую дополнительную информацию, возможно, что используется slf4j, чтобы выбрать провайдера ...

Однако в моем случае мой бэкэнд регистрации находится в моей собственной кодовой базе (я не хочу разделять ее на библиотеку), поэтому есть ли API для установки вашего провайдера на SLF4J?

enter image description here

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

SLF4J 1.8+ (который находится в бета-версии на 12.06.2018) отказался от понятия StaticLoggerBinder и вместо этого использует что-то лучше под названием ServiceLoader.

Как только у вас есть копия slf4j-simple источника в вашей собственной кодовой базе с вашим собственным пакетом, вам нужно всего лишь создать файл на ${projectRoot}/src/main/resources/META-INF/services/org.slf4j.spi.SLF4JServiceProvider и поместить полное имя класса в свой собственный класс, который будет выбран your.package.YourLoggingServiceProvider

Убедитесь, что вы удалили любую фактическую привязку к другому провайдеру, slf4j выдаст четкое сообщение об ошибке, что на вашем пути к классам есть несколько привязок.

Теперь попробуйте LoggerFactory.getLogger("something").info("something") он подберет ваши классы для регистрации ...

0 голосов
/ 11 июня 2018

Обратитесь к FAQ по SLF4J, « Как мне сделать мою каркас ведения журнала SLF4J совместимым? » и его окрестности:

  1. начать с копии существующегомодуль,
  2. создайте адаптер между вашей системой ведения журнала и интерфейсом org.slf4j.Logger
  3. создайте фабрику для адаптера, созданного на предыдущем шаге,
  4. измените класс StaticLoggerBinder наиспользуйте фабрику, созданную на предыдущем шаге

Не похоже, что в вашем вопросе упоминается StaticLoggerBinder, который является классом, который должен быть точно одним из, чтобы SLF4J могРабота.Именно так SLF4J находит вашу конкретную реализацию интерфейса ведения журнала.

...