java中Logger.getLogger(Test.class)
java中Logger.getLogger(Test.class)
log4的使用方法:
log4是具有日志記錄功能,主要通過一個配置文件來對程序進行監測
有兩種配置方式:一種程序配置,一種文件配置
有三個主要單元要了解,Logger,appender,layout.
logger是進行記錄的主要類,appender是記錄的方式,layout是記錄的格式
logger七種日志級別:debug,info,warn,error,fatal,all,off
最常用的應該是debug()和info();而warn()、error()、fatal()僅在相應事件發生后才使用
appender主要分三類,終端輸出,文件輸出,流輸出
ConsoleAppender
FileAppender
WriterAppender
layout也分三類:簡單格式,html格式,匹配格式
SimpleLayout
HTMLLayout
PatternLayout
輸出簡寫:(用在PatternLayout)
%m 輸出代碼中指定的消息
%p 輸出優先級
%r 輸出自應用啟動到輸出該log信息耗費的毫秒數
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產生該日志事件的線程名
%n 輸出一個回車換行符,Windows平臺為“\r\n”,Unix平臺為“\n”
%d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。一般使用了它就不需使用%c了
[按照下面步驟來寫吧!就可以得到我們所想要的日志文件哦!]
[按照順序就可以將日志文件讀出來了!]
作用實例:
程序配置一般過程:
1.得到特定名稱的logger
2.得到其中一個layout
3.根據layout得到appender
4.logger添加appender
5.logger設置級別
6.logger輸出有級別的日志信息
程序:
Logger logger = Logger.getLogger(Test.class.getName())?//取得logger
SimpleLayout simpleLayut = new SimpleLayout()?//取得layout
FileAppender fa = new FileAppender(simpleLayout,"test.log") //取得ppender
logger.addAppender(fa)?//添加appender
logger.set((Level)Level.DEBUG)?//設置級別
logger.debug("hihihihih")?//記錄信息
文件配置過程:
1.得到特定名稱的logger
2.加載配置文件?(配置文件做了2-5的工作)
3.logger輸出有級別的日志信息
文件配置程序:
1.Logger logger = Logger.getLogger(Test.class.getName())?//取得logger
2.使用下面的配置加載
3.輸出信息
文件配置分properties,xml
讀取properties:
PropertyConfigurator.configure("logTest.properties");
讀取xml:
DOMConfigurator.configure("src/logTest.xml");
告別System.out.print()—J2SDK1.4新增Java日志框架 (一)
作為一名Java 程序員,最熟悉的、使用最多的調用恐怕莫過于System.out.print(“…”)。當你沒有調試工具而要跟蹤一個變量的值得時候;當你需要顯示捕獲的Exception、Error的時候;當你想知道程序在運行的時候究竟發生了什么的時候,通常的做法就是調用System.out.print把他們在終端、控制臺上打印出來。這種方式對于輸出信息的分類、格式化及永久保存帶來諸多不便。雖然我們可以把它寫入一個文件然后進行分析,但是這要需要編寫額外的程序代碼,其成本不可忽視!而由此給目標系統本身增加的復雜程度不可避免的使開發、調試陷入一個深深的迷潭。
[要知道一點:如果說能不寫的代碼最好不要寫!]
JDK1.4的推出,使得這一切即將成為歷史。讓我們向System.out.print()告別吧,使用Java Logging API為自己的程序構建一個完整的日志記錄系統!
一、第一個實例
先看一個簡單的實例:SimpleLoggingTest.java
1?import java.util.logging.*;
2 public class SimpleLoggingTest {
3?public static void main(String args[]) {
4?//程序的其它處理
5?//使用Logger的靜態方法獲得一個匿名?//Logger
6?Logger logger1 = Logger.getAnonymousLogger();
7?//記錄消息
8?logger1.log(Level.INFO,"第一條日志記錄");
9?//程序的其它處理
10?}
11 }
實例1
注意:編譯、執行該程序需要JDK1.4及以上版本的支持。
運行該程序,可以在控制臺看到程序運行結果:
2003-1-14 15:09:40 SimpleLoggingTest main
信息: 第一條日志記錄
首先,程序引用java.util.Logging包(第1行)。接著,在適當的時候獲得一個Logger(記錄器)類的實例(第6行,獲取一個匿名的Logger)。最后,在程序需要記錄信息的地方調用Logger類的log方法進行記錄(第8行,記錄一個INFO級別的消息)。
二、Java Logging API
Java Logging API封裝在JDK1.4.0的java.util.Logging 包中。它通過產生便于最終用戶、系統管理員、故障維護工程師以及軟件開發團隊(工程師)進行分析的日志記錄為軟件的開發調試和維護提供便利的手段。它捕獲操作系統平臺和執行程序的安全故障、配置錯誤、執行瓶頸和(或)Bug等數據信息,以純文本、XML或程序員自定的某種方式將其格式化成日志記錄,然后傳遞給內存、系統輸出流、控制臺、文件、Sockets等多種系統資源進行緩存和輸出。
(一)、該軟件包中的關鍵類。
n?Logger:?應用程序進行日志記錄調用的主要實體。 Logger對象用于記錄特定系統或應用程序的消息。
n?LogRecord:?用于在日志框架和單個記錄處理程序之間傳遞記錄請求。
n?Handler:?日志數據的最終輸出處理器。它將LogRecord對象導出到各種目標,包括內存、輸出流、控制臺、文件和套接字。多種Handler子類可供用于這種用途。
圖一
n?Level:?定義一組標準的記錄級別,可用于控制記錄的輸出??梢园殉绦蚺渲脼橹惠敵瞿承┘墑e的記錄,而忽略其他級別的輸出。
n?Filter:?精細過濾、控制記錄的內容,比記錄級別所提供的控制準確得多。記錄API支持通用的過濾器機制,這種機制允許應用程序代碼添加任意過濾器以便控制記錄的輸出。
n?Formatter:?為LogRecord對象的格式化提供支持。
圖二
n?LogManager: Java Logging框架中唯一的、全局的對象,用于維護與Logger記錄器及日志服務的一系列共享的數據結構及狀態。它負責整個日志框架的初始化、維護一組全局性的Handle對象、維護一個樹形結構的Logger的名字空間、診測日志框架配置文件的改變從而重新讀入并應用相關的參數以及負責程序停止運行時整個日志框架的清理工作。
(二)Logger
1、Logger的命名空間
在SimpleLoggingTest.java實例中,我們使用了一個匿名的(沒有命名的)Logger對象。在Java Logging 框架中,Logger是可以命名的。Logger的名字空間與java類的名字空間相同的結構相同:使用“.”間隔的字符串。Logger的名字空間體現了Logger的層次結構。例如:命名為“a.b”的Logger是命名為“a.b.c”的“父”(上一級)Logger記錄器。Logger的命名可以是任意的字符串,一般情況下,使用包或類的名字為Logger 進行命名。
Logger的名字空間由全局單列類LogManager的實例進行創建、維護。
[貌似在處理數據庫的時候的DriverManage來管理數據庫驅動一樣了!]
匿名Logger不被存儲在命名空間中。
2、創建Logger實例
Logger對象可以通過調用工廠方法getLogger或getAnonymousLogger獲取。
//獲取一個名為“A”的Logger對象
Logger loggerA= Logger.getLogger(“A”);
// 獲取一個名
為“A.B”的Logger對象,其上級記錄器為loggerA。
Logger loggerAB= Logger.getLogger(“A.B”);
//獲取一個匿名Logger對象
Logger loggerTmp = Logger.getAnonymousLogger();
對非匿名Logger,getLogger先在命名空間中查找同名的Logger對象,如果有,則返回該Logger對象;如果不存在,則在命名空間中創建注冊一個新的Logger對象,并與其上級Logger對象相關聯。
匿名Logger對象屬于創建它的對象的私有對象,只能由創建它的對象使用,記錄一些臨時性的日志信息。而命名Logger對象使全局性的,在日志框架的生存期內,除了創建它的對象外還,可由其它對象用于記錄日志信息。
匿名的Logger對象由一個全局的的root Logger “” 對象(root Logger的名字為空)。這意味著所有匿名Logger對象將從root Logger “”中繼承行為。
匿名Logger對象通常用于java Applet應用中。它去掉了在運行過程中的一班性的安全檢查,允許其創建類對象對Logger的控制、狀態信息進行修改,如:setLevel設置Logger的日志消息記錄級別;addHandle增加Logger的Handle(處理器)對象等。
一個Logger對象可以擁有有零個到多個Handler實例。當沒有Handler時,如不禁止日志記錄沿名字空間向上傳遞,那該Logger對象的日志消息記錄將有其擁有Handler實例的上級Logger進行處理。當一個Logger對象擁有多個 Handler實例對象時,其記錄的日志數據將被所有的Handler逐一進行處理。
?
轉載于:https://www.cnblogs.com/zhao1949/p/5949211.html
總結
以上是生活随笔為你收集整理的java中Logger.getLogger(Test.class)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支付宝每天三次抽奖在哪里
- 下一篇: 背包问题lingo求解