如何在Java中每小时创建一次日志文件

时间:2013-02-17 06:26:37

标签: java

我想每小时在特定文件夹中创建和存储日志文件。 如何处理? 任何例子都会有所帮助。

4 个答案:

答案 0 :(得分:3)

无需额外的努力。使用DailyRollingFileAppender设置Datepattern - '.'yyyy-MM-dd-HH - 每小时顶部的滚动

示例 -

log4j.appender.LOGFILE = org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOGFILE.DatePattern = '.'yyyy-MM-dd-HH
...

参考 - DailyRollingFileAppender

注意:不要在DatePattern选项的任何位置使用冒号“:”字符。冒号之前的文本是作为URL的协议规定而插入的,这可能不是您想要的。

答案 1 :(得分:0)

您可以使用记录器API(log4j)每小时生成一次日志文件。

答案 2 :(得分:0)

类似的东西:

public void run(){
    while(true){
        synchronize(this){
        if(timeLap==1hr)
            file.writeLine();
        }
        else
            Thread.sleep(1hour);
         }
         }

或者您可以使用API​​ http://www.vogella.com/articles/Logging/article.html

答案 3 :(得分:0)

您可以创建自定义FileAppender,类似于

public class TestFileAppender extends WriterAppender {
    String pattern;

    public void setFile(String file) {
        this.pattern = file;
    }

    public synchronized void update() {
        try {
            closeWriter();
            String folder = new SimpleDateFormat("yyyyMMddHH").format(new Date());
            File file = new File(String.format(pattern, folder));
            file.getParentFile().mkdirs();
            setWriter(new BufferedWriter(new FileWriter(file, true)));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

使用它log4j config

log4j.appender.file = test.TestFileAppender
log4j.appender.file.file = xxx/%s/1.log
log4j.appender.file.layout = org.apache.log4j.SimpleLayout

每小时运行一次FolderNameChanger

class FolderNameChanger extends TimerTask {

    FolderNameChanger() {
        run();
    }

    public void run() {
        Enumeration<Appender> e = Logger.getRootLogger().getAllAppenders();
        while (e.hasMoreElements()) {
            Appender a = e.nextElement();
            if (a instanceof TestFileAppender) {
                ((TestFileAppender) a).update();
            }
        }
    }
}

此任务找到所有TestFileAppenders并更改其路径