Java系列:《Java核心技术 卷一》学习笔记,chapter11 记录日志
生活随笔
收集整理的這篇文章主要介紹了
Java系列:《Java核心技术 卷一》学习笔记,chapter11 记录日志
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
11.5 日志記錄可以通過(guò)Loger.getGlobal().info(xxxx);的方式來(lái)記錄log。
11.5.2 高級(jí)日志
1)通過(guò)一個(gè)包名來(lái) 創(chuàng)建一個(gè)新的日志記錄器。private static final Logger logger = Logger.getLogger("my.learvjava.learnlog");
2)日志記錄器也具有層次結(jié)構(gòu),且日志記錄器的父子之間將共享某些屬性,比如如果對(duì)com.mycompany設(shè)置了日志級(jí)別,那么其子記錄器也會(huì)繼承這個(gè)級(jí)別。3)有以下7個(gè)日志記錄器級(jí)別:SEVERWARNINGINFOCONFIGFINEFINERFINEST默認(rèn)值記錄前三個(gè)級(jí)別。可以使用Level.ALL來(lái)開(kāi)啟所有級(jí)別的記錄,或者使用 Level.OFF來(lái)關(guān)閉所有級(jí)別的記錄。4)由于默認(rèn)記錄了info及其以上的級(jí)別,所以要使用? ? CONFIG, FINE, FINER, FINEST來(lái)記錄那些有助于診斷,但是對(duì)程序員沒(méi)有太大意義的調(diào)試信息。
5)void entering(xxx), void exiting(xxxx)將生成finer級(jí)別的日志信息。6)可以用下面的方法來(lái)記錄日志中包含的異常信息。if(xxxx){ IOException e = new IOException("xxx); logger.throwing("com.mycompany.mlib.Reader", 'read", e); throw e; } 調(diào)用throwing可以記錄一條finner級(jí)別的記錄和一條以THROW開(kāi)始的信息。
11.5.3??修改日志管理配置? ? 默認(rèn)情況下位于e/lib/logging.properties文件內(nèi)。
?? ? 如果要修改,就需要在啟動(dòng)的時(shí)候通過(guò)如下命令來(lái)修改:? ? java?? ? -Djava.util.logging.config.file=configfile mainjavaclass
? ? 因?yàn)槟J(rèn)的日志信息是記錄在java.util.logging.config.file這個(gè)靜態(tài)變量中的。
? ? 在main方法中調(diào)用System.setProperties("java.util.logging.config.file", file)不會(huì)起作用,其原因是日志管理器在vm啟動(dòng)過(guò)程中被初始化,他會(huì)在main之前被執(zhí)行。
? ? 可以通過(guò)在logging.properties中添加如下命令來(lái)設(shè)置日志記錄級(jí)別
? ? .level=FINE
? ??
? ??
11.5.4 本地化? ? 雖然五年前我們?cè)谧鑫覀儜?yīng)用程序的本地化的時(shí)候完全是靠自己想象的,但是現(xiàn)在回頭來(lái)看,其實(shí)我們做的東西和java的本地化的思路是類似的,都是針對(duì)不同的語(yǔ)言提供不同的語(yǔ)言文件,通過(guò)key=value的文本文件的方式來(lái)提供。
? ? java中稍微有點(diǎn)區(qū)別,他允許同時(shí)存在多種語(yǔ)言的語(yǔ)言文件,只是在名字中增加語(yǔ)言前綴,而我們是通過(guò)將語(yǔ)言文件放在語(yǔ)言文件夾中來(lái)決定的。
? ??
? ? 這也側(cè)面說(shuō)明了當(dāng)編程進(jìn)行到一定階段之后,解決問(wèn)題的思路是想通的。
? ??
? ??
11.5.5 處理器? ? 與日志記錄器一樣,日志處理器也有日志記錄級(jí)別。對(duì)于一個(gè)要被記錄的日志,他的日志級(jí)別必須高于日志記錄器和處理器的閾值。? ? 日志管理器配置文件中記錄的控制臺(tái)處理器的日志級(jí)別為:? ? java.util.logging.ConsoleHandler.level=INFO? ??? ? 也可以繞過(guò)配置文件,不適用默認(rèn)的處理器,而適用自定義的處理器:? Logger logger = Logger.getLogger("com.mycompany.myapp"); logger.setLevel(Level.FINE); logger.setUseParantHanler(false); Handler handler = new ConsoleHandler(); handler.setLevel(Level.FINE); logger.addHandler(handler); ? ?要想將日志發(fā)送到其他地方,就需要添加其他的處理器。java api為此提供了兩個(gè)很有用的處理器:FileHandler, SocketHandler。
FileHandler fileHandler = new FileHandler(); logger.addHandler(fileHandler); ? ? 如果希望寫更復(fù)雜的流處理器,就應(yīng)該擴(kuò)展Handler類,并自定義public/flush/close方法。
? ??
11.5.6 過(guò)濾器? ? 只需要實(shí)現(xiàn)Filter接口的? ? boolean isLoggable(LogRecord record);? ? 方法,就可以定義一個(gè)自己的過(guò)濾器。? ??? ? 記錄器和處理器都可以設(shè)置過(guò)濾器,每個(gè)記錄器和處理最多只能設(shè)置一個(gè)過(guò)濾器。? ??? ???11.5.7 格式化器? ? 實(shí)現(xiàn)Formatter接口,然后實(shí)現(xiàn)其中的 String format(LogRecord record)方法即可。? ? 然后在通過(guò)調(diào)用處理器的setFormater(Fomater formater)方法來(lái)設(shè)置。? ??? ??? ?
來(lái)自為知筆記(Wiz)
11.5.2 高級(jí)日志
1)通過(guò)一個(gè)包名來(lái) 創(chuàng)建一個(gè)新的日志記錄器。private static final Logger logger = Logger.getLogger("my.learvjava.learnlog");
2)日志記錄器也具有層次結(jié)構(gòu),且日志記錄器的父子之間將共享某些屬性,比如如果對(duì)com.mycompany設(shè)置了日志級(jí)別,那么其子記錄器也會(huì)繼承這個(gè)級(jí)別。3)有以下7個(gè)日志記錄器級(jí)別:SEVERWARNINGINFOCONFIGFINEFINERFINEST默認(rèn)值記錄前三個(gè)級(jí)別。可以使用Level.ALL來(lái)開(kāi)啟所有級(jí)別的記錄,或者使用 Level.OFF來(lái)關(guān)閉所有級(jí)別的記錄。4)由于默認(rèn)記錄了info及其以上的級(jí)別,所以要使用? ? CONFIG, FINE, FINER, FINEST來(lái)記錄那些有助于診斷,但是對(duì)程序員沒(méi)有太大意義的調(diào)試信息。
5)void entering(xxx), void exiting(xxxx)將生成finer級(jí)別的日志信息。6)可以用下面的方法來(lái)記錄日志中包含的異常信息。
11.5.3??修改日志管理配置? ? 默認(rèn)情況下位于e/lib/logging.properties文件內(nèi)。
?? ? 如果要修改,就需要在啟動(dòng)的時(shí)候通過(guò)如下命令來(lái)修改:? ? java?? ? -Djava.util.logging.config.file=configfile mainjavaclass
? ? 因?yàn)槟J(rèn)的日志信息是記錄在java.util.logging.config.file這個(gè)靜態(tài)變量中的。
? ? 在main方法中調(diào)用System.setProperties("java.util.logging.config.file", file)不會(huì)起作用,其原因是日志管理器在vm啟動(dòng)過(guò)程中被初始化,他會(huì)在main之前被執(zhí)行。
? ? 可以通過(guò)在logging.properties中添加如下命令來(lái)設(shè)置日志記錄級(jí)別
? ? .level=FINE
? ??
? ??
11.5.4 本地化? ? 雖然五年前我們?cè)谧鑫覀儜?yīng)用程序的本地化的時(shí)候完全是靠自己想象的,但是現(xiàn)在回頭來(lái)看,其實(shí)我們做的東西和java的本地化的思路是類似的,都是針對(duì)不同的語(yǔ)言提供不同的語(yǔ)言文件,通過(guò)key=value的文本文件的方式來(lái)提供。
? ? java中稍微有點(diǎn)區(qū)別,他允許同時(shí)存在多種語(yǔ)言的語(yǔ)言文件,只是在名字中增加語(yǔ)言前綴,而我們是通過(guò)將語(yǔ)言文件放在語(yǔ)言文件夾中來(lái)決定的。
? ??
? ? 這也側(cè)面說(shuō)明了當(dāng)編程進(jìn)行到一定階段之后,解決問(wèn)題的思路是想通的。
? ??
? ??
11.5.5 處理器? ? 與日志記錄器一樣,日志處理器也有日志記錄級(jí)別。對(duì)于一個(gè)要被記錄的日志,他的日志級(jí)別必須高于日志記錄器和處理器的閾值。? ? 日志管理器配置文件中記錄的控制臺(tái)處理器的日志級(jí)別為:? ? java.util.logging.ConsoleHandler.level=INFO? ??? ? 也可以繞過(guò)配置文件,不適用默認(rèn)的處理器,而適用自定義的處理器:?
? ??
11.5.6 過(guò)濾器? ? 只需要實(shí)現(xiàn)Filter接口的? ? boolean isLoggable(LogRecord record);? ? 方法,就可以定義一個(gè)自己的過(guò)濾器。? ??? ? 記錄器和處理器都可以設(shè)置過(guò)濾器,每個(gè)記錄器和處理最多只能設(shè)置一個(gè)過(guò)濾器。? ??? ???11.5.7 格式化器? ? 實(shí)現(xiàn)Formatter接口,然后實(shí)現(xiàn)其中的 String format(LogRecord record)方法即可。? ? 然后在通過(guò)調(diào)用處理器的setFormater(Fomater formater)方法來(lái)設(shè)置。? ??? ??? ?
來(lái)自為知筆記(Wiz)
轉(zhuǎn)載于:https://www.cnblogs.com/strinkbug/p/4997914.html
總結(jié)
以上是生活随笔為你收集整理的Java系列:《Java核心技术 卷一》学习笔记,chapter11 记录日志的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JAVA自学笔记08
- 下一篇: 设置Eclipse中的字符集为UTF-8