【问题标题】:Log4j cannot find appenders, but they are presentLog4j 找不到附加程序,但它们存在
【发布时间】:2015-07-29 13:16:13
【问题描述】:

我在使用 log4j 进行日志记录时遇到问题。我创建了我的属性文件,并在 Java 代码中打开它,一切都很好,除了属性文件出现故障。我在这里查看了几个教程和问题,但我似乎无法修复它。这是我的属性文件(称为 WSConnectorLog.properties):

##########################
# Loggers
log4J.rootLogger = FATAL, console
log4j.WSDetailedLogger = TRACE, WSDetailLog, console
log4j.WSAppLogger = INFO, WSAppLog, console

# Appenders
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.target=System.err
log4j.appender.console.layout.ConversionPattern=%d [%t] (%F:%L) %p %m%n

log4j.appender.WSDetailLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.WSDetailLog.File=logs/WSDetailed.log
log4j.appender.WSDetailLog.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.WSDetailLog.layout=org.apache.log4j.PatternLayout
log4j.appender.WSDetailLog.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %m%n

log4j.appender.WSAppLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.WSAppLog.File=logs/ws.log
log4j.appender.WSAppLog.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.WSAppLog.layout=org.apache.log4j.PatternLayout
log4j.appender.WSAppLog.layout.ConversionPattern=%m%n

# Set root category priority to INFO and its only appender to console.
log4j.rootCategory=INFO, console

我在 Java 中这样使用它:

准备:

public class WSConnector {

    private static Logger WSDetailedlog = Logger.getLogger("WSDetailedLogger");
    private static Logger WSAppLog = Logger.getLogger("WSAppLogger");
    private ConnectionManager cm = ConnectionManager.getInstance();
    private ConfigHandler config = ConfigHandler.getInstance();
    private SimpleDateFormat format = null;

    /**
     * Protected constructor for the Singleton pattern.
     */
    protected WSConnector() {
        format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        Properties props = new Properties();
        try {
            props.load(getClass().getResourceAsStream("/WSConnectorLog.properties"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        PropertyConfigurator.configure(props);
    }

然后写信给:

...
WSDetailedlog.info(log);
...
WSAppLog.info("random string";
...

我收到以下错误:

log4j:ERROR Could not find value for key log4j.appender.CONSOLE
log4j:ERROR Could not instantiate appender named "CONSOLE".
log4j:WARN No appenders could be found for logger (WSDetailedLogger).
log4j:WARN Please initialize the log4j system properly.
log4j:ERROR Could not find value for key log4j.appender.CONSOLE
log4j:ERROR Could not instantiate appender named "CONSOLE".
log4j:ERROR Could not find value for key log4j.appender.CONSOLE
log4j:ERROR Could not instantiate appender named "CONSOLE".
log4j:ERROR Could not find value for key log4j.appender.CONSOLE
log4j:ERROR Could not instantiate appender named "CONSOLE".
log4j:ERROR Could not find value for key log4j.appender.CONSOLE
log4j:ERROR Could not instantiate appender named "CONSOLE".
log4j:ERROR Could not find value for key log4j.appender.CONSOLE
log4j:ERROR Could not instantiate appender named "CONSOLE".
log4j:ERROR Could not find value for key log4j.appender.CONSOLE
log4j:ERROR Could not instantiate appender named "CONSOLE".

我运行它的环境是 Tomcat 7.0。我在那里导出了 jar,并将属性文件放在它旁边。我正在从 Eclipse Dynamic WebApp 项目中调用 jar,以便它可以看到 Tomcat 的 lib 目录。问题不在于它没有找到属性文件,而在于它的格式不正确。

你能看一下,帮助我理解问题吗?

【问题讨论】:

  • -Dlog4j.debug=true?显然,您发布的配置和运行时可用的配置不匹配,因为配置中有 console,运行时有 CONSOLE。

标签: java tomcat logging log4j


【解决方案1】:

您不必指定控制台附加程序,您必须将其配置为日志级别,例如:

    log4j.rootLogger=INFO, stdout
    # Console appender configuration
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %p %m%n
    log4j.appender.stdout.filter.b=org.apache.log4j.varia.LevelMatchFilter
    log4j.appender.stdout.filter.b.LevelToMatch=FATAL    
    log4j.appender.stdout.filter.b.AcceptOnMatch=false

这是我用来仅打印 FATAL 日志的配置。 希望对您有所帮助!

【讨论】:

  • 是的,这解决了控制台附加程序的问题,但现在还有其他问题。由于某种原因,它现在找不到其他附加程序,只有标准输出。因此,它仅记录控制台。一切。甚至那些应该写入文件的。如果我评论标准输出附加程序,我会收到一条错误消息:log4j:WARN No appenders could be found for logger (WSDetailedLogger). log4j:WARN Please initialize the log4j system properly.
猜你喜欢
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多