
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";
????
?}
}以上就是小編今天的分享了,希望可以幫助到大家。
