I am using java.util.logging framework to implement logging in my JSF application. I have successfully done implementing this, but however I have a new requirement to rotate the logs and create a new log file for each day.
I am not able to figure out how this can be implemented. Any hints on implementation would be highly appreciated. Thanks.
This is how I have configured my logger:
myLogger = Logger.getLogger("info.aio");
fileHandler = new FileHandler("aioinfo.log", 1048576, 100, true);
fileHandler.setFormatter(new SimpleFormatter());
myLogger.addHandler(fileHandler);
Since you are using code to setup your FileHandler then you can add code to close and recreate the FileHandler using the '%g'.
public static void main(String[] args) throws Exception {
//create aioinfo0.log.
install();
//rename aioinfo0.log to aioinfo1.log and create aioinfo0.log.
install();
}
private static final Logger myLogger = Logger.getLogger("info.aio");
private static volatile FileHandler fileHandler;
private static void install() throws IOException {
FileHandler fh = fileHandler;
if (fh != null) {
myLogger.removeHandler(fh);
fh.close(); //Release any file lock.
}
fileHandler = rotate("aioinfo%g.log", 1048576, 100, true);
fileHandler.setFormatter(new SimpleFormatter());
myLogger.addHandler(fileHandler);
}
private static FileHandler rotate(String pattern, int limit, int count, boolean append) throws IOException {
if (pattern == null) {
LogManager m = LogManager.getLogManager();
String p = FileHandler.class.getName();
pattern = m.getProperty(p + ".pattern");
if (pattern == null) {
pattern = "%h/java%u.log";
}
}
new FileHandler(pattern, 0, count, false).close(); //Trigger rotate.
return new FileHandler(pattern, limit, count, append);
}
If you want it to work automatically you can simply create a proxy handler for the FileHandler to handle closing and recreating files each day.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With