【问题标题】:Log4j won't log to file, only to consoleLog4j 不会记录到文件,只记录到控制台
【发布时间】:2012-10-07 14:44:30
【问题描述】:

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

我的代码如下:

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.

}

我曾尝试使用属性文件的方式来设置附加程序配置,但我始终无法让它工作。我尝试将它放在 WEB-INF/classes 文件夹和 src-root 中,正如这里的一些人所建议的那样。

【问题讨论】:

    标签: java tomcat web-applications logging log4j


    【解决方案1】:

    您正在为 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");
    

    【讨论】:

    • 我不明白为什么会有任何不同。编辑:它没有。
    【解决方案2】:

    我有工作示例(如果您对属性文件没问题)。您需要将 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      相关资源
      最近更新 更多