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"; } }
注:
扫描二维码关注公众号,回复:
871038 查看本文章
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()); }