Java 菜鳥教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊(duì)列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java 日志(Logging)

在本教程中,我們將借助示例學(xué)習(xí)Java日志記錄及其各種組件。

Java允許我們通過日志記錄過程來創(chuàng)建和捕獲日志消息和文件。

在Java中,日志記錄需要框架和API。Java在java.util.logging程序包中具有內(nèi)置的日志記錄框架。

我們還可以將第三方框架(如Log4j,Logback等)用于日志記錄。

Java 日志組件

下圖顯示了Java Logging API(java.util.logging)的核心組件和指定流程。

Java Logging API的指定流
Java日志流程圖

1.Logger

Logger類提供了日志記錄的方法。我們可以從Logger類中實(shí)例化對象并調(diào)用其方法以進(jìn)行記錄。

讓我們舉個(gè)實(shí)例。

Logger logger = Logger.getLogger("newLoggerName");

Logger類的getLogger()方法用于查找或創(chuàng)建新的Logger。 字符串參數(shù)定義logger的名稱。

在這里,這將創(chuàng)建一個(gè)新Logger對象或返回一個(gè)具有相同名稱的Logger對象。

按照慣例,使用class.getName()在當(dāng)前類之后定義一個(gè)Logger。

Logger logger = Logger.getLogger(MyClass.class.getName());

注意:如果傳遞的名稱為null,該方法將拋出NullPointerException。

每個(gè)Logger都有確定日志消息重要性的級(jí)別。有7個(gè)基本日志級(jí)別:

日志級(jí)別(降序)使用
SEVERE嚴(yán)重故障
WARNING

警告消息,潛在問題

INFO常規(guī)運(yùn)行時(shí)信息
CONFIG配置信息
FINE

普通的開發(fā)人員信息(跟蹤消息)

FINER

詳細(xì)的開發(fā)人員信息(跟蹤消息)

FINEST

高度詳細(xì)的開發(fā)人員信息(跟蹤消息)

OFF

關(guān)閉所有級(jí)別的日志記錄(不捕獲任何內(nèi)容)

ALL

打開所有級(jí)別的日志記錄(捕獲所有內(nèi)容)

每個(gè)日志級(jí)別都有一個(gè)整數(shù)值,用來確定它們的嚴(yán)重性,除了兩個(gè)特殊的日志級(jí)別OFF和ALL之外。

日志消息

默認(rèn)情況下,始終會(huì)記錄前三個(gè)日志級(jí)別。要設(shè)置其他級(jí)別,我們可以使用以下代碼:

logger.setLevel(Level.LogLevel);

// 示例
logger.setLevel(Level.FINE);

在本示例中,只有Level.FINE和它之上的級(jí)別被設(shè)置為日志記錄。刪除所有其他日志消息。

現(xiàn)在要記錄一條日志消息,我們使用該log()方法。

logger.log(Level.LogLevel, "log message");

// 示例
logger.log(Level.INFO, "This is INFO log level message");

有一些用于記錄所需級(jí)別的速記方法。

logger.info( "這是INFO日志級(jí)別的消息");
logger.warning( "這是WARNING日志級(jí)別的消息");

然后,已通過設(shè)置的日志級(jí)別的所有日志請求都將轉(zhuǎn)發(fā)到LogRecord。

注意:如果一個(gè)日志記錄器的級(jí)別被設(shè)置為null,那么它的級(jí)別將從其父繼承,以此類推。

2.篩選器(Filter)

過濾器(如果存在)決定LogRecord是否轉(zhuǎn)發(fā)該日志記錄。顧名思義,它根據(jù)特定的標(biāo)準(zhǔn)過濾日志消息。

如果LogRecord通過指定的條件,則僅從記錄器傳遞到日志處理程序,并從日志處理程序傳遞到外部系統(tǒng)。

// 設(shè)置filter
logger.setFilter(filter);

// 獲取 filter
Filter filter = logger.getFilter();

3.處理程序(輸出源)

日志處理程序或附加程序?qū)⒔邮?strong>LogRecord并將其導(dǎo)出到各種目標(biāo)。

Java SE提供了5個(gè)內(nèi)置處理程序:

處理程序使用
StreamHandler

寫入OutputStream

ConsoleHandler寫入控制臺(tái)
FileHandler寫入文件
SocketHandler

寫入到遠(yuǎn)程TCP端口

MemoryHandler寫入內(nèi)存

處理程序可以將LogRecord傳遞到過濾器,以再次確定是否可以將其轉(zhuǎn)發(fā)到外部系統(tǒng)。

要添加新的處理程序,我們使用以下代碼:

logger.addHandler(handler);

// 示例
Handler handler = new ConsoleHandler();
logger.addHandler(handler);

要?jiǎng)h除處理程序,我們使用以下代碼:

logger.removeHandler(handler);

// 示例
Handler handler = new ConsoleHandler();
logger.addHandler(handler);
logger.removeHandler(handler);

一個(gè)記錄器可以有多個(gè)處理程序。要獲取所有處理程序,我們使用以下代碼:

Handler[] handlers = logger.getHandlers();

4.格式化程序(Formatter)

處理程序還可以使用FormatterLogRecord對象格式化為字符串,然后再將其導(dǎo)出到外部系統(tǒng)。

Java SE具有兩個(gè)內(nèi)置的Formatter

格式化程序使用
SimpleFormatter

將LogRecord格式化為字符串

XMLFormatter

將LogRecord格式化為XML格式

我們可以使用以下代碼來格式化處理程序:

// 格式化成字符串形式
handler.setFormatter(new SimpleFormatter());

// 格式化成XML格式
handler.setFormatter(new XMLFormatter());

日志管理器

日志管理對象跟蹤的全球記錄的信息。它讀取并維護(hù)日志記錄配置和記錄器實(shí)例。

日志管理器是單例,這意味著僅實(shí)例化了一個(gè)實(shí)例。

要獲取日志管理器實(shí)例,我們使用以下代碼:

LogManager manager = new LogManager();

日志的優(yōu)點(diǎn)

這是使用Java 日志的一些優(yōu)點(diǎn)。

  • 幫助監(jiān)控程序的流程

  • 幫助捕獲可能發(fā)生的任何錯(cuò)誤

  • 為問題診斷和調(diào)試提供支持

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清