<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

	<!-- org.apache.log4j.ConsoleAppender (输出到控制台) -->
	<!-- org.apache.log4j.FileAppender (输出到文件) -->
	<!-- org.apache.log4j.DailyRollingFileAppender (每天输出产生一个日志文件) -->
	<!-- org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件)， 可通过 log4j.appender.R.MaxFileSize=100KB 
		设置文件大小， 还可通过 log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件。 -->
	<!-- org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方) -->

	<!--输出通道"STDOUT"，输出所有信息到控制台 (也就是System.out.println()) -->
	<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
		<!-- 输出自定义内容的LOG -->
		<layout class="org.apache.log4j.PatternLayout">
			<!-- 输出时Log内容的具体定义 -->
			<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%c] %-5p %m%n" />
		</layout>
	</appender>

	<!--输出通道"DEBUG"，输出方式是：只输出DEBUG级别的LOG，并文件大小到达指定大小时产 生新的Log文件 -->
	<appender name="DEBUG" class="org.apache.log4j.RollingFileAppender">
		<!-- 输出Log文件的路径和文件名 -->
		<param name="File" value="${app.root}/logs/app_debug.log" />

		<!-- TOMCAT等WEB服务器重新启动时，是否插入到原有的LOG文件里，true 插入false 新 建 -->
		<param name="Append" value="true" />
		<param name="Encoding" value="UTF-8"/>
		<!-- 只输出定义的级别以上的LOG,因为在下面过滤LOG信息所以屏蔽 -->
		<!-- param name="Threshold" value="info"/ -->

		<!-- 因选择了RollingFileAppender了才有下面两个 MaxFileSize，MaxBackupIndex 选项 -->
		<!-- MaxFileSize是一个LOG文件的最大的文件大小，当LOG文件超过这个值时，自动转成 *.log.1的LOG文件 -->
		<param name="MaxFileSize" value="5000KB" />

		<!-- MaxBackupIndex生成自动转成 *.log.1的LOG文件的个数，设置3时最多生成3个LOG 备份文件，它们是[*.log.1][*.log.2][*.log.3] -->
		<param name="MaxBackupIndex" value="3" />

		<!-- 输出时Log内容的具体定义 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}] %-5p %m%n" />
		</layout>

		<!-- 过滤输出时Log内容，在这里，LevelMin，LevelMax都定义了DEBUG， 所以只输出DEBUG 级别LOG的数据 -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="DEBUG" />
			<param name="LevelMax" value="DEBUG" />
		</filter>
	</appender>

	<!-- 输出通道"INFO"，输出方式是：只输出INFO级别的LOG，并文件大小到达指定大小时产生 新的Log文件 -->
	<appender name="INFO" class="org.apache.log4j.RollingFileAppender">
		<param name="File" value="${app.root}/logs/app_info.log" />
		<param name="Append" value="true" />
		<param name="Encoding" value="UTF-8"/>
		<param name="MaxFileSize" value="5000KB" />
		<param name="MaxBackupIndex" value="3" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}] %-5p %m%n" />
		</layout>
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="INFO" />
			<param name="LevelMax" value="INFO" />
		</filter>
	</appender>

	<!-- 输出通道"WARN"，输出方式是：只输出WARN级别的LOG，并文件大小到达指定大小时产 生新的Log文件 -->
	<appender name="WARN" class="org.apache.log4j.RollingFileAppender">
		<param name="File" value="${app.root}/logs/app_warn.log" />
		<param name="Append" value="true" />
		<param name="Encoding" value="UTF-8"/>
		<param name="MaxFileSize" value="5000KB" />
		<param name="MaxBackupIndex" value="3" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}] %-5p %m%n" />
		</layout>
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="WARN" />
			<param name="LevelMax" value="WARN" />
		</filter>
	</appender>

	<!-- 输出通道"ERROR"，输出方式是：只输出ERROR级别的LOG，并文件大小到达指定大小时 产生新的Log文件 -->
	<appender name="ERROR" class="org.apache.log4j.RollingFileAppender">
		<param name="File" value="${app.root}/logs/app_error.log" />
		<param name="Append" value="true" />
		<param name="Encoding" value="UTF-8"/>
		<param name="MaxFileSize" value="5000KB" />
		<param name="MaxBackupIndex" value="3" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}] %-5p %m%n" />
		</layout>
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="ERROR" />
			<param name="LevelMax" value="ERROR" />
		</filter>
	</appender>

	<!-- 输出通道"FATAL"，输出方式是：只输出INFO级别的LOG，并文件大小到达指定大小时产生 新的Log文件 -->
	<appender name="FATAL" class="org.apache.log4j.RollingFileAppender">
		<param name="File" value="${app.root}/logs/app_fatal.log" />
		<param name="Append" value="true" />
		<param name="Encoding" value="UTF-8"/>
		<param name="MaxFileSize" value="5000KB" />
		<param name="MaxBackupIndex" value="3" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}] %-5p %m%n" />
		</layout>
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="FATAL" />
			<param name="LevelMax" value="FATAL" />
		</filter>
	</appender>

	<!-- 输出通道"EVERYDAY"，输出方式是：输出所有级别的LOG，并每天一个日志文件 -->
	<appender name="EVERYDAY" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="${app.root}/logs/app_everyday/everyday.log" />
		<param name="Append" value="true" />
		<param name="Encoding" value="UTF-8"/>
		<!-- 以日为单位输出LOG文件，每日输出一个LOG文件 -->
		<param name="DatePattern" value="'.'yyyy-MM-dd" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}] %-5p %m%n" />
		</layout>
		<!-- 过滤输出时Log内容，在这里，LevelMin是DEBUG，LevelMax都FATAL， 所以输出DEBUG 级别到FATAL级别的LOG数据 -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="ERROR" />
			<param name="LevelMax" value="FATAL" />
		</filter>
	</appender>
	<root>
		<!-- 设置输出范围，默认只输出ERROR以上的，ERROR级别， FATAL级别的LOG -->
		<priority value="ERROR" />
		<!-- 上边设置的输出通道，使用的在这里定义 -->
		<appender-ref ref="STDOUT" />
		<appender-ref ref="DEBUG" />
		<appender-ref ref="INFO" />
		<appender-ref ref="WARN" />
		<appender-ref ref="ERROR" />
		<appender-ref ref="FATAL" />
		<appender-ref ref="EVERYDAY" />
	</root>
</log4j:configuration>
