Log4j不会记录到文件,只会记录到控制台

时间:2012-10-07 14:44:30

标签: java tomcat web-applications logging log4j

我想使用log4j在我的Tomcat webapp上进行一些日志记录。我有一个数据访问类,应该在例如日志时记录活动。请求用户的信息等。 我已经在我的rootlogger中添加了一个文件处理程序和一个consolehandler,我完全能够在控制台中看到正确的日志消息,但遗憾的是不在指定的文件中。

我的代码如下:

imports...

public class UserDao {
    private final Logger logger = Logger.getRootLogger();

    public UserDao() {
        FileAppender fa = new FileAppender();
        fa.setLayout(new PatternLayout("%d{yyyy-MM-dd HH:mm:ss.SSSS} %p %t %c \u2013 %m%n"));
        fa.setName("UserDaoFileAppender");
        fa.setFile("UserDao.log");
        fa.setThreshold(Level.INFO);
        fa.setAppend(true);
        fa.activateOptions();
        logger.addAppender(fa);

        ConsoleAppender ca = new ConsoleAppender();
        ca.setLayout(new PatternLayout("%d{yyyy-MM-dd HH:mm:ss.SSSS} %p %t %c \u2013 %m%n"));
        ca.setThreshold(Level.WARN);
        ca.activateOptions();
        logger.addAppender(ca);

        logger.warn("Test warning");
        logger.error("Test error");
        logger.info("Test info");
        logger.debug("test debug");
    }

    // Rest of the class.

}

我尝试过使用properties-file方式设置appender-configuration,但我从来没能让它工作。我尝试将它放在WEB-INF / classes文件夹和src-root中,正如有些人在这里提出的那样。

2 个答案:

答案 0 :(得分:0)

您正在为FileAppender使用无参数构造函数。请使用带有至少2个参数的构造函数。

FileAppender fa = new FileAppender();
fa.setLayout(new PatternLayout("%d{yyyy-MM-dd HH:mm:ss.SSSS} %p %t %c \u2013 %m%n"));

用以下代替这两行:

FileAppender fa = new FileAppender(new PatternLayout("%d{yyyy-MM-dd HH:mm:ss.SSSS} %p %t %c \u2013 %m%n"), "path of the log file");

答案 1 :(得分:0)

我有工作样本(如果你对属性文件没问题)。您需要将log4j.properties复制到WEB-INF文件夹

log4j.rootLogger=INFO, stdout, logfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${billing.root}/WEB-INF/billing.log
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n