【问题标题】:Log levels configuration with Wildfly SwarmWildfly Swarm 的日志级别配置
【发布时间】:2016-11-17 14:47:13
【问题描述】:

在开发基于 Wildfly Swarm 的应用程序时,如何使用 project-stages.yml 中可用的属性配置日志记录级别?

换句话说,Spring Boot 的“logging.level.com.acme.rest=DEBUG”属性是什么?

目前我知道:

  • “swarm.logging=DEBUG”可用于配置所有日志级别(不是我需要的)
  • 可以使用“standalone.xml”,但对操作不够友好
  • Lo​​ggingFraction 可用于以编程方式配置日志记录级别(也不是我需要的)
  • 文档还提到了“logging.level”,但到目前为止我无法让它工作

感谢您的宝贵时间

【问题讨论】:

    标签: logging spring-boot wildfly-swarm


    【解决方案1】:

    在您的 project-stages.yml 中,您可以定义日志记录级别(有关所有选项的完整列表,请参阅 Wildfly Swarm Reference Guide):

    swarm:
      logging:
        loggers:
          com.acme.rest:
            level: DEBUG
    

    【讨论】:

      【解决方案2】:

      我创建了一个 loggingFraction 方法来实现这个目标。像这样:

       protected LoggingFraction logging() {
      
              String logName = swarm.stageConfig().resolve("application.name").getValue();
              String category = swarm.stageConfig().resolve("logger.category").getValue();
      
              String levelName  =swarm.stageConfig().resolve("logger.level").getValue();
      
              final String logFile = System.getProperty("user.dir") + File.separator+
                      "target"+File.separator+
                      logName+".log";
      
              LoggingFraction loggingFraction = new LoggingFraction()
                      .periodicSizeRotatingFileHandler(logName,(h)->{
                          h.level(Level.valueOf(levelName))
                                  .append(true)
                                  .suffix(".yyyy-MM-dd")
                                  .rotateSize("30m")
                                  .enabled(true)
                                  .encoding("UTF-8")
                                  .maxBackupIndex(2);
                          Map<String,String> fileSpec = new HashMap<>();
                          fileSpec.put("path", logFile);
                          h.file(fileSpec);
                      }).logger(GetinApp.class.getPackage().getName(),(l)->{
                          l.level(Level.valueOf(levelName))
                                  .handler(logName);
                      });;
            })
              List<String> categories = Arrays.asList(category.split(","));
              categories.forEach(c->{
                  loggingFraction.logger(c.trim(),l->{
                     l.level(Level.valueOf(levelName)).handler(logName);
                  });
              });
      
              return loggingFraction;
          }
      

      所以我可以在 project-stages.yml 上声明我自己的属性,例如:

      project-name:
        logger:
          level: DEBUG
          category: com.example.com, org.anotherexample.com
      

      【讨论】:

      • OP 对 LoggingFraction 说:“不是我需要的”。
      【解决方案3】:

      您应该可以在末尾添加一个类别:

      -Dswarm.logging.com.acme.rest=DEBUG
      

      【讨论】:

        猜你喜欢
        • 2018-06-15
        • 2014-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多