使用 Wildfly Swarm 进行日志级别配置
Log levels configuration with Wildfly Swarm
在开发基于 Wildfly Swarm 的应用程序时,如何使用项目中可用的属性配置日志记录级别-stages.yml?
换句话说,Spring Boot 的 "logging.level.com.acme.rest=DEBUG" 属性相当于什么?
目前我知道:
- "swarm.logging=DEBUG" 可用于配置 所有 日志记录级别(不是我需要的)
- 可以使用 "standalone.xml",但操作不够友好
- LoggingFraction 可用于以编程方式配置日志记录级别(也不是我需要的)
- 文档中也提到了 "logging.level",但到目前为止我无法让它工作
感谢您的宝贵时间
你应该可以在最后添加一个类别:
-Dswarm.logging.com.acme.rest=DEBUG
我创建了一个 loggingFraction 方法来实现这个 objective。像这样:
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
在您的 project-stages.yml 中,您可以定义日志记录级别(有关所有选项的完整列表,请参阅 Wildfly Swarm Reference Guide):
swarm:
logging:
loggers:
com.acme.rest:
level: DEBUG
在开发基于 Wildfly Swarm 的应用程序时,如何使用项目中可用的属性配置日志记录级别-stages.yml?
换句话说,Spring Boot 的 "logging.level.com.acme.rest=DEBUG" 属性相当于什么?
目前我知道:
- "swarm.logging=DEBUG" 可用于配置 所有 日志记录级别(不是我需要的)
- 可以使用 "standalone.xml",但操作不够友好
- LoggingFraction 可用于以编程方式配置日志记录级别(也不是我需要的)
- 文档中也提到了 "logging.level",但到目前为止我无法让它工作
感谢您的宝贵时间
你应该可以在最后添加一个类别:
-Dswarm.logging.com.acme.rest=DEBUG
我创建了一个 loggingFraction 方法来实现这个 objective。像这样:
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
在您的 project-stages.yml 中,您可以定义日志记录级别(有关所有选项的完整列表,请参阅 Wildfly Swarm Reference Guide):
swarm:
logging:
loggers:
com.acme.rest:
level: DEBUG