java --log4j

#1.入門實例
1.新建一個java工程,導入log4j-1.2.14.jar包,最終工程目錄以下
輸入圖片說明
2.src下新建log4j.properties文件java

#指定日誌級別爲DEBUG,所以級別高於debug的info < warn < error < fatal都會被輸出來
#指定日誌輸出地名稱:stdout、D和E
log4j.rootLogger=DEBUG, stdout, D, E

#以下是配置stdout輸出地
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

#以下是配置D輸出地
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = F:\\Test\\logs\\debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

# 以下是配置E輸出地
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = F:\\Test\\logs\\error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

關於以上配置的詳解請參看個人另外一篇文章
http://www.javashuo.com/article/p-qxayphht-mo.html
3.測試web

package com.test.log4j;

import org.apache.log4j.Logger;

public class TestLog4j {
	private static Logger logger = Logger.getLogger(TestLog4j.class);
	public static void main(String[] args) {
		logger.debug("這是debug信息");
		logger.info("這是info信息");
		
		logger.error("這是error信息");
	}
}

測試結果,控制檯顯示spring

[DEBUG] 2016-09-27 13:34:20,600 method:com.test.log4j.TestLog4j.main(TestLog4j.java:8)
這是debug信息
[INFO ] 2016-09-27 13:34:20,603 method:com.test.log4j.TestLog4j.main(TestLog4j.java:9)
這是info信息
[ERROR] 2016-09-27 13:34:20,603 method:com.test.log4j.TestLog4j.main(TestLog4j.java:11)
這是error信息

文件輸出地方顯示
輸入圖片說明
debug.log文件內容apache

[DEBUG] 2016-09-27 13:34:20,600 method:com.test.log4j.TestLog4j.main

(TestLog4j.java:8)
這是debug信息
[INFO ] 2016-09-27 13:34:20,603 method:com.test.log4j.TestLog4j.main

(TestLog4j.java:9)
這是info信息
[ERROR] 2016-09-27 13:34:20,603 method:com.test.log4j.TestLog4j.main

(TestLog4j.java:11)
這是error信息

error.log文件內容瀏覽器

[ERROR] 2016-09-27 13:34:20,603 method:com.test.log4j.TestLog4j.main

(TestLog4j.java:11)
這是error信息

由如上可知,debug.log裏面的信息包括debug、info、error。 #2.Log4j基本使用
Log4j由三部分組成:日誌信息優先級、日誌信息輸出地、日誌信息輸出格式。
日誌信息優先級:debug < info < warn < error < fatal
日誌信息輸出地:指定日誌打印到控制檯仍是目的文件中
日誌信息輸出格式:指定日誌信息內容顯示格式
2.1配置根Logger
基本語法tomcat

log4j.rootLogger=[level],appenderName1,appenderName2,......

用法以下app

#指定日誌級別爲DEBUG,所以級別高於debug的info < warn < error < fatal都會被輸出來
#指定日誌輸出地名稱:stdout、D和E
log4j.rootLogger=DEBUG, stdout, D, E

2.2配置日誌信息輸出目的地appender
語法格式webapp

log4j.appender.appenderName = xxxx
log4j.appender.appenderName.option1 = value1
......
log4j.appender.appenderName.optionN = valueN

用法以下ide

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = F:\\Test\\logs\\debug.log
log4j.appender.D.Append = true

2.3配置日誌信息格式函數

log4j.appender.appenderName.layout = xxxx
log4j.appender.appenderName.layout.option1 = value1
......
log4j.appender.appenderName.layout.optionN = valueN

用法以下

log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

#3.在java工程中中使用log4j
3.1獲取日誌記錄器

private static Logger logger = Logger.getLogger(Class clazz);

經過指定類名來獲取記錄器,類名通常取本類的名字。
3.2讀取配置文件

//使用缺省的log4j環境
BasicConfigurator.configure();
//讀取使用java編寫的配置文件
PropertyConfigurator.configure(String configFilename);
//讀取xml形式的配置文件
DOMConfigurator.configure(String filename);

3.3插入日誌信息
能夠在工程的任何地方使用日誌功能
語法以下

Logger.debug ( Object message ) ;  
Logger.info ( Object message ) ;  
Logger.warn ( Object message ) ;  
Logger.error ( Object message ) ;

#4.web項目中使用log4j
咱們作j2ee應用時,須要使用到log4j,所以必須在啓動服務時加載log4j的配置文件且進行初始化,這個過程能夠在web.xml中進行。
4.1web應用配置log4j
web應用中,通常是:新建一個servlet,在這個servlet的init函數中讀入配置文件。所以須要在web.xml中配置這個servlet,同時設定load-on-startup值爲1。
4.2servlet讀出配置文件
在web.xml中配置context-param參數值。配置文件通常分爲兩種:1>java的properties文件;2>xml文件。
4.3 新建動態web工程
輸入圖片說明
4.4 web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Log4jWebTest</display-name>
	
	<!-- 測試servlet -->
	<servlet>
		<servlet-name>Log4jTestServlet</servlet-name>
		<servlet-class>com.test.log4j.Log4jTestServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Log4jTestServlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
	
	<!-- 啓動log4j -->
	<servlet>
		<servlet-name>Log4jInitServlet</servlet-name>
		<servlet-class>com.test.log4j.Log4jInitServlet</servlet-class>
		<init-param>
			<param-name>log4j-properties-location</param-name>
			<param-value>/WEB-INF/classes/log4j.properties</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
</web-app>

4.5 log4j配置
log4j配置文件仍是沿用上面java工程的log4j配置。
4.6 log4j初始化文件

package com.test.log4j;

import java.io.File;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.PropertyConfigurator;

@WebServlet("/Log4jInitServlet")
public class Log4jInitServlet extends HttpServlet{
	private static final long serialVersionUID = 1L;
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		
		System.out.println("log4j初始化");
		String log4jLocation = config.getInitParameter("log4j-properties-location");
		
		ServletContext sc = config.getServletContext();
		
		if (log4jLocation == null) {
			System.out.println("沒有log4j-properties-location初始化文件,因此使用BasicConfigurator初始化");
			BasicConfigurator.configure();
		}else
		{
			String webAppPath = sc.getRealPath("\\");
			String log4jProp = webAppPath+log4jLocation;
			File file = new File(log4jProp);
			if (file.exists()) {
				System.out.println("使用:"+log4jProp+"初始化日誌信息");
				PropertyConfigurator.configure(log4jProp);
			}else
			{
				System.out.println("----"+log4jProp+"文件沒有找到,使用BasicConfigurator初始化");
				BasicConfigurator.configure();
			}
		}
		super.init(config);
	}
}

4.7Log4jTestServlet測試文件

package com.test.log4j;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

@WebServlet("/Log4JTestServlet")
public class Log4jTestServlet extends HttpServlet{
	
	private static final long serialVersionUID = 1L;
	private static Logger logger = Logger.getLogger(Log4jTestServlet.class);
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		logger.debug("debug信息");
		logger.info("info信息");
		logger.error("error信息");
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		doGet(req, resp);
	}
}

4.8 測試
啓動工程控制檯就會輸出以下信息

log4j初始化
使用:D:\softDown\apache-tomcat-8.0.36\webapps\Log4jWebTest/WEB-INF/classes/log4j.properties初始化日誌信息

在瀏覽器請求

http://192.168.2.67:8080/Log4jWebTest

輸出以下信息

[DEBUG] 2016-09-27 17:53:26,124 method:com.test.log4j.Log4jTestServlet.doGet(Log4jTestServlet.java:22)
debug信息
[INFO ] 2016-09-27 17:53:26,134 method:com.test.log4j.Log4jTestServlet.doGet(Log4jTestServlet.java:23)
info信息
[ERROR] 2016-09-27 17:53:26,134 method:com.test.log4j.Log4jTestServlet.doGet(Log4jTestServlet.java:24)
error信息

查看日誌記錄文件
輸入圖片說明
備註:亂碼另作處理。
#5.spring中使用log4j
1.繼續使用上述web工程,添加spring的jar包。以下
輸入圖片說明
2.web.xml以下

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Log4jWebTest</display-name>
	
	<!-- 測試servlet -->
	<servlet>
		<servlet-name>Log4jTestServlet</servlet-name>
		<servlet-class>com.test.log4j.Log4jTestServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Log4jTestServlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
	
	<!-- spring容器加載 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- 設置spring參數  -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>
	
	<!-- 設置根目錄 -->
	<context-param>
		<param-name>webAppRootKey</param-name>
		<param-value>webapp.root</param-value>
	</context-param>
	
	<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>/WEB-INF/classes/log4j.properties</param-value>
	</context-param>
	
	<!-- 30000表示開一條watchdog線程,每30s掃描下配置文件的變化 -->
	<context-param>
		<param-name>log4jRefreshInterval</param-name>
		<param-value>30000</param-value>
	</context-param>
	
	<listener>
		<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
	</listener>
	
</web-app>

3.applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

</beans>

4.啓動項目
啓動正確信息以下

......
九月 28, 2016 11:20:47 上午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-nio-8080"]
九月 28, 2016 11:20:47 上午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-nio-8009"]
九月 28, 2016 11:20:47 上午 org.apache.catalina.startup.Catalina start
信息: Server startup in 2773 ms

5.測試項目
在瀏覽器輸入:http://localhost:8080/Log4jWebTest/Log4JTestServlet
控制檯會輸出以下信息

[DEBUG] 2016-09-28 11:21:31,908 method:com.test.log4j.Log4jTestServlet.doGet(Log4jTestServlet.java:22)
debug信息
[INFO ] 2016-09-28 11:21:31,908 method:com.test.log4j.Log4jTestServlet.doGet(Log4jTestServlet.java:23)
info信息
[ERROR] 2016-09-28 11:21:31,908 method:com.test.log4j.Log4jTestServlet.doGet(Log4jTestServlet.java:24)
error信息

哦,忘了一點,log4j裏面debug和error信息輸出地修改爲以下

log4j.appender.D.File = ${webapp.root}/WEB-INF/logs/debug.log
log4j.appender.E.File = ${webapp.root}/WEB-INF/logs/error.log

這樣,在tomcat的webapps裏面工程下的web-inf能夠找到輸出的log信息。個人在
D:\softDown\apache-tomcat-8.0.36\webapps\Log4jWebTest\WEB-INF
輸入圖片說明
log目錄下就有兩個文件
輸入圖片說明

相關文章
相關標籤/搜索