Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Подключение Lombok к проекту java + exec-maven-plugin

log4j
loombok
maven
selenide
java
Теги: #<Tag:0x00007f7b62e8a4b0> #<Tag:0x00007f7b62e8a258> #<Tag:0x00007f7b62e8a028> #<Tag:0x00007f7b62e89ec0> #<Tag:0x00007f7b62e89d80>

(Ramon Menezes) #1

Добрый день
возникла проблемма с подключением библиотеки Lombokа конкретнее @log4j
суть: при подключении либы конструкции типа log.info(“qwe”); скипаются и соответственно не выводятся в консоль

подключение:

  1. добавляю либу ломбок в проект
  2. создаю файл log4j.properties
  3. в поме нет депенденсей ломбока и log4j (менялось неоднократно )
@Log4j
public class FileUtils {
//trash
log.info("Catalogue : " + fileName + " was created");

может кто то стыкался с подобным

P.S. может чего упустил в описании, пишите - добавлю
заранее спасибо


#2

Попробуйте для начала отключить ломбок, прописать инициализацию логгера и посмотреть - будут ли логи появляться.


(Ramon Menezes) #3

таки да, логирование с обычного log4j тоже скипается, не могу понять почему,
самое интересное то что есть 2 проекта, боевой и тестовый (для экспериментов), по сути одинаковые, пом, спосоы рана итд, на тестовом все работает, на боевом нет. забегая наперед (“значит не одинаковые”) в принципе возможно…но пом файлы то одинаковые (((кеш почистил


(Sergey Korol) #4

Лобмок сам по себе ничего не тянет лишнего. Чтобы корректно писались логи через log4j, нужно подключить соответствующую зависимость:

org.slf4j:slf4j-simple:1.7.25


(Ramon Menezes) #5

тогда если я не ошибаюсь нужно будет докидывать slf4j.properties ? или log4j достаточно ?


(Ramon Menezes) #6

проблема оказалась намного глубже и хуже чем я думал

exec-maven-plugin который юзается для запуска приложения юзает какой то старый депенденси slf4j, это решаемо, выкусил, подключил руками новые версии, вроде все ок,
но тут вылезло самое интересное, htmlUnit который так же используется в приложении так же юзает старые депенденси slf4j. думал что прокатит номер как с exec-maven-plugin но в момент переопределения депенденсей слетела заглушка которая глушила логирование html unita (по дефолту он валит все в дебаге)
решение незамысловатое но работающее, вернул все в зад и написал свой логер для инфо и еррора.
но тем не менее вопрос остается открытым ((( хоцца как люди ограничится @Log4j ))


(Dmitri Korobtsov) #7

А если такую дененденси добавить, например? Не решит ли проблему?

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.0.2</version>
    </dependency>

(Ramon Menezes) #8
  1. почему такую старую ?
  2. депенденси три мне подобной депенденси не выдало, так что вряд ли поможет, но все равно спасибо, чуть позже попробую - отпишусь

(Dmitri Korobtsov) #9

Резонный вопрос:) заодно и у себя ее обновил…


(Ramon Menezes) #11

log4j-slf4j-impl помогло лишь частично, проблему с htmlunit не решило
даунгрейд slf4j то же ничего не дал
чем дальше тем больше есть желание забить и оставить уже реализованый вариант с кастомным логгером


(Dmitri Korobtsov) #12

Типа “работает - не трогай?” :slight_smile: может log4j.properties некорректно сконфигурен?
я правильно понимаю, что в данный момент проблема в том, что log4j не работает?


(Ramon Menezes) #13

вроде в мавене все вычистил
mvn dependency:tree -Dverbose -Dincludes=org.slf4j ошибок и конфликтов не выдает
поключил lombok @Slf4j
теперь меседжи в консоле не подхватывают log4j.properties
вот файл

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%p] :: %d{dd-MM-yyyy HH:mm:ss} - %F:%L - %m%n


(Dmitri Korobtsov) #14

я правильно понимаю, что log4j первый используете? а на log4j2 не думали переехать?


(Ramon Menezes) #15

переехал на slf4j
проблемма решена методом проб и ошибок при формировании и выкусывании депенденсей в мавене
ПС. на кой черт в slf4j десяток разнообразных депенденсей которые в себя включают другие депенденси того же slf4j? не проще ли сделать одну общую ? ((


(Dmitri Korobtsov) #16

хз, я с slf4j намучался, потом намучался перетаскивая логгинг на log4j, сейчас использую log4j2 и вполне ок все работает :slight_smile:

У меня подключено так:
pom.xml

    <properties>
        <!--Versions: logging and Reporting-->
        <log4j-slf4j-impl.version>2.8.2</log4j-slf4j-impl.version>
        <log4j-core.version>2.8.2</log4j-core.version>
        <log4j-api.version>2.8.2</log4j-api.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>${log4j-slf4j-impl.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j-api.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j-core.version}</version>
        </dependency>
    </dependencies>

слегка подчищенный log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">

    <Properties>
        <Property name="LOG_DIR">./test-output/logs/</Property>
        <Property name="ARCHIVE">${LOG_DIR}/archive</Property>
        <Property name="FILE_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %c{10}:%L - %msg%n</Property>
        <Property name="CONSOLE_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %c{0}:%L - %msg%n</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="${CONSOLE_PATTERN}"/>
        </Console>
        <RollingFile name="RootLogger"
                     fileName="${LOG_DIR}/capture_all.log"
                     filePattern="${ARCHIVE}/%d{yyyy-MM-dd-hh-mm}_CaptureAll.gz">
            <PatternLayout pattern="${FILE_PATTERN}"/>
            <SizeBasedTriggeringPolicy size="1 MB"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="info" additivity="true">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RootLogger"/>
        </Root>
    </Loggers>

</Configuration>

И соответственно инициализация логгера в отдельных классах:

private static final Logger log = LogManager.getLogger(NameOfTheClass.class);

(Ramon Menezes) #17

вся соль в мавен екзек плагин и хтмл юнит драйвер которые юзают старые версии логеров(обз для проекта…такая специфика), ну и + то что я загорелся ломбоком )) теперь аннотацию втулил над класом и побежал, никакой доп инициализации не нужно )