在log4j中将ConsoleAppender替换为FileAppender

时间:2015-01-30 12:31:31

标签: java logging log4j fileappender

我使用ConsoleAppender在log4j记录器上创建了一个Logger。 代码如下,

public class AppLogger{ 

   static {
        ConsoleAppender ca = new ConsoleAppender(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN));
        org.apache.log4j.Logger.getRootLogger().addAppender(ca);
   }
   public AppLogger(Class classname) {
        logger = LoggerFactory.getLogger(classname);
   }

   public void debug(String message){
        logger.debug(message);
   }
...
...
}

我没有使用log4j.properties文件,因为我不确定将它放在何处。上面的代码工作正常,并在控制台上正确记录。现在我想改变它以使用FileAppender。

我只是更新了静态构造函数,如下所示,

    FileAppender fa = new FileAppender();
    fa.setFile("d:/log.txt");
    fa.setLayout(new PatternLayout(PatternLayout.DEFAULT_CONVERSION_PATTERN));
    org.apache.log4j.Logger.getRootLogger().addAppender(fa);

并添加了fa ca。但现在我收到了这个错误,

  

log4j:ERROR没有名为[null]的appender的输出流或文件集。

我不确定我缺少哪个属性来为File Appender定义。

1 个答案:

答案 0 :(得分:3)

您忘记激活选项:

FileAppender fa = new FileAppender();
fa.setFile("d:/log.txt");
fa.setLayout(new PatternLayout(PatternLayout.DEFAULT_CONVERSION_PATTERN));
fa.activateOptions(); \\ ← activate the options
org.apache.log4j.Logger.getRootLogger().addAppender(fa);

方法OptionHandler#activateOptions()激活先前通过调用选项设置器设置的选项。