【问题标题】:How to set root log level for application in micronaut如何在 micronaut 中为应用程序设置根日志级别
【发布时间】:2020-05-06 01:47:39
【问题描述】:

我正在开发一个可以接受某些选项的 cli 应用程序:--info--debug--trace。我想使用参数来设置整个应用程序的日志记录级别。是否有捷径可寻?这是我迄今为止尝试过的:

    LogLevel level;
    if(info) {
      level = LogLevel.INFO;
    } else if (debug) {
      level = LogLevel.DEBUG;
    } else if (trace) {
      level = LogLevel.TRACE;
    } else {
      level = LogLevel.WARN;
    }
    loggingSystem.setLogLevel(Logger.ROOT_LOGGER_NAME, level);

loggingSystem 被注入到类中。

  @Inject
  private LoggingSystem loggingSystem;

【问题讨论】:

    标签: java micronaut


    【解决方案1】:

    我不太确定我是否明白你的意思。这是我在官方文档中找到的。

    Controlling Log Levels with Properties

    Controlling Log Levels with Properties
    
    Log levels can be configured via properties defined in application.yml (and environment variables) with the log.level prefix:
    
    logger:
        levels:
            foo.bar: ERROR
    

    请注意,通过配置控制日志级别的能力是通过 LoggingSystem 接口控制的。目前 Micronaut 附带一个实现,允许为 Logback 库设置日志级别。如果选择了另一个库,您应该提供一个实现此接口的 bean。

    【讨论】:

    • 这是一个命令行应用程序,所以我想使用一个参数来控制日志记录级别,而不是一个环境变量或配置文件。这类似于 gradle 对 --debug 所做的事情。
    【解决方案2】:

    创建一个方法来完成这项工作:

     public String setLogLevel(String loggerName, Level level) {
        LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
        Logger logger = loggerName.equalsIgnoreCase("root") ?
                loggerContext.getLogger(loggerName) : loggerContext.exists(loggerName);
        if (logger != null) {
            logger.setLevel(level);
            return loggerName + " to level : " + level;
        } else {
            return "Logger Not Found";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-09-26
      • 2015-11-04
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 2023-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多