Я создаю простое приложение, и теперь я сталкиваюсь с «кошмаром журналирования» в приложении 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.
my 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 is 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.