gpt4 book ai didi

java - Spring JTA 事务的 Log4J 配置

转载 作者:行者123 更新时间:2023-12-02 00:52:33 24 4
gpt4 key购买 nike

我们使用此 Log4J 配置来显示 JTA 信息:

<category name="org.springframework.transaction">
<priority value="DEBUG"/>
</category>

生成的日志条目的类型为:

15:36:08,048 DEBUG [JtaTransactionManager] [ ] Creating new transaction with name [class]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
15:36:09,564 DEBUG [JtaTransactionManager] [ ] Initiating transaction commit

...现在我们使用 Spring 的 MessageListener 来监听 MQ 队列。问题是这是事务性的,我们每 2 秒打印一次上述日志记录。

我们想要的只是当有人使用我们的 REST API 访问利用 @Transactional 的服务时打印出这些 JTA 日志语句。我们不需要来自此“轮询”MQ 监听实现的 JTA 日志条目。

你能做到吗?

最佳答案

您应该在配置中将默认日志级别设置为高于 DEBUG,然后尝试在适当的调用内的 REST API 中手动调整 org.springframework.transaction 的日志级别,例如

public void doSomething() {
Logger txLogger = Logger.getLogger("org.springframework.transaction");
Level defaultLevel = txLogger.getLevel();
txLogger.setLevel(Level.DEBUG);
// do my stuff
txLogger.setLevel(defaultLevel);
}

这意味着在调用 API 期间 - 但只有那时 - MQ 监听器发起的调用也会被记录,但据我所知,无法根据调用位置为同一类配置不同的日志级别来自:-(

更新: 另一种可能性是创建一个自定义 TransactionManager,它只是 Spring 提供的 TransactionManager 的包装器。它将调用转发给 Spring 并写入自己的日志。您可以在 API 中使用它,但在 MQ 监听器中使用 Spring 版本。然后您将有两个不同的类,因此您可以设置不同的日志级别。我相当确定这是可能的,但是配置和维护可能比它值得的更麻烦......

关于java - Spring JTA 事务的 Log4J 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2412389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com