如何在 Quarkus 运行时更改日志级别
How to change the log level during runtime in Quarkus
我正在寻找一种在运行时更改 Quarkus 应用程序 (JVM) 的一个或多个 classes/packages 的日志级别的方法。是否有 API 我可以用来以编程方式更改级别,例如通过公开 REST API 还是已经存在其他解决方案?
我知道 https://quarkus.io/guides/logging 但这只讨论通过 JVM 属性 或 applications.properties.
静态更改日志级别
显然 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
对于未来的读者:
我创建了一个 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>
我正在寻找一种在运行时更改 Quarkus 应用程序 (JVM) 的一个或多个 classes/packages 的日志级别的方法。是否有 API 我可以用来以编程方式更改级别,例如通过公开 REST API 还是已经存在其他解决方案?
我知道 https://quarkus.io/guides/logging 但这只讨论通过 JVM 属性 或 applications.properties.
静态更改日志级别显然 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
对于未来的读者: 我创建了一个 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>