如何在 Quarkus 运行时更改日志级别

Seb*_*hke 5 quarkus

我正在寻找一种在运行时更改 Quarkus 应用程序 (JVM) 的一个或多个类/包的日志级别的方法。是否有我可以用来以编程方式更改级别的 API,例如通过公开 REST API 或者是否已经存在其他解决方案?

我知道https://quarkus.io/guides/logging但这仅讨论通过 JVM 属性或 applications.properties 静态更改日志级别。

Seb*_*hke 7

显然 Quarkusjava.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);
   }
}
Run Code Online (Sandbox Code Playgroud)

现在我可以像这样获取当前的日志级别:

curl http://myserver:8080/logging/com.example.mypackage
Run Code Online (Sandbox Code Playgroud)

并设置日志级别如下:

curl http://myserver:8080/logging/com.example.mypackage?level=DEBUG
Run Code Online (Sandbox Code Playgroud)


JSB*_*ach 5

对于未来的读者:我创建了一个 Quarkus 扩展,可以在这里看到: https: //github.com/quarkiverse/quarkiverse-logging-ui

并且可以通过添加这个依赖来使用

      <dependency>
          <groupId>io.quarkiverse.loggingui</groupId>
          <artifactId>quarkus-logging-ui</artifactId>
          <version>0.0.2</version>
      </dependency>
Run Code Online (Sandbox Code Playgroud)