user1788115
user1788115

Reputation: 81

How to create log files in every hour in Java

I want to create and store log files in a particular folder in every hour. How to approach? Any example will be helpful.

Upvotes: 0

Views: 3139

Answers (4)

Evgeniy Dorofeev
Evgeniy Dorofeev

Reputation: 136042

You can create a custom FileAppender, somthing like

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);
        }
    }
}

use it it log4j config

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

and run a FolderNameChanger once an hour

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();
            }
        }
    }
}

this task finds all TestFileAppenders and changes their paths

Upvotes: 0

Subhrajyoti Majumder
Subhrajyoti Majumder

Reputation: 41210

No extra effort required. Use DailyRollingFileAppender where set Datepattern - '.'yyyy-MM-dd-HH - Rollover at the top of every hour.

Example -

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

Reference - DailyRollingFileAppender

Note : Do not use the colon ":" character in anywhere in the DatePattern option. The text before the colon is interpeted as the protocol specificaion of a URL which is probably not what you want.

Upvotes: 3

Arpit
Arpit

Reputation: 12797

Something like that :

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

or you can use the API http://www.vogella.com/articles/Logging/article.html

Upvotes: 0

NullPointer
NullPointer

Reputation: 152

You can use logger API(log4j) for generating the log files in every hour.

Upvotes: 0

Related Questions