Java logging使用:如何记录,如何控制记录格式,如何集合到一个日志文件中,以及避免出现多个日志文件,即log.1

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



猜你喜欢

转载自blog.csdn.net/djd566/article/details/80335523
今日推荐