当前位置:科普知识站>IT科技>

java|logging

IT科技 阅读(1.04W)

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

java logging是什么,让我们一起了解一下?

Logging是在Java中的API,让Java应用可以记录不同级别的信息,在debug过程中非常有用,如果系统因为各种各样的原因而崩溃,崩溃原因可以在日志中清晰地追溯。

 一般对于Java的日志处理,可能大家首先联想到的就是Log4J,Apache的这个项目确实广泛的应用于各个系统中,但是后来Sun在JDK中也添加了类似的日志功能,使用JDK自带的日志处理比Log4J特别好的一点就是不需要导入任何第三方Jar。

JDK自带日志类位于java.util.logging包中,同时在JDK安装目录的jre/lib下面有个默认的日志属性文件:logging.properties。

java logging

其次,JDK日志原理和Log4J原理类似:

1、LoggerManager类用于管理日志的配置,和Log4J的PropertyConfigurator类对应。

2、Logger类是日志信息记录的入口,和Log4J的Log类对应。

3、日志输出位置:控制台ConsoleHandler,文件FileHandler,以及流输出StreamHandler等,和Log4J的Appender对应。

4、日志输出格式:默认SimpleFormatter,XMLFormatter等,和Log4J的Pattern对应。

实战操作,一个自定义log输出到文件,不输出到控制台。

代码如下:

import java.time.ZonedDateTime;import java.time.format.DateTimeFormatter;import java.util.logging.FileHandler;import java.util.logging.Formatter;import java.util.logging.Level;import java.util.logging.LogRecord;import java.util.logging.Logger;/** * 日志类FileLog,包含一个日志和一个文件 * imutable */public class FileLog {private final Logger mylogger;private final FileHandler f;public FileLog(String name ,FileHandler fl) {mylogger = Logger.getLogger(name);this.mylogger.setLevel(Level.ALL);this.mylogger.setUseParentHandlers(false);//不输出到控制台,如果没有该语句,则控制台和文件都会输出this.f = fl;}/*** 为日志添加行为信息* @param message 行为信息内容,包括操作类型,计划项名字(如果对计划项进行操作)*/public void addmseeagelog(String message) {this.mylogger.setLevel(Level.INFO);//System.out.println("1");//if(this.mylogger.getLevel().equals(Level.))f.setFormatter(new myFormat());this.mylogger.addHandler(f);this.mylogger.info(message);}/*** 为日志添加警告信息* @param message 警告信息内容,包括异常/错误类型,异常/错误的具体信息、异常/错误处理的结果。或者为断言信息内容。*/public void addwarninglog(String message) {this.mylogger.setLevel(Level.WARNING);f.setFormatter(new myFormat());this.mylogger.addHandler(f);this.mylogger.warning(message);}public String logname() {return this.mylogger.getName();}}class myFormat extends Formatter{/*文件日志格式*/ @Override public String format(LogRecord record){     ZonedDateTime zdf =ZonedDateTime.now();     String sDate  = zdf.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));     //System.out.println("2+"+record.getMessage());      return "["+ sDate + "]: "+record.getMessage()+""+record.getLoggerName()+"";     }}