我不使用config或xml文件来配置log4j,因为不需要深入配置它。我只需要将消息打印到控制台。所以我这样做:
BasicConfigurator.configure();
并且只打印信息和更高的消息我这样做:
Logger LOG = Logger.getLogger(MyClass.class)
LOG.setLevel(Level.INFO);
但是我在控制台中也看到了调试消息。但我只需要打印信息和实际错误消息。
怎么做?
UPD:我创建了一个包含的配置文件,如本教程中所述: manual以下内容:
log4j.rootLogger=INFO, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L %m%n
log4j.logger.com.messagedna.facade=INFO
log4j.logger.com.messagedna.receiver=INFO
log4j.logger.com.messagedna.util=INFO
log4j.logger.com.messagedna.parser=INFO
我把它放到com.messagedna
在我需要记录器的每个班级中,我写了以下内容:
Properties props = new Properties();
try {
props.load(new FileInputStream("/log4j.properties"));
} catch (Exception e){
LOG.error(e);
}
PropertyConfigurator.configure(props);
但是当我运行我的应用程序时,我得到以下内容:
log4j:WARN No appenders could be found for logger (com.messagedna.server.util.Config).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
答案 0 :(得分:5)
您只是为使用MyClass.class
的记录器记录的消息设置了级别,但是其他记录器上的任何调试级别的消息仍将被打印。
您真正需要做的是在控制台日志处理程序(负责将所有日志消息打印到控制台)上设置日志级别。但是,在使用BasicConfigurator
时执行此操作将非常棘手,您最好转到在属性文件中指定日志配置(这样更灵活)。
我建议通过log4j logging configuration tutorial工作 - 这将有助于您准确地组合您想要的配置,并且应该证明您的时间值得投入。但是,如果您希望快速完成此操作,请尝试将以下内容添加到文件log4j.properties
(example taken from here)中:
# Root logger option
log4j.rootLogger=INFO, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
然后更改代码以执行以下操作:
Properties props = new Properties();
props.load(new FileInputStream("/my/path/to/log4j.properties"));
PropertyConfigurator.configure(props);
答案 1 :(得分:3)
配置log4j.properties:
log4j.rootLogger=DEBUG, A1
log4j.logger.com.MYPACKAGE=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
答案 2 :(得分:1)
因为你只想用代码
来做继承人。
在开始时执行此操作,静态代码初始化将起作用
logger = Logger.getLogger(Class.getName(), factory);
logger.setLevel(Level.INFO);
话虽如此,没有理由不使用log4j.xml。它很容易使用。