JavaRush/Java блог/Random/Подключаем к нашему JavaRush проекту логирование (slf4f и...

Подключаем к нашему JavaRush проекту логирование (slf4f и log4j)

Статья из группы Random
участников
Как подключить Maven к вашему JavaRush проекту можно прочитать в этой моей статье. Далее предполагается, что вы это умеете. Если мы хотим использовать slf4j, то нам нужна зависимость:
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.30</version>
</dependency>
После этого делаем:
public static void main(String[] args) throws IOException {
    Logger logger = LoggerFactory.getLogger(Solution.class);
    logger.info("hello world!");
}
И получаем ошибку:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Что в целом логично. slf4j - это обёртка, а вокруг чего мы его обернули? Ничего? Ну вот и получили ошибку. Обернуть можно вокруг чего-то одного из списка: log4j, util.logging, NOP, System.err, JCL, logback. Подробнее в оригинальной инструкции. Рассмотрим на примере log4j и System.err: 1) Начнём с простого, с System.err. Для этого к предыдущей зависимости (slf4j-api) добавляем вот эту (slf4j-simple).
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.30</version>
</dependency>
Версии берём одинаковые, на 10 мая 2021 это 1.7.30. Если будете брать зависимости с https://mvnrepository.com/ не забудьте удалить
<scope>test</scope>
А иначе ваши логи будут работать только в тестах. 2) Теперь попробуем настроить log4j, для этого нам нужно добавить 2 зависимости: сам log4j и прослойку между slf4j и log4j (slf4j-log4j12). Выглядит это так:
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.30</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
Понятное дело, что (slf4j-simple) нам нужно удалить, чтобы slf4j не путался, с каким логгером ему работать. А (slf4j-api) оставить, так как это и есть slf4j. По поводу 2х добавленных зависимостей. log4j мы добавляем старый (от мая 2012, хз почему, можете поэксперементировать с другими). Версия у него 1.2.17. Чтобы slf4j смог с ним работать, нужна соответствующая прослойка - slf4j-log4j12, где последние символы (12) - означают версию log4j. При этом версия slf4j-api и slf4j-log4j12 должна быть 1.7.30 - последняя стабильная на текущий момент. После того, как вы подключили зависимости и обновили Maven проект. Для работы log4j нужно ещё 2 вещи: 1) Настроить конфигурационный файл. Читаем, выбираем, копируем. 2) Вчитать конфигурацию log4j перед работой:
PropertyConfigurator.configure("d:\\Java\\JavaRushTasks\\4.JavaCollections\\log4j.properties");
ну или где там у вас файлик лежит. Если вы хотите видеть все логи - не забудьте поставить уровень логгирования ALL. Дописываем в резюме - log4j & slf4j. Вы восхитительны! Если помогло - лайк, подписка, колокольчик!)))
Комментарии (7)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Dmitry Parfenov
Уровень 108
Expert
28 ноября 2022, 09:38
В 2022 правильно так делать:
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j2-impl</artifactId>
</dependency>
Ну, и версионность обеспечить вот так (версию перепроверьте):
<dependencyManagement>
        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>3.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement
Andrey Panchenko Моет полы в Яндекс
15 сентября 2022, 12:44
Спасибо! Годно 👍
Андрей Гузанов
Уровень 37
15 ноября 2021, 10:57
Спасибо, очень полезная статья
Igor Java/Kotlin Developer
10 июня 2021, 15:00
Дописываем в резюме - log4j & slf4j.
Хм, как-то просто. Как я понимаю сайт с настройками log4j.properties - это основные настройки которые понадобятся в проектах?
Алексей
Уровень 37
3 июня 2021, 19:33
хорошая статья
Vladimir
Уровень 40
Master
10 мая 2021, 12:31
Так же, не менее интересно, по log4j почитать можно тут.
Василий Бабин Мракоборец в Дурмстранг Expert
10 мая 2021, 13:30
Спасибо! Как раз мне в тему!