Я создаю простое приложение, и теперь я столкнулся с «кошмаром журналирования» в приложении javaee. Я провел несколько дней поисков, сотни изменений / тестов, но нет никакого способа заставить его работать. Мое приложение состоит из простого
EAR
+-- /lib
| +-- slf4j-api-1.7.25.jar
| +-- logback-classic-1.2.3.jar
| +-- logback-core-1.2.3.jar
|
+-- JAR (JPA/EJB/Producers/Interceptors)
| +--src/main/resources
| +-- logback.xml
| +-- logback-test.xml
|
+-- WAR
Библиотеки загружаются в каталог lib файла EAR.
мой pom.xml в проекте EJB содержит следующие зависимости:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
есть также javaee-api-7.0, как предусмотрено. Я помещаю средство ведения журнала в проект EJB, поэтому я могу использовать производителя журнала в веб-приложении и внедрить средство ведения журнала также в контроллеры JSF. logback.xml выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<property name="DEV_HOME" value="c:/Dev" />
<appender name="FILE-AUDIT"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${DEV_HOME}/debug.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>WE:%d{yyyy-MM-dd HH:mm:ss} - %msg%n</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${DEV_HOME}/archived/debug.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<logger name="it.univaq.we2018" level="DEBUG" additivity="false">
<appender-ref ref="FILE-AUDIT" />
</logger>
<root level="ERROR">
<appender-ref ref="FILE-AUDIT" />
</root>
</configuration>
Все мои классы находятся в пакете it.univaq.we2018 (.service, .controllers, ....). Вот производитель CDI (System.out используется только для моих целей):
@Named
@Singleton
public class LoggerProducer {
@Produces
public Logger produceLogger(InjectionPoint ip) {
System.out.println("-----> construct logging for: "+ip.getMember().getDeclaringClass());
Logger log = LoggerFactory.getLogger(ip.getMember().getDeclaringClass());
System.out.println("-----> LogFactory is: "+log+" for "+log.getName());
return log;
}
}
Это EJB, в котором он используется:
@Stateless
@LocalBean
public class SecurityService implements Serializable {
@Inject
Logger log;
public boolean performSecurityCheck(String userName, String target) {
log.debug("Testing ["+target+"] for user ["+userName+"]...");
return true;
}
}
Пакет Logger и LoggerFactory - org.slf4j
Пытался переместить logback.xml в каждую папку / пакет ... ничего такого. Вывод всегда один и тот же:
INFORMAZIONI: indexController.init() INFORMAZIONI: ---- ENTER:
[it.univaq.we2018.tutor.controller.IndexController.doAction()]
INFORMAZIONI: -----> construct logging for: class
it.univaq.we2018.tutor.service.SecurityService
INFORMAZIONI: -----> LogFactory is:
Logger[it.univaq.we2018.tutor.service.SecurityService]
for it.univaq.we2018.tutor.service.SecurityService
INFORMAZIONI: 10:38:34.423 [http-thread-pool::http-listener-1(4)] DEBUG
it.univaq.we2018.tutor.service.SecurityService - Testing
[it.univaq.we2018.tutor.controller.IndexController.doAction()] for
user [null]...
INFORMAZIONI: indexController.doAction() INFORMAZIONI:
BaseService.businessMethod() INFORMAZIONI: ---- EXIT:
[it.univaq.we2018.tutor.controller.IndexController.doAction()]
Строка журнала №4 - это строка, которая должна перейти к файлу, но файл никогда не открывается, а формат журнала не соответствует конфигурации (должен начинаться с префикса WE: и иметь другой шаблон. ). Я не знаю, как это исправить. Я всегда думал, что ведение журнала приложения JavaEE требует полной переработки с нуля: сервер приложений должен предоставлять механизм «плагинов», такой как источник данных, который уменьшает все проблемы, связанные с конфигурацией, загрузкой классов, конфликтами библиотек и т. Д.
Работает в NetBeans 8.2, проект архетипа maven javaee7, Java 1.8_172 под Payara 5.182.