1. 程式人生 > >log4j.xml實現每天建立一個log檔案

log4j.xml實現每天建立一個log檔案

1、log4j.xml放在工程 WEB-INF下

<?xml version="1.0" encoding="gbk" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration debug="false"
						xmlns:log4j="http://jakarta.apache.org/log4j/">
	
	<!-- 輸出到控制檯 -->
	<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-4r [%t] %-5p %c %x - %m%n"/>
		</layout>
		<!-- 
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="FATAL" />
			<param name="LevelMax" value="FATAL" />
			 -->
		</filter>
	</appender>
	

	<!-- 配置程式除錯時的日誌輸出,輸出到檔案,並且檔案按天存放 -->
	<appender name="DEBUG"
		class="com.zlz.utils.DatedFileAppender">
		<param name="Encoding" value="UTF-8" />
		<!-- 除錯日誌檔案存放在log/debug目錄下 -->
		<param name="File" value="${root}/WEB-INF/log/%yyyy/%mm/%dd/debug.log" />
		<!-- 重啟後追加到舊檔案 -->
		<param name="Append" value="true" />
		<!-- 按天分割檔案 -->
		<!--  param name="DatePattern" value=".yyyy-MM-dd" /-->
		<!-- 配置日誌格式 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%c %d -- %p -- %m%n" />
		</layout>
		<!-- 配置過濾器,此檔案只輸出DEBUG資訊 -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="DEBUG" />
			<param name="LevelMax" value="DEBUG" />
		</filter>
	</appender>

	<!-- 配置程式執行時的日誌輸出,輸出到檔案,並且檔案按天存放 -->
	<appender name="INFO"
		class="com.zlz.utils.DatedFileAppender">
		<param name="Encoding" value="UTF-8" />
		<!-- 事件日誌檔案存放在log/info目錄下 -->
		<param name="File" value="${root}/WEB-INF/log/%yyyy/%mm/%dd/info.log" />
		<!-- 重啟後追加到舊檔案 -->
		<param name="Append" value="true" />
		<!-- 按天分割檔案 -->
		<!--  param name="DatePattern" value=".yyyy-MM-dd" /-->
		<!-- 配置日誌格式 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%c %d -- %p -- %m%n" />
		</layout>
		<!-- 配置過濾器,此檔案只輸出INFO資訊 -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="INFO" />
			<param name="LevelMax" value="INFO" />
		</filter>
	</appender>
	
	<!-- 配置程式執行時的日誌輸出,輸出到檔案,並且檔案按天存放 -->
	<appender name="WARN"
		class="com.zlz.utils.DatedFileAppender">
		<param name="Encoding" value="UTF-8" />
		<!-- 事件日誌檔案存放在log/info目錄下 -->
		<param name="File" value="${root}/WEB-INF/log/%yyyy/%mm/%dd/warn.log" />
		<!-- 重啟後追加到舊檔案 -->
		<param name="Append" value="true" />
		<!-- 按天分割檔案 -->
		<!--  param name="DatePattern" value=".yyyy-MM-dd" /-->
		<!-- 配置日誌格式 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%c %d -- %p -- %m%n" />
		</layout>
		<!-- 配置過濾器,此檔案只輸出INFO資訊 -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="WARN" />
			<param name="LevelMax" value="WARN" />
		</filter>
	</appender>

	<!-- 配置出現重量級的異常時的日誌輸出,輸出到檔案,並且檔案按天存放 -->
	<appender name="ERROR"
		class="com.zlz.utils.DatedFileAppender">
		<param name="Encoding" value="UTF-8" />
		<!-- 錯誤日誌檔案存放在log/error目錄下 -->
		<param name="File" value="${root}/WEB-INF/log/%yyyy/%mm/%dd/error.log" />
		<!-- 重啟後追加到舊檔案 -->
		<param name="Append" value="true" />
		<!-- 按天分割檔案 -->
		<!--  param name="DatePattern" value=".yyyy-MM-dd" /-->
		<!-- 配置日誌格式 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{yyyy-MM-dd hh:mm:ss}:%p %c:%L - %m%n" />
		</layout>
		<!-- 配置過濾器,此檔案只輸出錯誤資訊 -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="ERROR" />
			<param name="LevelMax" value="ERROR" />
		</filter>
	</appender>
	
	<!-- 配置出現災難性的異常時的日誌輸出,輸出到檔案,並且檔案按天存放 -->
	<appender name="FATAL"
		class="com.zlz.utils.DatedFileAppender">
		<param name="Encoding" value="UTF-8" />
		<!-- 錯誤日誌檔案存放在log/fatal目錄下 -->
		<param name="File" value="${root}/WEB-INF/log/%yyyy/%mm/%dd/fatal.log" />
		<!-- 重啟後追加到舊檔案 -->
		<param name="Append" value="true" />
		<!-- 按天分割檔案 -->
		<!--  param name="DatePattern" value=".yyyy-MM-dd" /-->
		<!-- 配置日誌格式 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%c %d -- %p -- %m%n" />
		</layout>
		<!-- 配置過濾器,此檔案只輸出災難資訊 -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="FATAL" />
			<param name="LevelMax" value="FATAL" />
		</filter>
	</appender>
	<!-- 配置程式執行時的日誌輸出,輸出到檔案,並且檔案按天存放 -->
	<appender name="TRACE"
		class="com.zlz.utils.DatedFileAppender">
		<param name="Encoding" value="UTF-8" />
		<!-- 事件日誌檔案存放在log/info目錄下 -->
		<param name="File" value="${root}/WEB-INF/log/%yyyy/%mm/%dd/trace.log" />
		<!-- 重啟後追加到舊檔案 -->
		<param name="Append" value="true" />
		<!-- 按天分割檔案 -->
		<!--  param name="DatePattern" value=".yyyy-MM-dd" /-->
		<!-- 配置日誌格式 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%c %d [%t] %p -- %m%n" />
		</layout>
		<!-- 配置過濾器,此檔案只輸出INFO資訊 -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="TRACE" />
			<param name="LevelMax" value="TRACE" />
		</filter>
	</appender>
	
	
	<root><!-- 設定接收所有輸出的通道 -->
		<level value ="INFO"/>  
		<!-- 對應上面的appender -->
		<appender-ref ref="STDOUT"/>
		<appender-ref ref="DEBUG"/>
		<appender-ref ref="ERROR"/>
		<appender-ref ref="INFO"/>
		<appender-ref ref="WARN"/>
		<appender-ref ref="FATAL"/>
	</root>
	
	
</log4j:configuration>
2、在web.xml中配置log4j
	<!-- log4j配置 -->
	<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>/WEB-INF/log4j.xml</param-value>
	</context-param>
    <context-param>  
            <param-name>webAppRootKey</param-name>  
            <param-value>root</param-value>  
    </context-param>    
    <listener>  
            <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
    </listener>  
    <listener>  
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>  
	<!-- log4j配置 -->

3、自定義的fileAppender
package com.zlz.utils;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.log4j.FileAppender;
import org.apache.log4j.Logger;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.spi.LoggingEvent;

public class DatedFileAppender extends FileAppender {

	private final static Logger logger = Logger.getLogger(DatedFileAppender.class);

	private long nextCheck = 0L;

	private String originFilename = null;

	private String getDatedFilename() 
	{

		String str = this.originFilename;
		SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
		String time14 = format.format(new Date());
		str = str.replaceAll("%yyyy", time14.substring(0, 4));
		str = str.replaceAll("%yy", time14.substring(0, 4));
		str = str.replaceAll("%mm", time14.substring(4, 6));
		str = str.replaceAll("%dd", time14.substring(6, 8));
		str = str.replaceAll("%hh", time14.substring(8, 10));

		String curPath = str;
		try 
		{
			newFolder(str);
		}
		catch (Exception ex) {
			logger.error("log4j檔案路徑建立失敗:" + ex);
		}

		return curPath;
	}

	void switchFilename() throws IOException {
		String datedFilename = getDatedFilename();

		if (datedFilename.equals(this.fileName)) {
			return;
		}

		try {
			setFile(datedFilename, getAppend(), getBufferedIO(), getBufferSize());
		}
		catch (IOException ex) {

			this.errorHandler.error("setFile(" + datedFilename + ", false) call failed.");
		}
		this.fileName = datedFilename;
	}

	public void setFile(String file) {

		this.originFilename = file;

		super.setFile(getDatedFilename());
	}

	protected void subAppend(LoggingEvent event) {
		long n = System.currentTimeMillis();
		if (n >= this.nextCheck) {
			this.nextCheck = (n + 30000L);
			try {
				switchFilename();
			}
			catch (IOException ioe) {
				LogLog.error("switchFilename() failed.", ioe);
			}
		}
		super.subAppend(event);
	}

	private void newFolder(String folderPath) {
		String filePath = folderPath.toString();
		java.io.File myFilePath = new java.io.File(filePath);
		try {
			if (!myFilePath.isDirectory()) {
				myFilePath.getParentFile().mkdirs();
			}
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
}
(1). 輸出方式appender一般有5種: 

org.apache.log4j.RollingFileAppender(滾動檔案,自動記錄最新日誌) 
org.apache.log4j.ConsoleAppender (控制檯) 
org.apache.log4j.FileAppender (檔案) 
org.apache.log4j.DailyRollingFileAppender (每天產生一個日誌檔案) 
org.apache.log4j.WriterAppender (將日誌資訊以流格式傳送到任意指定的地方) 



(2). 日記記錄的優先順序priority,優先順序由高到低分為 
OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。 
Log4j建議只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG這五個級別。 


(3). 格式說明layout中的引數都以%開始,後面不同的引數代表不同的格式化資訊(引數按字母表順序列出): 
%c 輸出所屬類的全名,可在修改為 %d{Num} ,Num類名輸出的維(如:"org.apache.elathen.ClassName",%C{2}將輸出elathen.ClassName) 
%d 輸出日誌時間其格式為 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss} 
%l 輸出日誌事件發生位置,包括類目名、發生執行緒,在程式碼中的行數 
%n 換行符 
%m 輸出程式碼指定資訊,如info(“message”),輸出message 
%p 輸出優先順序,即 FATAL ,ERROR 等 
%r 輸出從啟動到顯示該log資訊所耗費的毫秒數 
%t 輸出產生該日誌事件的執行緒名

相關推薦

log4j.xml實現每天建立一個log檔案

1、log4j.xml放在工程 WEB-INF下 <?xml version="1.0" encoding="gbk" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:

log4j配置:每天輸出一個日誌檔案(分級別)

#建議只適應四個級別,從低到高 DEBUG INFO WARN ERROR log4j.rootLogger = INFO,console,infofile,errorfile #warnfile log4j.addivity.org.apache = tru

python每天一個log檔案 TimedRotatingFileHandler

import logging.handlers log_file = 'test.log' time_handler = logging.handlers.TimedRotatingFileHandler(log_file, when='D', interval=1, backupCou

log4j配置每天生成一個日誌檔案

本文僅記錄tomcat下配置成功的記錄,不作log4j配置的詳細使用解釋。 該配置在tomcat的logs資料夾下每天產生新的日誌檔案(DEBUG級別:log.log)(ERROR級別:error.log),然後將前一天的日誌檔案log.log和error.log的名稱

在VSCode中,建立一個.vue檔案的模板

具體步驟 1、使用Ctrl + Shift + P召喚出控制檯,然後輸入snippets並回車。 2、接下來輸入vue並選擇,VSCode會自動生成一個vue.json的檔案。這裡就是我們要輸入模板的地方了。 { /* // Place your snippets for Vue

log4j.xml中如何只輸出log.debug

背景:最近和其他專案聯調,需要證明我方傳送的資訊是正確的,需要打印出debug日誌。但是預設的debug列印的 帶了很多的jar包的資訊,還有很多的sql,這些目前是用不到了,所以可以的話,在聯調的時候遮蔽掉。 原理:因為jar等的資訊多餘,所以,對此類資訊進行篩選,使

log4j.xml 中配置多個輸出檔案

現在的專案中,對於日誌的配置,我們有時候需要配置對應不同的輸出日誌檔案,例如按照模組劃分,按照功能劃分,分別輸出到不同的日誌檔案中,下面介紹一下,怎麼配置不同的輸出日誌檔案。 下面是一整塊的log4j.xml配置。如果對怎麼配置spring 和 log4j不瞭解的話,可以參

logback日誌的使用,每天生成一個日誌檔案,以及error和其他級別日誌的分離

springboot會自動幫我們讀取logback的配置檔案,我們實現只需要新增即可在application中配置日誌檔案的位置logging: config: classpath:conf/logback-dev.xml配置檔案的內容如下:<?xml versio

Python web入門:Django學習與實踐二(簡單頁面實現建立一個模板)

一、第一個頁面實現(“hello world”) 實現步驟:         1.在views.py檔案中建立一個處理函式(引數名可以隨意,但是最好使用request,看起來清楚明瞭)                 def   index(request):       

C++ COM實現之一 建立一個DLL

COM是一種介面技術,它提供了一種方法用於客戶程式進行呼叫。COM原理和技術的文章已經很多了,就不過多講解了,這裡只注重實現。下面分幾步對程序內COM元件進行編碼實現以達到對實現一個COM的清晰的認識,目的是通過COM介面方法呼叫DLL中的函式。 首先,建立一個標準的win3

linux系統磁碟分割槽以及建立一個swap檔案增加虛擬記憶體

一般常用的分割槽命令是fdisk  /磁碟  不過它只能用於硬碟<2T的。分割槽:主分割槽+邏輯分割槽構成 >=2T的要用到parted。一個linux系統最多隻能建立4個主分割槽 先分割

centos中如何建立一個txt檔案

centos中如何建立一個txt檔案 聽語音 原創 | 瀏覽:5533 | 更新:2018-11-01

利用配置檔案,在工廠中建立一個實現類物件

package cn.itcast.usermng.dao; import java.io.InputStream; import java.util.Properties; /**  * 通過配置檔案得到dao實現類的名稱!  * 通過類名稱,完成建立類物件!(反射完成

判斷本地系統目錄下是否存在XML檔案,如果不存在就建立一個XMl檔案,若存在就在裡面執行新增資料

這是我為專案中寫的一個測試的例子, 假如,您需要這樣一個xml檔案, <?xml version="1.0" encoding="utf-8"?> <A> <a> <id>001</id> <name>le

如何在Android Studio中建立一個selector.xml檔案

方法一:在drawable目錄上點選右鍵,彈出選單中有Drawable resource file選項,對話方塊裡填寫檔名稱和檔案型別 。 第一步:   第二步: OK!搞定

html5實現表單內的上傳檔案框,建立一個可存取到該file的url。

<span style="font-size:18px;"><!DOCTYPE html> <html> <head> <title>HTML5上傳圖片預覽</title> <meta http-

logback/log4j實現log檔案一開始自帶日期[log4j預設需要觸發才會帶日期後續]

背景:我們本來是通過記錄行為到log,然後第二天下載log來處理,通過log的時間後續來判斷是否需要下載。後來發現我們下載前到0點沒有log的更新,那麼前一天的log是不會加時間後續,導致不會下載處理,結果記錄漏了資料。所以想找自帶時間戳的方式。 1.Logback lo

一個log4j.properties配置(每天一個日誌檔案

log4j.rootCategory=WARN,stdout, hd log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j

建立一個順序佇列,實現佇列的入隊和出隊操作。

標頭檔案: #ifndef seqqueue_H #define seqqueue_H const int queuesize=10; class seqqueue { int rear,front; int data[queuesize]; public: seqqueue(){front