slf4j - 如何将 HornetQ 日志记录委托(delegate)给 Slf4j

标签 slf4j hornetq java.util.logging

我希望将嵌入在我的应用程序中运行的 HornetQ 的所有日志记录委托(delegate)给 slf4j。不幸的是,任何尝试都失败了。我已经试过了

  • 添加了 jul-to-slf4j
  • 安装了网桥 SLF4JBridgeHandler.install();
  • 尝试了 Log4jLogDelegateFactory (“hornetq-configuration.xml”通过 <log-delegate-factory-class-name>org.hornetq.integration.logging.Log4jLogDelegateFactory</log-delegate-factory-class-name> )
  • 我自己写的LogDelegateLogDelegateFactory

但是无论我做什么,都不会捕捉到以下行:

13.07.2011 17:42:11 org.hornetq.core.logging.impl.JULLogDelegate warn
WARNUNG: AIO wasn't located on this platform, it will fall back to using pure Java NIO. If your platform is Linux, install LibAIO to enable the AIO journal
13.07.2011 17:42:11 org.hornetq.core.logging.impl.JULLogDelegate info
INFO: Using NIO Journal
13.07.2011 17:42:11 org.hornetq.core.logging.impl.JULLogDelegate info
INFO: Started Netty Acceptor version 3.1.5.GA-r1772

我错过了什么吗?

最佳答案

我找到了一个完整的解决方案,想与您分享。 我之前已经单独尝试过其中的每一个,但你必须结合其他答案中提到的一些技术。

  • 您需要编写自己的 LogDelegate:
import org.hornetq.spi.core.logging.LogDelegate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Slf4jLogDelegate implements LogDelegate {
    private final Logger logger;
    public Slf4jLogDelegate(Class clazz) {
        logger = LoggerFactory.getLogger(clazz);
    }
    @Override
    public void debug(Object message) {
        logger.debug(message.toString());
    }
    @Override
    public void debug(Object message, Throwable t) {
        logger.debug(message.toString(), t);
    }
    @Override
    public void error(Object message) {
        logger.error(message.toString());
    }
    @Override
    public void error(Object message, Throwable t) {
        logger.error(message.toString(), t);
    }
    @Override
    public void fatal(Object message) {
        logger.error(message.toString());
    }
    @Override
    public void fatal(Object message, Throwable t) {
        logger.error(message.toString(), t);
    }
    @Override
    public void info(Object message) {
        logger.info(message.toString());
    }
    @Override
    public void info(Object message, Throwable t) {
        logger.info(message.toString(), t);
    }
    @Override
    public boolean isDebugEnabled() {
        return logger.isDebugEnabled();
    }
    @Override
    public boolean isInfoEnabled() {
        return logger.isInfoEnabled();
    }
    @Override
    public boolean isTraceEnabled() {
        return logger.isTraceEnabled();
    }
    @Override
    public void trace(Object message) {
        logger.trace(message.toString());
    }
    @Override
    public void trace(Object message, Throwable t) {
        logger.trace(message.toString(), t);
    }
    @Override
    public void warn(Object message) {
        logger.warn(message.toString());
    }
    @Override
    public void warn(Object message, Throwable t) {
        logger.warn(message.toString(), t);
    }
}
  • 然后你需要编写工厂:
import org.hornetq.spi.core.logging.LogDelegate;
import org.hornetq.spi.core.logging.LogDelegateFactory;
public class Slf4jLogDelegateFactory implements LogDelegateFactory {
    // Maybe caching of delegates makes sense?
    @Override
    public LogDelegate createDelegate(Class clazz) {
        return new Slf4jLogDelegate(clazz);
    }
}
  • 然后将以下行添加到您的 hornetq-configuration.xml 中: <log-delegate-factory-class-name>yourpackage.Slf4jLogDelegateFactory</log-delegate-factory-class-name>
  • 最后,在启动嵌入式服务器之前添加以下行: org.hornetq.core.logging.Logger.setDelegateFactory(new Slf4jLogDelegateFactory());

我只是想知道为什么他们不能使用经过验证的日志记录机制,这样可以很容易地交换记录器。

关于slf4j - 如何将 HornetQ 日志记录委托(delegate)给 Slf4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6682189/

相关文章:

jboss - JMS/Seam——创建 session 时出现异常?

java - 如何找到 horneq 队列长度

java - 如何设置 slf4j 来处理 HttpServlet 中的 JUL 日志记录?

java - 在 slf4j 运行时设置消息的日志级别

java - 防止在 SessionScoped beans 中序列化 CDI 注入(inject)的 Logger

java - SLF4J 错误 : class loader have different class objects for the type

java - HornetQ:哪些版本可以算稳定?

Java 小程序 : How to make sure destroy is finished before page refresh

java.util.logging:从 Windows 命令提示符运行时,处理程序输出去了哪里?

java - log4j 和 slf4j 在单个项目中 - 这是一个好主意吗?