Log4j的學習--什麼是Log4j

1、什麼是Log4j

Log4j ApacheJava提供的日誌管理工具。他與System.out.println()的作用相似,用來跟蹤、調試、維護程序。

爲了你快速理解Log4j的作用,我們用下面的代碼說明Log4j的作用。

在沒有這個插件以前,我們爲了調試程序,總是需要在程序使用System.out.println()來輸出一些信息。例如下面的代碼:

              // 獲取UserService
		UserService userService = UserServiceFactory.getUserService();
		if(userService == null) {
			System.out.println("錯誤:userService沒有獲取到!");
			return;
		}
		
		// 獲取要查詢的User對象id
		String uid = request.getParameter("uid");
		int id;
		try {
			id = Integer.parseInt(uid);
		} catch(NumberFormatException e) {
			System.out.println("錯誤:無法將uid轉換成int類型!");
			throw e;
		}
		// 查詢User
		User user = userService.load(id);
		
		System.out.println("信息:已查詢到User對象");
		
		user.setPassword("zhangSan");
		System.out.println("信息:修改user的密碼");
		
		userService.save(user);
		System.out.println("信息:保存user信息");

   上面例子中所有的輸出語句都是用來調試程序的,相信你的代碼中也經常會出現這樣的調試代碼吧?這些調試代碼必須在項目完成後刪除。你想一想,一行一行的刪除會不會忘記幾行沒有刪除呢?

   使用Log4j來打印這些測試代碼,然後通過配置文件就能統一管理這些日誌信息了!我們可以在配置文件中關閉所有日誌,也可以在配置文件中打開所有日誌,也可以打開某個級別的日誌。甚至還可以管理日誌出現的格式(是否加上日期和時間),以及日誌輸出的目標(是否爲控制檯,是否爲文件)。

2、Log4j核心概念

Log4j中有三大組件:日誌器(Logger)、日誌輸出目標(Appender)、格式化器(Layout

1、Logger:用來輸出日誌消息的類,它可以輸出不同級別的消息,例如錯誤消息、警告消息等;

2、Appender;通常我們希望日誌輸出到文件中,以及控制檯,也可能希望日誌輸出數據庫,該類就表示一個輸出的目標;

3、Layout:對輸出的消息進行格式化,例如在消息中添加日期,以及級別等。

3、日誌級別

Log4j中日誌消息分爲五個級別,級別由高到低排列如下:

 FATAL:重大錯誤,例如系統崩潰;

 ERROR:錯誤,例如某模塊癱瘓;

 WARN:警告,程序的隱患,如果不處理,將來可能就是錯誤;

 INFO:信息,可以用來查看程序執行的流程;

 DEBUG:調試,用來調試程序的bug

我們可以使用日誌器輸出這五種不同的日誌,然後通過設置日誌器的級別來控制輸出的結果。來看下面的代碼:

@Test
public void test() {
		log.setLevel(Level.ERROR)//設置日誌級別爲ERROR
		log.debug("hello log4j debug!");
		log.info("hello log4j info!");
		log.warn("hello log4j warn!");
		log.error("hello log4j! error");
		log.fatal("hello log4j fatal!");   //輸出成功
       }

上面代碼中,只有error()fatal()兩個方法的輸出會完成,其他級別的輸出都不會完成。因爲設置日誌器的級別爲Level.ERROR後,只有高於ERROR級別的日誌才能輸出。

2、日誌器名稱

  在創建日誌器時,需要給日誌器指定一個名稱:Logger log = Logger.getLogger(“hello”);

         日誌器的名稱不只是一個名稱而已,日誌器的名稱說明了日誌器之間的父子關係。子日誌器會繼承父日誌器的AppenderLevel

日誌器的父子關係是通過日誌器的名稱來決定的,例如名稱爲com.chj的日誌器是com.chj.logger的日誌器的爸爸。com.chj.logger會繼承com.chjAppender以及Level


 

    @Test
	public void fun() {
		Logger log = Logger.getLogger("com.luowg");
		Appender appender = new ConsoleAppender(new SimpleLayout());
		log.addAppender(appender);
		log.setLevel(Level.ERROR);//創建名稱爲cn.chj的日誌器	
         	Logger log1 = Logger.getLogger("com.chj.logger");//創建名稱爲cn.chj.lgger的日誌器,它繼承名爲cn.itcast的格式化器
		log1.debug("看不見!");
	}


通常我們創建日誌器都是使用當前類的名稱來創建:

Logger log = Logger.getLogger(Demo.class.getName());

這樣我們可以通過配置父日誌器來改變日誌器的AppenderLevel



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章