В администраторской консоли WildFly
идем Configuration
=> Logging
=> Handler
=> Periodic Handler
Там уже обычно существует handler под именем FILE
, используемый сервером.
Нажимаем кнопку add
Указываем название, которое затем будем добавлять в категорию.
Настройки взял из стандартного handler:
Append true
Autoflush true
Enabled true
Encoding
File / Path my-project-name-log.log // поменять на своё имя
File / Relative To jboss.server.log.dir
Filter Spec
Formatter %d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n
Level ALL
Named Formatter PATTERN
Suffix .yyyy-MM-dd
Далее переходим в раздел Categories
:
Создаём категорию с именем my.my-awesome-company.my-project-name.
Именно исходя из того, из какого пакета класс, использующий логгер, и происходит распределение сообщение для лога далее по handler
.
Настройки для категории примерно такие:
Category my.my-awesome-company.my-project-name // поменять на имя package проекта
Filter Spec
Handlers LOGGER_PROJECT // так же указать понятное имя для handler
Level ALL
Use Parent Handlers false
use parent handler
- конечно же отключает запись в лог самого сервера.
Для использования jboss logger добавляем зависимость в Maven
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.5.0.Final</version>
<scope>provided</scope>
</dependency>
Логгируем что-то в классе.
import org.jboss.logging.Logger;
//Осторожно, старая версия Java EE/Jakarta EE
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@Path("/hello")
public class HelloResource {
private final static Logger logger = Logger.getLogger(HelloResource.class);
@GET
@Produces("text/plain")
public String hello() {
logger.info("Incoming request");
return "Hello, World!";
}
}
Уже после создания нового handler
должен был появиться файл с выбранным именем.
Теперь же в нём должна появиться новая запись после обращения на url или другого действия, которое логируем.
Чтобы не добавлять каждый раз логгер в класс вручную делаем Provider
:
import org.jboss.logging.Logger;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
public class LoggerProvider {
@Produces
public Logger produceLog(InjectionPoint injectionPoint) {
return Logger.getLogger(injectionPoint.getMember()
.getDeclaringClass()
.getName());
}
}
Теперь вместо:
private final static Logger logger = Logger.getLogger(HelloResource.class);
везде можно использовать следующий вызов:
@Inject
private Logger logger;
Проблема Unsatisfied dependencies for type [Logger] with qualifiers [@Default] at injection point [[field] using arquillian
Иногда WildFly не может найти LoggerProvider
и кидает ошибку на вроде той, что выше.
Для того чтобы он нашел LoggerProvider
нужно отметить класс аннотацией @ApplicationScoped
.