Skip to content

Instantly share code, notes, and snippets.

@Falchio
Last active August 24, 2023 15:06
Show Gist options
  • Save Falchio/4d524ef3007be0c6cbc36b105883e243 to your computer and use it in GitHub Desktop.
Save Falchio/4d524ef3007be0c6cbc36b105883e243 to your computer and use it in GitHub Desktop.
WildFly: логируем сообщения проектов в разные файлы

WildFly: логируем сообщения проектов в отдельный файл

Создаем Handler

В администраторской консоли 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

Создаём Category

Далее переходим в раздел 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 или другого действия, которое логируем.

Inject Logger

Чтобы не добавлять каждый раз логгер в класс вручную делаем 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment