gpt4 book ai didi

log4j - Netty 4.0 和 Log4J

转载 作者:行者123 更新时间:2023-12-01 09:54:31 24 4
gpt4 key购买 nike

我正在使用在 Tomcat 6.0 应用程序中运行的 Netty 4.0 (CR9)。我通过 Slf4J 使用 Log4J。我的应用程序中的所有组件都使用 Log4J,而不是 Netty。我在启动过程中收到以下消息:

log4j:WARN No appenders could be found for logger (io.netty.util.internal.logging.InternalLoggerFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
  • 我的应用程序的资源文件夹中已经有一个 log4j.xml(因此其他组件知道如何记录)
  • 我试着把“InternalLoggerFactory.setDefaultFactory(new Slf4JLoggerFactory());”或“InternalLoggerFactory.setDefaultFactory(new Log4JLoggerFactory());”在 WebApp 的 ContextListener 中以在启动时配置记录器。也将它们放在静态上下文中不起作用。
  • 在 Intitalizer 中添加日志处理程序不起作用。

  • 我在启动监听器中有以下几行代码
    SLF4JBridgeHandler.removeHandlersForRootLogger();
    SLF4JBridgeHandler.install();"

    因为我确实需要它们让 Jersey 正确使用 Slf4J。

    我已经看过以下问题,但没有解决我的问题
  • Netty pipeline warning
  • How to configure the logger in netty using customized log4j.xml?
  • 最佳答案

    对于以编程方式配置日志记录的任何人(就像我一样,为了某些单元测试)可能不需要去设置 log4j.xml

    在 Netty 的情况下,许多类尝试在类加载阶段访问它们的记录器,因此您必须确保您想要进行的任何编程初始化都事先发生。

    因此,例如,如果您要声明一个 Netty 静态成员,请确保您的静态初始化事先发生(类中成员的排序是相关的),例如

    static {

    Logging.initialise();
    }

    static ByteBufAllocator alloc = new UnpooledByteBufAllocator(true);

    如果它是一个通用的实用程序类,您不想在初始化时触及并实现编程日志记录,您可以设置一个空附加程序:
    static {

    /* Eliminate Log4j warning when instantiating 'alloc' below */
    Logger rootLogger = Logger.getRootLogger();

    /* Check that an appender hasn't already been set */
    if (!rootLogger.getAllAppenders().hasMoreElements()) {

    rootLogger.addAppender(new NullAppender());
    }
    }

    static ByteBufAllocator alloc = new UnpooledByteBufAllocator(true);

    请注意,如果已经设置了 Appender,请不要做任何事情,因为在这种情况下,可以安全地假设有人在其他地方配置了它。

    关于log4j - Netty 4.0 和 Log4J,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17507666/

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