【问题标题】:Add custom attributes to logging-channel-adapter Spring Integration将自定义属性添加到 logging-channel-adapter Spring Integration
【发布时间】:2020-11-10 14:29:20
【问题描述】:

我有以下配置:

<int:channel id="responseXmlChannel">
    <int:interceptors>
        <int:wire-tap channel="responseXmlLogger" />
    </int:interceptors>
</int:channel>

<int:logging-channel-adapter id="responseXmlLogger"
                             logger-name="test.SyncResponseLogger" level="DEBUG"
                             expression="'message received, headers:' + headers + ' payload:' + payload"/>

我正在尝试添加一些要记录的会话属性。以当前用户为例。 我正在查看header-enricher 方法,但我找不到使用它向标头添加会话属性的好示例。

有没有办法做我想做的事?除了使用标题添加要记录的自定义属性之外,还有其他方法吗?

我的目标是在日志中包含类似

当前用户:$UserName。有效载荷:$Payload

【问题讨论】:

  • 请告诉我们,您如何访问这些会话属性?
  • 我确实可以使用处理会话属性的自定义服务类进行访问。但这只是一个例子。如果我找到了一种添加自定义属性的方法,例如通过访问我拥有的自定义服务类,它就可以了。也许我尝试使用的会话属性不是一个很好的例子。

标签: java spring logging spring-integration


【解决方案1】:

好的。那么,你的问题是什么?如何使用header-enricher?我不确定您的“会话”对象是什么,以准确回答答案,但header-enricher 可以配置为在 bean 上调用任意方法。请参阅其文档:https://docs.spring.io/spring-integration/docs/current/reference/html/message-transformation.html#header-enricher

另一种方法是处理ThreadLocal。这正是 Spring Web 中的 RequestContextHolder 通过其 HTTP 会话访问为 RequestAttributes 所做的。尽管您需要记住,移动到中间有队列或执行程序通道的不同线程将丢失当前线程上下文,并且您将无法访问该ThreadLocal。因此,特定消息中的标头不是那么糟糕的选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    相关资源
    最近更新 更多