javalogging
日志管理使我们编程中非常重要的一部分,好的日志管理可以更好地帮助我们管理维护程序,发现程序中的错误有着重要的作用。
我们学习了java logging 的各种操作,可以经过异常处理、错误处理、断言处理的程序增加日志功能
当然,除此之外,还有log4j等其他日志管理,这里我们不做具体解释,大致思想一致。
logging文件输出
日志的操作等级可以选这些:DEBUG < INFO < WARN < ERROR < FATAL,通过自己的判断,将不同的日志信息,通常INFO是普通信息,WARN是某种异常,ERROR是比较重要的运行错误
作为不同的等级打印出来在使用时我们可以使用下列命令配置语言环境。
Locale.setDefault
同时,对于每一个日志,我们需要将他发送到一个位置,或者是某个文件,或者是控制台。我们可以通过以下指令将其发送到某个文件
Java中Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分在消息队列中逐一将消息取出,然后对消息进行处理,也就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。
所以我们可以如下将日志信息输出到某个文件
FileHandler fileHandler = new FileHandler("src/log/plane.txt", true);
fileHandler.setFormatter(new myFormatter());
planeLogger.addHandler(fileHandler);
如果我们想要确定输入消息操作的等级,可以在jvm启动虚拟机时设置
-Djava.util.logging.config.file
上述代码中myformatter是我们人为规定的某种格式,便于管理人员理解信息。
输出formatter
我们都知道,日志管理是面向使用者的,所以日志提供的信息需要我们变成某种易于理解的格式。
我们首先,通常这个日志信息包含日志时间,日志等级,日志调用位置,日志的其他位置。例如下列代码
DateTimeFormatter x= DateTimeFormatter.ofPattern("MMM dd yyyy HH:mm:ss a");
return LocalDateTime.now().format(x)+"-"+record.getSourceClassName()+"-"+record.getSourceMethodName()+"-"+record.getLevel()+"-"+record.getMessage()+"\n";
其中先通过DateLocalTime获得了现在的时间,并按想要的格式打印出来,后面的getSourceClassName()等函数是logging自带的定位日志位置的函数。
实际操作
因为我们定义一个变量logger来管理各种日志操作
这个类中只有一个函数和一个logger类变量
这个类管理一个logger类变量,在每次日志操作时将其进行一系列配置管理,最后将其返回
实际运行时,例如我们捕获到一个异常,我们通过调用这个函数得到一个logger并进行日志管理
try {
checkplanename(planename);
}catch(planeNameFormatException e){
System.out.println(e);
logger.planeLogger().warning(e.toString());
continue;
}