java logging是什么,让我们一起了解一下?
Logging是在Java中的API,让Java应用可以记录不同级别的信息,在debug过程中非常有用,如果系统因为各种各样的原因而崩溃,崩溃原因可以在日志中清晰地追溯。
一般对于Java的日志处理,可能大家首先联想到的就是Log4J,Apache的这个项目确实广泛的应用于各个系统中,但是后来Sun在JDK中也添加了类似的日志功能,使用JDK自带的日志处理比Log4J特别好的一点就是不需要导入任何第三方Jar。
JDK自带日志类位于java.util.logging包中,同时在JDK安装目录的jre/lib下面有个默认的日志属性文件:logging.properties。
其次,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()+"\n"+record.getLoggerName()+"\n"; } }
以上就是小编今天的分享了,希望可以帮助到大家。