Java logging使用:
1、如何记录:
Logger log = Logger.getLogger("Lab4_1160300522_log");
Logger log = Logger.getLogger("Lab4_1160300522_log");
log.setLevel(Level.INFO);
log.info(".....");
2、如何集合到一个日志文件中,
假设我们已经有一个log,也就是已经执行了Logger log = Logger.getLogger("Lab4_1160300522_log");
那么我们写一个函数来对这个log进行设置,控制它将log记录的信息输出到文件中;
public void initialLog(Logger log) throws IOException{
// log.setLevel(Level.INFO);
FileHandler fileHandler = new FileHandler("src/log/Lab4_1160300522_log.log",true);
// fileHandler.setLevel(Level.INFO);
log.addHandler(fileHandler);
fileHandler.setFormatter(new SimpleFormatter());
}
3、如何控制记录格式,
我们可以看到文件中的格式就是控制台输出的格式,还有一个自带的XMLFormatter(),但是对用户来说更加不友好
假如你觉得SimpleFormatter的格式也不适合你,想自己控制记录的格式,那么可以自己写一个类Myformatter继承Formatter并重写format函数
class MyFormatter extends Formatter{
@Override
public String format(LogRecord record) {
ZonedDateTime zdt = ZonedDateTime.ofInstant(record.getInstant(), ZoneId.systemDefault());
String format = zdt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
return "Time-->"+format+"\n"+record.getMessage()+"\n";
}
}
注:
A、其中的前两行代码是进行将record中得到的Instant进行变换,让他符合你所在的时区
B、除了提取record中Instant,Message参数,你还可以根据需要提取记录信息的类和方法等;
4、以及避免出现多个日志文件,即log.1
虽然你只添加了一个fileHandler,但是其目录下很可能会出现多个日志文件,这是因为之前添加文件未关闭导致,资源被锁死,再添加相同的fileHandler也会创建新的日志文件,可以在添加之前将所有的fileHandler关闭,代码如下
public void initialLog(Logger log) throws IOException{
for(Handler h : log.getHandlers()) {
h.close();
}
// log.setLevel(Level.INFO);
FileHandler fileHandler = new FileHandler("src/log/Lab4_1160300522_log.log",true);
// fileHandler.setLevel(Level.INFO);
log.addHandler(fileHandler);
fileHandler.setFormatter(new SimpleFormatter());
}