【发布时间】:2013-12-28 17:30:47
【问题描述】:
如何在 Spring Boot 应用程序中以编程方式配置日志记录?
使用 xml 或属性文件对我的需要不够灵活。
更新:我想实现这样的目标:
@Value("${logging.level.root}")
private String loggingLevelRoot;
@Value("${logging.level.myApp}")
private String loggingLevelMyApp;
@Value("${logging.file}")
private boolean fileAppenderEnabled;
....
setLevel(Logger.ROOT_LOGGER_NAME, Level.toLevel(loggingLevelRoot)));
setLevel("com.myapp", Level.toLevel(loggingLevelMyApp)));
setLevel("org.springframework", Level.WARN);
setLevel("org.apache.coyote", Level.INFO);
setLevel("org.apache.catalina", Level.INFO);
setLevel("org.apache.catalina.startup.DigesterFactory", Level.ERROR);
setLevel("org.apache.catalina.util.LifecycleMBeanBase", Level.ERROR);
Logger logger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
logger.addAppender(createConsoleAppender());
if (fileAppenderEnabled) {
logger.addAppender(createFileAppender());
}
每个环境我只有:
- logging.level.root=[信息,调试,..]
- logging.level.myApp=[INFO, DEBUG, ..]
- logging.file=[真 |假]
没有重复我真的不想处理的 XML、Groovy 和其他格式。
归根结底,这实际上是为了实现与 Spring JavaConfig 为 bean 所做的相同的日志记录灵活性。 XML 或其他文件格式太静态了,需要太多重复,并且与应用程序的其余配置集成得不够好。
为什么日志记录的配置应该与任何其他 bean 或服务不同?这没有任何意义。
【问题讨论】:
-
什么是使用xml不够灵活?如果你使用 Logback,你可以使用 Groovy 来配置 logback。
-
@M.Deinum 不,你不能; Spring Boot(实际上,我认为是 Spring Autoconfig)踩踏了 Groovy 配置。
-
我还需要对每个环境进行不同的配置,使用不同的 appender 类型,......所以不,XML 不会削减它。
-
@chrylis
logback.groovy应该在 Spring Boot 中得到明确支持(至少从 M6 开始,也许在那之前我忘记了)。如果它不起作用我建议你在 github 中提出一个问题并解释一下。 -
@AxelFontaine 您可以为每个环境提供不同的 XML(或 groovy 或其他)配置,只需更改每个 Spring 配置文件的
logging.config(或仅作为启动时的系统属性)。这还不够灵活吗?
标签: java logging spring-boot