【问题标题】:How to set Atomikos to not write to console logs?如何设置 Atomikos 不写入控制台日志?
【发布时间】: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 日志?如何? 谢谢

彼得

【问题讨论】:

    标签: java atomikos


    【解决方案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。请在此处总结内容(请勿复制/粘贴),以便答案可以独立存在。如果您不这样做,您的答案将面临被删除的风险,尤其是在链接失效的情况下。
      猜你喜欢
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 2015-08-22
      相关资源
      最近更新 更多