Log4j – 使用DatePattern后文件扩展名(.log)消失

我的Log4j.xml文件有问题。 当我保存这样的日志文件时:

        

文件没问题,但没有文件扩展名。 这是一个错误还是我做错了什么?

编辑:在我看到保罗的回答之前,我通过使用一个简单的类初始化我的记录器来暂时解决了我的问题。 这不是最好的决定,但它对有类似问题的人有用:

 public class DomainLogger { private Logger logger = null; public DomainLogger(String directoryName, String fileName) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("_dd.MM.yyyy"); String timeNow = sdf.format(new Date()); String fullFilePath = System.getenv("DOMAIN_HOME") + directoryName + "\\" + fileName + timeNow + ".log"; System.out.println("full filepath is " + fullFilePath); logger = Logger.getLogger(timeNow); //warning! different time will create a new file !!! PatternLayout patternLayout = new PatternLayout("%m%n"); FileAppender fileAppender = new FileAppender(patternLayout, fullFilePath); logger.addAppender(fileAppender); } public void writeLog(String logMessage) { logger.info(logMessage); } 

}

如果您使用的是log4j 1.x,我们强烈建议您使用org.apache.log4j.rolling.RollingFileAppender 1而不是org.apache.log4j.DailyRollingFileAppender (可能会丢失消息, 错误43374 )。

所以你appender的配置可以是:

           

使用此配置,您将获得如下的精细名称: 2

 dailyschedule.log dailyschedule_28.08.2014_14.57.45.log dailyschedule_28.08.2014_14.57.46.log dailyschedule_28.08.2014_14.57.47.log dailyschedule_28.08.2014_14.57.48.log dailyschedule_28.08.2014_14.57.49.log 

笔记

  1. 在这种情况下,您需要添加相应的jar( apache-log4j-extras-1.2.17.jar )。
  2. 如果您不想要第一个文件名( dailyschedule.log ), activeFileName在滚动策略中删除param activeFileName