【发布时间】:2013-12-04 20:37:55
【问题描述】:
我尝试使用 log4j 制作静态记录器。我在使用PropertyConfigurator.configureAndWatch(LOG4J_CONFIG_FILE); 读取属性文件时没有出错,但是如果我想使用例如调试进行登录
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;
}
}
层次是 log4j.properties
# 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
【问题讨论】:
-
当你启动你的应用程序时,你的控制台输出是什么?那里有任何警告/错误吗?
-
如果我没记错的话,这种行为的原因是您已将记录器配置为仅显示
INFO及以上条目。这意味着只会显示INFO、WARN、ERROR和FATAL。 -
附带说明:您的课程设计过于复杂。 Log4j 记录器的传统用法只是定义
private static final Logger logger = Logger.getLogger(CurrentClass.class);,其中CurrentClass 是定义此记录器的类的名称。然后根据需要记录事件。
标签: java logging properties log4j