Setting a log file name to include current date in Log4j
Настройка имени файла журнала для включения текущей даты в Log4j
Я хотел бы установить в имени файла журнала для приложения log4j и log4net текущую дату. Мы выполняем ежедневные ролловеры, но в текущем файле журнала нет даты. Формат имени файла журнала будет следующим
logname.2008-10-10.log
Кто-нибудь знает лучший способ для меня сделать это?
Редактировать: Я забыл упомянуть, что мы хотели бы сделать это и в log4net. Плюс любое решение должно быть доступно в JBoss.
Переведено автоматически
Ответ 1
DailyRollingFileAppender - это именно то, что вы ищете.
Я на 99% уверен, что RollingFileAppender / DailyRollingFileAppender, хотя и предоставляет вам желаемую функциональность переноса даты, не имеет никакого способа указать, что текущий файл журнала также должен использовать DatePattern.
Возможно, вы сможете просто создать подкласс RollingFileAppender (или DailyRollingFileAppender, я забыл, что есть что в log4net) и изменить логику именования.
/* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software * License version 1.1, a copy of which has been included with this * distribution in the LICENSE.txt file. */
/** * DateFormatFileAppender is a log4j Appender and extends * {@link FileAppender} so each log is * named based on a date format defined in the File property. * * Sample File: 'logs/'yyyy/MM-MMM/dd-EEE/HH-mm-ss-S'.log' * Makes a file like: logs/2004/04-Apr/13-Tue/09-45-15-937.log * @author James Stauffer */ publicclassDateFormatFileAppenderextendsFileAppender {
/** * The default constructor does nothing. */ publicDateFormatFileAppender() { }
/** * Instantiate a <code>DailyRollingFileAppender</code> and open the * file designated by <code>filename</code>. The opened filename will * become the ouput destination for this appender. */ publicDateFormatFileAppender(Layout layout, String filename)throws IOException { super(layout, filename, true); }
private String fileBackup;//Saves the file pattern privatebooleanseparate=false;
/** * If true each LoggingEvent causes that file to close and open. * This is useful when the file is a pattern that would often * produce a different filename. */ publicvoidsetSeparate(boolean separate) { this.separate = separate; }
protectedvoidsubAppend(LoggingEvent event) { if(separate) { try {//First reset the file so each new log gets a new file. setFile(getFile(), getAppend(), getBufferedIO(), getBufferSize()); } catch(IOException e) { LogLog.error("Unable to reset fileName."); } } super.subAppend(event); }
/** * Ensures that all of the directories for the given path exist. * Anything after the last / or \ is assumed to be a filename. */ privatevoidmakeDirs(String path) { intindexSlash= path.lastIndexOf("/"); intindexBackSlash= path.lastIndexOf("\\"); intindex= Math.max(indexSlash, indexBackSlash); if(index > 0) { Stringdirs= path.substring(0, index); // LogLog.debug("Making " + dirs); Filedir=newFile(dirs); if(!dir.exists()) { booleansuccess= dir.mkdirs(); if(!success) { LogLog.error("Unable to create directories for " + dirs); } } } }