Как изменить уровень журнала во время выполнения в Quarkus - PullRequest
5 голосов
/ 04 августа 2020

Я ищу способ изменить уровень журнала одного или нескольких классов / пакетов приложения Quarkus (JVM) во время выполнения. Есть ли API, который я могу использовать для программного изменения уровней, например, выставляя REST API, или уже существует какое-то другое решение?

Я знаю https://quarkus.io/guides/logging, но это только обсуждает статическое изменение уровней журнала с помощью свойства JVM или applications.properties.

1 Ответ

0 голосов
/ 07 августа 2020

Очевидно Quarkus использует java.util.logging под капотом, поэтому я создал простой ресурс REST, например:

import javax.ws.rs.*;
import java.util.logging.*;

@Path("/logging")
public class LoggingResource {

   private static Level getLogLevel(Logger logger) {
      for (Logger current = logger; current != null;) {
         Level level = current.getLevel();
         if (level != null)
            return level;
         current = current.getParent();
      }
      return Level.INFO;
   }

   @GET
   @Path("/{logger}")
   @Produces("text/plain")
   public String logger(@PathParam("logger") String loggerName, @QueryParam("level") String level) {
      // get the logger instance
      Logger logger = Logger.getLogger(loggerName);

      // change the log-level if requested
      if (level != null && level.length() > 0)
         logger.setLevel(Level.parse(level));

      // return the current log-level
      return getLogLevel(logger);
   }
}

Теперь я могу получить текущий уровень журнала следующим образом:

curl http://myserver:8080/logging/com.example.mypackage

И установите уровень журнала следующим образом:

curl http://myserver:8080/logging/com.example.mypackage?level=DEBUG
...