目标:使用原生logging,像NGINX日志那样,每天生成一个新的日志文件。如:logs.log-20210406
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.logging.*;
public class LoggerUtil {
private static final Logger logger = Logger.getLogger(LoggerUtil.class.getName());
public static Logger getLogger() {
String openfireHome = JiveGlobals.getHomeDirectory();
String day = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
String logPath = openfireHome + File.separator + "logs" + File.separator + "lk.log-" + day;
System.out.println(logPath);
if (!Files.exists(Paths.get(logPath)) || logger.getHandlers().length == 0) {
init(logPath);
}
return logger;
}
private static void init(String logPath) {
try {
for (Handler handler : logger.getHandlers()) {
handler.close();
logger.removeHandler(handler);
}
logger.setLevel(Level.INFO);
FileHandler handler = new FileHandler(logPath, true);
SimpleFormatter formatter = new SimpleFormatter();
handler.setFormatter(formatter);
handler.setLevel(Level.INFO);
logger.addHandler(handler);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void error(Exception e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
getLogger().warning(sw.toString());
}
}
error方法是使用Java原生记录error栈信息,这样方便排查异常。