Spring 集成 DSL:如何将 logging.level 设置为 DEBUG for .log()

Spring Integration DSL: How can I set the logging.level to DEBUG for .log()

如何将 .log() 条目的 logging.level 级别更改为低于 INFO 的级别?默认情况下,它似乎只记录 INFO 及以上。我无法让它记录 DEBUGTRACE.

我试过了(在application.yml):

logging.level:
  org.springframework.integration: DEBUG
  com.my.namespace: DEBUG

但到目前为止还没有成功。将 org.springframework.integration 的 logging.level 设置为 DEBUG 确实会记录一大堆 DEBUG 内容,但不是我自己的 .log() 语句。

更新::我正在使用 .log() 这样的:

.log(DEBUG, "some category", m -> "print something using: " + m.getPayload())

但是当我将日志级别设置为 DEBUG 时,什么也没有打印出来。仅当我这样使用 INFO 时:

.log(INFO, "some category", m -> "print something using: " + m.getPayload())

log() 运算符完全基于 LoggingHandler: https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#logging-channel-adapter 并且它是这样实现的:

public B log() {
    return log(LoggingHandler.Level.INFO);
}

因此,它 INFO 独立于您目前在配置中的内容。

因此,如果您想更改一些 log() 运算符默认值,您应该考虑一些适当的替代方案,例如可以提供所需级别的相同变体:

public B log(LoggingHandler.Level level) {

它可以通过永久配置来完成,但只能通过自定义 属性 和一些转换逻辑,如 LoggingHandler.Level.valueOf(level.toUpperCase())

更新

要使其在日志中可见,您必须提供 org.springframework.integration: DEBUG,因为这是 LoggingHandler 的默认类别。或者使用不同的 log() 变体:

log(LoggingHandler.Level级别,字符串类别)

例如:

log(LoggingHandler.Level.DEBUG, "my.category")

并在您的日志记录配置中提供该类别。否则它将依赖默认(root?)级别。

所以,根据你在问题中的代码,它必须是这样的:

logging.level:
  com.my.namespace: DEBUG

.log(DEBUG, "com.my.namespace", m -> "print something using: " + m.getPayload())