日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 充電吧
[導讀]Java日志基礎Java使用了一種自定義的、可擴展的方法來輸出日志。雖然Java通過java.util.logging包提供了一套基本的日志處理API,但你可以很輕松的使用一種或者多種其它日志解決方案

Java日志基礎

Java使用了一種自定義的、可擴展的方法來輸出日志。雖然Java通過java.util.logging包提供了一套基本的日志處理API,但你可以很輕松的使用一種或者多種其它日志解決方案。這些解決方案盡管使用不同的方法來創(chuàng)建日志數(shù)據(jù),但它們的最終目標是一樣的,即將日志從你的應用程序輸出到目標地址。

在這一節(jié)中,我們會探索Java日志背后的原理,并說明如何通過日志來讓你成為一個更好的Java開發(fā)人員。

Java日志組件

Java日志API由以下三個核心組件組成:

Loggers:Logger負責捕捉事件并將其發(fā)送給合適的Appender。Appenders:也被稱為Handlers,負責將日志事件記錄到目標位置。在將日志事件輸出之前,Appenders使用Layouts來對事件進行格式化處理。Layouts:也被稱為Formatters,它負責對日志事件中的數(shù)據(jù)進行轉(zhuǎn)換和格式化。Layouts決定了數(shù)據(jù)在一條日志記錄中的最終形式。

當Logger記錄一個事件時,它將事件轉(zhuǎn)發(fā)給適當?shù)腁ppender。然后Appender使用Layout來對日志記錄進行格式化,并將其發(fā)送給控制臺、文件或者其它目標位置。另外,F(xiàn)ilters可以讓你進一步指定一個Appender是否可以應用在一條特定的日志記錄上。在日志配置中,F(xiàn)ilters并不是必需的,但可以讓你更靈活地控制日志消息的流動。


日志框架

在Java中,輸出日志需要使用一個或者多個日志框架,這些框架提供了必要的對象、方法和配置來傳輸消息。Java在java.util.logging包中提供了一個默認的框架。除此之外,還有很多其它第三方框架,包括Log4j、Logback以及tinylog。還有其它一些開發(fā)包,例如SLF4J和Apache Commons Logging,它們提供了一些抽象層,對你的代碼和日志框架進行解耦,從而允許你在不同的日志框架中進行切換。

如何選擇一個日志解決方案,這取決于你的日志需求的復雜度、和其它日志解決方案的兼容性、易用性以及個人喜好。Logback基于Log4j之前的版本開發(fā)(版本1),因此它們的功能集合都非常類似。然而,Log4j在最新版本(版本2)中引用了一些改進,例如支持多API,并提升了在用Disruptor庫的性能。而tinylog,由于缺少了一些功能,運行特別快,非常適合小項目。

另外一個考慮因素是框架在基于Java的各種不同項目上的支持程度。例如Android程序只能使用Log4j、Logback或者第三方包來記錄日志, Apache Tomcat可以使用Log4j來記錄內(nèi)部消息,但只能使用版本1的Log4j。

抽象層

諸如SLF4J這樣的抽象層,會將你的應用程序從日志框架中解耦。應用程序可以在運行時選擇綁定到一個特定的日志框架(例如java.util.logging、Log4j或者Logback),這通過在應用程序的類路徑中添加對應的日志框架來實現(xiàn)。如果在類路徑中配置的日志框架不可用,抽象層就會立刻取消調(diào)用日志的相應邏輯。抽象層可以讓我們更加容易地改變項目現(xiàn)有的日志框架,或者集成那些使用了不同日志框架的項目。

配置

盡管所有的Java日志框架都可以通過代碼進行配置,但是大部分配置還是通過外部配置文件完成的。這些文件決定了日志消息在何時通過什么方式進行處理,日志框架可以在運行時加載這些文件。在這一節(jié)中提供的大部分配置示例都使用了配置文件。

java.util.logging

默認的Java日志框架將其配置存儲到一個名為 logging.properties 的文件中。在這個文件中,每行是一個配置項,配置項使用點標記(dot notation)的形式。Java在其安裝目錄的lib文件夾下面安裝了一個全局配置文件,但在啟動一個Java程序時,你可以通過指定 java.util.logging.config.file 屬性的方式來使用一個單獨的日志配置文件,同樣也可以在個人項目中創(chuàng)建和存儲 logging.properties 文件。

下面的示例描述了如何在全局的logging.properties文件中定義一個Appender:

1 2 3 4 5# default file output is in user's home directory.java.util.logging.FileHandler.pattern = %h/java%u.logjava.util.logging.FileHandler.limit = 50000java.util.logging.FileHandler.count = 1java.util.logging.FileHandler.formatter = java.util.logging.XmlFormatterLog4j

Log4j版本1使用的語法和 java.util.logging 的語法很類似。使用了Log4j的程序會在項目目錄中尋找一個名為 log4j.properties 的文件。默認情況下,Log4j配置會將所有日志消息輸出到控制臺上。Log4j同樣也支持XML格式的配置文件,對應的配置信息會存儲到 log4j.xml 文件中。

Log4j版本2支持XML、JSON和YAML格式的配置,這些配置會分別存儲到 log4j2.xml、log4j2.json 和 log4j2.yaml 文件中。和版本1類似,版本2也會在工程目錄中尋找這些文件。你可以在每個版本的文檔中找到相應的配置文件示例。

Logback

對于Logback來說,大部分配置都是在logback.xml文件中完成的,這個文件使用了和Log4j類似的XML語法。Logback同時也支持通過Groovy語言的方式來進行配置,配置信息會存儲到logback.groovy文件中。你可以通過每種類型配置文件的鏈接找到對應的配置文件示例。

Loggers

Loggers是用來觸發(fā)日志事件的對象,在我們的Java應用程序中被創(chuàng)建和調(diào)用,然后Loggers才會將事件傳遞給Appender。一個類中可以包含針對不同事件的多個獨立的Loggers,你也可以在一個Loggers里面內(nèi)嵌一個Loggers,從而創(chuàng)建一種Loggers層次結構。

創(chuàng)建新Logger

在不同的日志框架下面創(chuàng)建新Logger過程大同小異,盡管調(diào)用的具體方法名稱可能不同。在使用 java.util.logging 時,你可以通過 Logger.getLogger().getLogger() 方法創(chuàng)建新Logger,這個方法接收一個string參數(shù),用于指定Logger的名字。如果指定名字的Logger已經(jīng)存在,那么只需要返回已經(jīng)存在的Logger;否則,程序會創(chuàng)建一個新Logger。通常情況下,一種好的做法是,我們在當前類下使用 class.getName() 作為新Logger的名字。

1Logger logger = Logger.getLogger(MyClass.class.getName());記錄日志事件

Logger提供了幾種方法來觸發(fā)日志事件。然而,在你記錄一個事件之前,你還需要設置級別。日志級別用來確定日志的嚴重程度,它可以用來過濾日志事件或者將其發(fā)送給不同的Appender(想了解更多信息,請參考“日志級別”一節(jié)),Logger.log() 方法除了日志消息以外,還需要一個日志級別作為參數(shù):

1logger.log(Level.WARNING, “This is a warning!”);

大部分日志框架都針對輸出特定級別日志提供了快捷方式。例如,下面語句的作用和上面語句的作用是一樣的:

1logger.warning(“This is a warning!”);

你還可以阻止Logger輸出低于指定日志級別的消息。在下面的示例中,Logger只能輸出高于WARNING級別的日志消息,并丟棄日志級別低于WARNING的消息:

1logger.setLevel(Level.WARNING);

我們還有另外一些方法可以用來記錄額外的信息。logp()(精確日志)可以讓你指定每條日志記錄的源類(source class)和方法,而 logrb()(使用資源綁定的日志)可以讓你指定用于提取日志消息的資源。entering() 和 exiting() 方法可以讓你記錄方法調(diào)用信息,從而追蹤程序的執(zhí)行過程。

Appenders

Appenders將日志消息轉(zhuǎn)發(fā)給期望的輸出。它負責接收日志事件,使用Layout格式化事件,然后將其發(fā)送給對應的目標。對于一個日志事件,我們可以使用多個Appenders來將事件發(fā)送到不同的目標位置。例如,我們可以在控制臺上顯示一個簡單的日志事件的同時,將其通過郵件的方式發(fā)送給指定的接收者。

請注意,在java.util.logging中,Appenders被稱作Handlers。

增加Appender

大部分日志框架的Appender都會執(zhí)行類似的功能,但在實現(xiàn)方面大相徑庭。如果使用 java.util.logging,你可以使用 Logger.addHandler() 方法將Appender添加到Logger中。例如,下面的代碼添加了一個新的ConsoleHandler,它會將日志輸出到控制臺:

1logger.addHandler(newConsoleHandler());

一種更常用的添加Appender的方式是使用配置文件。如果使用 java.util.logging,Appenders會定義一個以逗號隔開的列表,下面的示例將日志事件輸出到控制臺和文件:

1handlers=java.util.logging.ConsoleHandler, java.util.logging.FileHandler

如果使用基于XML的配置文件,Appenders會被添加到

1 2 3<Consolename="console"target="SYSTEM_OUT"><PatternLayoutpattern="[%p] %t: %m%n" />Console>Appenders類型

這一節(jié)描述了一些更通用的Appenders,以及它們在各種日志框架中是如何實現(xiàn)的。

ConsoleAppender

ConsoleAppender是最常用的Appenders之一,它只是將日志消息顯示到控制臺上。許多日志框架都將其作為默認的Appender,并且在基本的配置中進行預配置。例如,在Log4j中ConsoleAppender的配置參數(shù)如下所示。

filter 用于決定是否需要使用該Appender來處理日志事件 layout 用于決定如何對日志記錄進行格式化,默認情況下使用“%m%n”,它會在每一行顯示一條日志記錄 follow 用于決定Appender是否需要了解輸出(system.out或者system.err)的變化,默認情況是不需要跟蹤這種變化 name 用于設置Appender的名字 ignoreExceptions 用于決定是否需要記錄在日志事件處理過程中出現(xiàn)的異常 target 用于指定輸出目標位置,默認情況下使用SYSTEM_OUT,但也可以修改成SYSTEM_ERR

一個完整的Log4j2的配置文件如下所示:

1 2 3 4 5 6 7 8 9 10 11 12 13<?xmlversion="1.0"encoding="UTF-8"<code class="xml plain" style="border:0px!important; margin:0px!important; padding:0px!important; font-family:Consolas,'Bitstream Vera Sans Mono','參數(shù)描述
本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅(qū)動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅(qū)動性能的關鍵。

關鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅(qū)動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關鍵字: LED 驅(qū)動電源 開關電源

LED驅(qū)動電源是把電源供應轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅(qū)動電源
關閉