[英]Log4j - file extension (.log) disappears after using DatePattern
I'm having a problem with my Log4j.xml file. 我的Log4j.xml文件有问题。 When I save a log file like that: 当我保存这样的日志文件时:
<appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
<param name="append" value="true" />
<param name="datePattern" value="_dd.MM.yyyy_HH.mm.ss" />
<param name="file" value="/logs/dailyschedule.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{dd.MM.yyyy HH:mm:ss} class:[%c] method:[%t] [%-5p] : %m%n"/>
</layout>
</appender>
the file is ok, but has no file extension. 文件还可以,但是没有文件扩展名。 Is it a bug or I'm doing something wrong? 是错误还是我做错了什么?
Edit: Before I saw Paul's answer, I was temporarily solved my problem by using a simple class for initializing my logger. 编辑:在我看到Paul的答案之前,我通过使用一个简单的类来初始化记录器来暂时解决了我的问题。 It wasn't the best decision, but it can be usefull to someone with similar problem: 这不是最好的决定,但对有类似问题的人可能是有用的:
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);
}
} }
If you're using log4j 1.x, we strongly recommend that you use org.apache.log4j.rolling.RollingFileAppender
1 instead of org.apache.log4j.DailyRollingFileAppender
(may lose messages, Bug 43374 ). 如果您使用的是log4j 1.x,我们强烈建议您使用org.apache.log4j.rolling.RollingFileAppender
1而不是org.apache.log4j.DailyRollingFileAppender
(可能会丢失消息, 错误43374 )。
So the configuration of you appender can be: 因此,appender的配置可以是:
<appender name="file" class="org.apache.log4j.rolling.RollingFileAppender">
<param name="encoding" value="UTF-8" />
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="activeFileName" value="/logs/dailyschedule.log" />
<param name="fileNamePattern"
value="/logs/dailyschedule%d{_dd.MM.yyyy_HH.mm.ss}.log" />
</rollingPolicy>
<layout class="org.apache.log4j.PatternLayout">
<param name="conversionPattern"
value="%d{dd.MM.yyyy HH:mm:ss} class:[%c] method:[%t] [%-5p] : %m%n" />
</layout>
</appender>
Using this configuration, you will get finenames like the next: 2 使用此配置,您将获得下一个类似的优良名: 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
Notes 笔记
dailyschedule.log
), drop the param activeFileName
in the rolling policy. 如果您不想使用第一个文件名( dailyschedule.log
), activeFileName
在滚动策略中删除参数activeFileName
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.