簡體   English   中英

為什么有些日志沒有被log4j捕獲?

[英]Why are some logs not caught by log4j?

我已經將log4j配置為在容器中記錄后端,但是顯然不是所有日志都通過log4j進行了過濾。

來自應用程序的日志將按預期寫入到我的控制台/日志文件。

例如,我使用的是openwebbeans,即使該庫內部在使用log4j,該庫中的日志仍采用默認格式並寫入系統。

為什么我的log4j配置沒有將那些日志語句定向到我的控制台/日志文件? 我希望它們至少會被寫入根記錄器,但是它們不會通過根記錄器寫入的附加程序。

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的默認配置。

我不確定該使用flushclose方法。 在生產環境中使用此類東西之前,需要先進行檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM