如何设置 Atomikos 不写入控制台日志?

Posted

技术标签:

【中文标题】如何设置 Atomikos 不写入控制台日志?【英文标题】:How to set Atomikos to not write to console logs? 【发布时间】:2011-02-09 16:54:08 【问题描述】:

Atomikos 在使用时非常冗长。事务管理器向控制台写出的似乎有很多 INFO 消息(大部分与我无关)。假设控制消息传递级别 com.atomikos.icatch.console_log_level 的 transaction.properties 中的设置似乎没有任何效果,因为即使设置为 WARN(或 ERROR)INFO消息仍然被记录。 com.atomikos 和 atomikos 的 log4j 设置似乎也被忽略了。 有没有人设法用 Atomikos 关闭控制台上的 INFO 日志?如何? 谢谢

彼得

【问题讨论】:

【参考方案1】:

我正在使用 Atomikos 3.8 进行测试,并尝试了此处列出的所有解决方案(2012 年 7 月 4 日),但均未奏效。

所以我创建了以下类 MockAtomikosLogger 并在我的测试设置中调用了 configure 方法。

测试设置代码片段:

    MockAtomikosLogger.configure();

模拟记录器如下:

package com.atomikos.logging;

import com.atomikos.logging.Logger;

public class MockAtomikosLogger implements Logger 

    org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(getClass());

    public static void configure() 
        com.atomikos.logging.LoggerFactory.setLoggerFactoryDelegate(
                new LoggerFactoryDelegate() 

                    @Override
                    public Logger createLogger(Class<?> clazz) 
                        return new MockAtomikosLogger();
                    
                );
    //end configure

    @Override
    public void logWarning(String message) 
        logger.warn(message);
    

    @Override
    public void logInfo(String message) 
    

    @Override
    public void logDebug(String message) 
    

    @Override
    public void logWarning(String message, Throwable error) 
        logger.warn(message, error);
    

    @Override
    public void logInfo(String message, Throwable error) 
    

    @Override
    public void logDebug(String message, Throwable error) 
    

    @Override
    public boolean isDebugEnabled() 
        return false;
    

    @Override
    public boolean isInfoEnabled() 
        return false;
       

【讨论】:

【参考方案2】:

我已经找到了一种方法来做到这一点。这实际上非常简单,因为 Atomikos 使用一个名为 com.atomikos.icatch.system.Configuration 的集中类来执行日志记录。日志记录实际上是通过 com.atomikos.diagnostics.Console 的实现来执行的,所以我所要做的就是取消注册所有默认控制台并注册我自己的基于公共日志记录的实现

【讨论】:

您能否详细说明一下,例如在 Spring 配置中的示例?【参考方案3】:

您的修复可以工作,但更简单的方法是将 SLF4J/Log4J 配置为不记录 com.atomikos 的 INFO 级别 cmets。*

HTH

【讨论】:

我之前试过没有结果。查看他们的来源(默认情况下他们对控制台执行 System.out) @peter 他们是他,Guy 是 Atomikos 的联合创始人 :) 以防万一有人停下来不明白为什么上述解决方案不起作用 - 这是因为它不是 com.atomikos。* 但只是“atomikos”(当然没有引号)这是适用于 Atomikos 3.70 我更改了我的 log4j.xml 以添加一个名称“atomikos”,级别值为“off”,它没有任何区别。它仍然会创建 tm.out、tmlog0.log 和 IP.tm0.epoch 文件。我正在使用 Atomikos 3.7.0。 @David 那是因为这些不是真正的信息日志文件,而是对 Atomikos 功能至关重要的文件。这里所说的日志是信息日志,可以使用 log4j.logger.atomikos=ERROR 关闭【参考方案4】:

我遇到了类似的问题,并按照 Atomikos 论坛 (1) 的这些帖子中的描述设法解决了这些问题,以下是解决方案的摘要:

在我的类路径中,我有: slf4j-api-1.6.4.jar slf4j-log4j12-1.6.4.jar log4j-1.2.16.jar 而且我在类路径中没有其他 slf4j* jar 文件(这很重要)。

在我添加的 log4j.xml 文件中:

<logger name="com.atomikos">
    <level value="error" />
</logger>

请注意我使用的是“com.atomikos”而不是“atomikos”(因为后者对我不起作用)。 现在还有另一个重要的技巧使整个事情奏效: 确保该属性: com.atomikos.icatch.output_dir

在 jta.properties(或 transactions.properties)中被删除/注释掉

希望对你有帮助。

(1):http://fogbugz.atomikos.com/default.asp?community.6.2809.2

【讨论】:

只包含链接的答案是considered bad practice。请在此处总结内容(请勿复制/粘贴),以便答案可以独立存在。如果您不这样做,您的答案将面临被删除的风险,尤其是在链接失效的情况下。

以上是关于如何设置 Atomikos 不写入控制台日志?的主要内容,如果未能解决你的问题,请参考以下文章

什么是atomikos事务日志用于?

Spring Boot - 没有写入日志文件(不尊重logging.file)

如何设置IDEA控制台的日志缓冲大小(日志覆盖问题)

如何设置IDEA控制台的日志缓冲大小(日志覆盖问题)

无法阻止 Hibernate 将日志写入控制台(log4j.properties 可以)

如何测试没有数据写入 NSPipe