Похоже, вам нужно сочетание http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html и http: / /logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/RollingFileAppender.html.
Вы должны будете написать самостоятельно. Хорошая новость заключается в том, что вам просто нужно «объединить» функциональность этих классов, новый код «низкого уровня» не требуется.
Дополнительные функции Log4J из проекта «Компаньоны» предоставляют множество политик для перехода, включая то, что вы ищете.
APIDoc: http://logging.apache.org/log4j/extras/apidocs/index.html Домашняя страница: http://logging.apache.org/log4j/extras/
Слишком поздно, чтобы ответить. Но, надеюсь, это кому-нибудь поможет.
Добавьте зависимость log4j в свой файл pom.xml
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
Получите копию этой реализации FileAppender. Спасибо автору этого файла.
http://haobangshou.googlecode.com/svn/trunk/hbs/APPLICATION/server/common/src/com/hbs/common/appender/TimeSizeRollingFileAppender.java
Поместите этот файл log4j.xml в папку ресурсов
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%p] %c{1} %m%n"/>
</layout>
</appender>
<appender name="debug" class="com.myproject.log.TimeSizeRollingFileAppender">
<param name="File" value="log/debug.log"/>
<param name="MaxBackupIndex" value="300"/>
<param name="Encoding" value="GB2312"/>
<!--CHANGE THIS TO A LARGER SIZE EG : 20MB. USE 1MB TO TEST IF THE SETTING WORKS.-->
<param name="MaxFileSize" value="1MB"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} %p [%c] - [%m]%n"/>
</layout>
</appender>
<!--CHANGE name TO ROOT PACKAGE NAME OF YOUR PROJECT THAT YOU WANT TO LOG.-->
<logger name="com.myproject" additivity="false">
<level value="debug"/>
<appender-ref ref="consoleAppender"/>
<appender-ref ref="debug"/>
</logger>
<logger name="org.springframework" additivity="false">
<level value="debug"/>
<appender-ref ref="consoleAppender"/>
<appender-ref ref="debug"/>
</logger>
<logger name="org.hibernate" additivity="false">
<level value="debug"/>
<appender-ref ref="consoleAppender"/>
<appender-ref ref="debug"/>
</logger>
<root>
<priority value="INFO"></priority>
<appender-ref ref="consoleAppender"/>
<appender-ref ref="debug"/>
</root>
Чтобы выполнить быстрый тест:
import org.apache.log4j.Logger;
public class Main {
static public void main(String[] args) {
Logger log = Logger.getLogger(Main.class);
for(int i = 0; i < 10000; i ++)
log.info("Testing log");
}
}
Готово !!
Я знаю, что этот пост немного запоздал, но вы можете попробовать TimeAndSizeRollingAppender. Он находится в свободном доступе по лицензии Apache 2.0, его можно загрузить с www.simonsite.org.uk .