Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Log4j静态记录器_Java_Logging_Properties_Log4j - Fatal编程技术网

Java Log4j静态记录器

Java Log4j静态记录器,java,logging,properties,log4j,Java,Logging,Properties,Log4j,我试着用log4j做一个静态记录器。使用PropertyConfigurator.configureAndWatch(LOG4J_CONFIG_文件)读取属性文件时,我没有收到任何错误,但如果我想使用例如debug case DEBUG: System.out.println("debug"); log.debug(message); break; 什么也没有发生。我做了一个system.out.println来确定是否达到了代码,println被打印出来了。谁能

我试着用log4j做一个静态记录器。使用
PropertyConfigurator.configureAndWatch(LOG4J_CONFIG_文件)读取属性文件时,我没有收到任何错误,但如果我想使用例如debug

case DEBUG:
     System.out.println("debug");
     log.debug(message);
     break;
什么也没有发生。我做了一个system.out.println来确定是否达到了代码,println被打印出来了。谁能给我一个提示,为什么记录器不工作

这是完整的代码

import org.apache.log4j.Appender;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Layout;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.spi.ErrorHandler;
import org.apache.log4j.spi.Filter;
import org.apache.log4j.spi.LoggingEvent;

public class Logging {

    private static final String LOG4J_CONFIG_FILE = "/config/log4j.properties";
    private static Logging instance;
    private Logger log;

    public enum level {
        DEBUG, INFO, WARN, ERROR, FATAL
    };

    /**
     * Private Constructor for Logging.
     */
    private Logging() {
        PropertyConfigurator.configureAndWatch(LOG4J_CONFIG_FILE);
    }

    /**
     * Returns an instance of the Logger.
     */
    public static synchronized Logging getInstance() {

        if (instance == null)
            instance = new Logging(Logger.getLogger(Logging.class));
        return instance;
    }

    /**
     * Method for doing the logging of actions in the system.
     *
     * @param l The preciseness level of the logging.
     * @param message The message to print.
     */
    public void log(Logging.level l, String message) {
        switch (l) {
        case WARN:
            log.warn(message);
            break;
        case ERROR:
            log.error(message);
            break;
        case DEBUG:
            System.out.println("debug");
            log.debug(message);
            break;
        case FATAL:
            log.fatal(message);
            break;
        default:// INFO
            log.info(message);
            break;
        }
    }

    public Logging(Logger logger) {
        this();
        setLogger(logger);
    }

    private void setLogger(Logger log) {
        this.log = log;
    }
} 
Hier是log4j的属性

# Root logger option
log4j.rootLogger=INFO, file

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C://loging.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

根据我的评论,未显示
调试
消息的原因是配置错误

要使其正常工作,请将第一行更改为以下内容:

log4j.rootLogger=DEBUG, file
这将允许将级别高于或等于
DEBUG
的所有消息输出到您的文件中


您可以在以下手册中阅读所有相关内容:

启动应用程序时,您的控制台输出会显示什么?有任何警告/错误吗?如果我没有弄错的话,这种行为的原因是您已将记录器配置为仅显示
INFO
条目及以上内容。这意味着只会显示
INFO
WARN
ERROR
FATAL
。附带说明:您的类设计过于复杂。Log4j记录器的传统用法是define
private static final Logger Logger=Logger.getLogger(CurrentClass.class),其中CurrentClass是定义此记录器的类的名称。然后根据需要记录事件。