简体   繁体   English

Log4j找不到附加程序,但存在它们

[英]Log4j cannot find appenders, but they are present

I have a problem with logging using log4j. 我使用log4j记录时遇到问题。 I created my properties file, and opened it in the Java code, and it's all fine, except that the properties file is malfunctioning. 我创建了属性文件,并用Java代码打开了它,一切都很好,除了属性文件有故障。 I looked through several tutorials and questions around here, but I can't seem to be able to fix it. 我在这里浏览了一些教程和问题,但似乎无法修复。 Here's my properties file (called WSConnectorLog.properties): 这是我的属性文件(称为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

I use it in Java like this: 我在Java中这样使用它:

Preparing: 准备:

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);
    }

And then writing to: 然后写到:

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

I get the following error: 我收到以下错误:

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".

The environment I'm running this from is a Tomcat 7.0. 我从中运行的环境是Tomcat 7.0。 I exported the jar there, and put the properties file next to it. 我将罐子导出到那里,并将属性文件放在它旁边。 I'm invoking the jar from an Eclipse Dynamic WebApp project, so that it can see the Tomcat's lib directory. 我正在从Eclipse动态Web应用程序项目中调用jar,以便它可以看到Tomcat的lib目录。 The problem is not that it doesn't find the properties file, but rather that it's malformed somehow. 问题不在于它没有找到属性文件,而是某种程度上格式不正确。

Could you look at it, and help me understand the problem? 您能看一下,并帮助我理解问题吗?

You don't have to specify a console appender, you have to configure it to a level of logs for example: 您不必指定控制台附加程序,而必须将其配置为日志级别,例如:

    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

This is the configuration that I use to print only the FATAL logs. 这是我仅用于打印致命日志的配置。 Hope it helps! 希望能帮助到你!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM