log4j.xml实现每天创建一个log文件

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





	
	
	
		
			
		
		
		
	
	

	
	
		
		
		
		
		
		
		
		
		
			
		
		
		
			
			
		
	

	
	
		
		
		
		
		
		
		
		
		
			
		
		
		
			
			
		
	
	
	
	
		
		
		
		
		
		
		
		
		
			
		
		
		
			
			
		
	

	
	
		
		
		
		
		
		
		
		
		
			
		
		
		
			
			
		
	
	
	
	
		
		
		
		
		
		
		
		
		
			
		
		
		
			
			
		
	
	
	
		
		
		
		
		
		
		
		
		
			
		
		
		
			
			
		
	
	
	
	
		  
		
		
		
		
		
		
		
	
	
	
2、在web.xml中配置log4j

	
	
		log4jConfigLocation
		/WEB-INF/log4j.xml
	
      
            webAppRootKey  
            root  
        
      
            org.springframework.web.util.Log4jConfigListener  
      
      
            org.springframework.web.context.ContextLoaderListener  
      
	

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 输出产生该日志事件的线程名

你可能感兴趣的:(javaee)