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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值