Java 为什么有些日志没有被log4j捕获?

Java 为什么有些日志没有被log4j捕获?,java,logging,log4j,Java,Logging,Log4j,我已经在我的容器中将log4j配置为日志后端,但是并不是所有日志都通过log4j过滤 应用程序中的日志会按预期写入控制台/日志文件 例如,我正在使用openwebbeans,该库中的日志仍然是默认格式,并写入system out,即使该库在内部使用log4j 为什么我的log4j配置没有将这些日志语句定向到我的控制台/日志文件?我希望它们至少会被写入根记录器,但它们不会通过根记录器写入的appender log4j.appender.Stdout=org.apache.log4j.Console

我已经在我的容器中将log4j配置为日志后端,但是并不是所有日志都通过log4j过滤

应用程序中的日志会按预期写入控制台/日志文件

例如,我正在使用openwebbeans,该库中的日志仍然是默认格式,并写入system out,即使该库在内部使用log4j

为什么我的log4j配置没有将这些日志语句定向到我的控制台/日志文件?我希望它们至少会被写入根记录器,但它们不会通过根记录器写入的appender

log4j.appender.Stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.Stdout.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss}|%-5p|%c|%m%n
log4j.rootLogger=DEBUG,Stdout
log4j.logger.org.apache.wicket=INFO
log4j.logger.org.apache.webbeans=WARN
...

多亏了Mark上面的评论,我通过配置java.util.logging重定向到slf4j成功地解决了我的问题。这不是一个优雅的解决方案,但出于我需要的目的,它足以:

private static void configureJavaUtilLogging() {
    final java.util.logging.Logger rootLogger = java.util.logging.Logger.getLogger("");
    for (final java.util.logging.Handler handler : rootLogger.getHandlers()) {
        handler.setLevel(Level.OFF);
    }
    rootLogger.setLevel(Level.INFO);
    rootLogger.addHandler(new java.util.logging.Handler() {

        @Override
        public void publish(final LogRecord record) {
            final Logger log = LoggerFactory.getLogger(record.getSourceClassName());
            if (record.getLevel() == Level.SEVERE) {
                if (record.getThrown() == null) {
                    log.error(record.getMessage());
                } else {
                    log.error(record.getMessage(), record.getThrown());
                }
            } else if (record.getLevel() == Level.WARNING) {
                log.warn(record.getMessage());
            } else if (record.getLevel() == Level.INFO) {
                log.info(record.getMessage());
            } else {
                log.debug(record.getMessage());
            }

        }

        @Override
        public void flush() {

        }

        @Override
        public void close() throws SecurityException {

        }

    });
}
有了它,我可以在我的一个配置中为每个人配置日志输出。基本上,上面的代码覆盖了存储在jdk或jre中某处的java.util.logging的默认配置


我不确定如何使用
刷新
关闭
方法。在生产环境中使用此类材料之前,需要先检查这些材料

请发布您的log4j配置我的配置现在非常简单。。。它还适用于wicketLooking等其他东西,openwebeans似乎使用Java日志而不是log4j.oh。我猜我误以为我看到的是log4j。我试试看。非常感谢。