Log4j - 使用DatePattern后文件扩展名(.log)消失 [英] Log4j - file extension (.log) disappears after using DatePattern

查看:1875
本文介绍了Log4j - 使用DatePattern后文件扩展名(.log)消失的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

 < appender name =fileclass =org。 apache.log4j.DailyRollingFileAppender> 
< param name =appendvalue =true/>
< param name =datePatternvalue =_ dd.MM.yyyy_HH.mm.ss/>
< param name =filevalue =/ 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>

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



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

 公共类DomainLogger {

private Logger logger = null;

public DomainLogger(String directoryName,String fileName)抛出异常{

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(完整文件路径为+ fullFilePath);

logger = Logger.getLogger(timeNow);
//警告!不同的时间会创建一个新文件!

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的配置可以是:



< pre class =lang-xml prettyprint-override> < appender name =fileclass =org.apache.log4j.rolling.RollingFileAppender>
< param name =encodingvalue =UTF-8/>
< rollingPolicy class =org.apache.log4j.rolling.TimeBasedRollingPolicy>
< param name =activeFileNamevalue =/ 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]方法:[%t] [%-5p] :%m%n/>
< / layout>
< / 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






Notes


  1. 在这种情况下,你需要添加相应的jar( apache-log4j-extras-1.2.17.jar )。

  2. 如果您不想要第一个文件名( dailyschedule.log ),请删除参数 activeFileName


I'm having a problem with my Log4j.xml file. 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. 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).

So the configuration of you appender can be:

<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

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

  1. In that case, you need to add the respective jar (apache-log4j-extras-1.2.17.jar).
  2. If you don't want the first filename (dailyschedule.log), drop the param activeFileName in the rolling policy.

这篇关于Log4j - 使用DatePattern后文件扩展名(.log)消失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆