现在业务系统运行也有日志输出,读的是log4j.properties,配置如下:
#-------------------------------
log4j.rootCategory=DEBUG, stdout
#每天输出一个日志
log4j.appender.stdout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern=%d - %m%n
#%-d{yyyy-MM-dd HH:mm:ss,SSS}
%d 输出日志时间点的日期或时间
#%m 输出代码中指定的消息
#%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
#%r 输出自应用启动到输出该log信息耗费的毫秒数
#%c 输出所属的类目,通常就是所在类的全名
#%t 输出产生该日志事件的线程名
#%n 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-ddHH:mm:ss} - %p - %m%n
#输出文件的名字
log4j.appender.stdout.File=E:\\tomcatLog\\test.log
#日志优先级别由低到高 DEBUG INFO WARN ERROR FATAL
log4j.appender.stdout.Threshold=DEBUG
#---------------------------
描述:系统所有输出日志都写到文件E:\\tomcatLog\\test.log,不能更具日志debug,info,warn,error和fatal级别分别输出到不同的文件。
在网上查询log4j.xml,然后修改相关配置,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM"log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!--debug日志输出配置-->
<appender name="debug"
class="org.apache.log4j.DailyRollingFileAppender">
<paramname="File" value="D:/data/programe/cgt/log/debug.txt"/>
<paramname="Append" value="true" />
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern" value="%d [%t] %p - %m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="LevelMax" value="DEBUG"/><!--过滤只输出DEBUG级别日志-->
<paramname="LevelMin" value="DEBUG" />
</filter>
</appender>
<!--infor日志输出配置-->
<appender name="info"
class="org.apache.log4j.DailyRollingFileAppender">
<paramname="File" value="D:/data/programe/cgt/log/info.txt"/>
<paramname="Append" value="true" />
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern" value="%d [%t] %p - %m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="LevelMax" value="INFO" />
<paramname="LevelMin" value="INFO" />
</filter>
</appender>
<!--warn日志输出配置-->
<appender name="warn"
class="org.apache.log4j.DailyRollingFileAppender">
<paramname="File" value="D:/data/programe/cgt/log/warn.txt"/>
<paramname="Append" value="true" />
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern" value="%d [%t] %p - %m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="LevelMax" value="WARN" />
<paramname="LevelMin" value="WARN" />
</filter>
</appender>
<!--error日志输出配置-->
<appender name="error"
class="org.apache.log4j.DailyRollingFileAppender">
<paramname="File" value="D:/data/programe/cgt/log/error.txt"/>
<paramname="Append" value="true" />
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern" value="%d [%t] %p - %m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="LevelMax" value="ERROR" />
<paramname="LevelMin" value="ERROR" />
</filter>
</appender>
<!--fatal日志输出配置-->
<appender name="fatal"
class="org.apache.log4j.DailyRollingFileAppender">
<paramname="File" value="D:/data/programe/cgt/log/fatal.txt"/>
<paramname="Append" value="true" />
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern" value="%d [%t] %p - %m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="LevelMax" value="FATAL" />
<paramname="LevelMin" value="FATAL" />
</filter>
</appender>
<root>
<priorityvalue="debug"/><!--日志输出最低级别-->
<appender-refref="debug"/><!--debug日志输出-->
<appender-refref="info"/><!--info日志输出-->
<appender-refref="warn"/><!--warn日志输出-->
<appender-refref="error"/><!--error日志输出-->
<appender-refref="fatal"/><!--fatal日志输出-->
</root>
</log4j:configuration>
这样就可以把系统不同级别的输出到不同的文件了。
一点想法【个人观点】:
log4j.properties:使用这个配置,所有输出都输出到一个文件中,这样在系统调试过程比较合适,这样可以跟踪业务流程;
log4j.xml:使用这个配置不同级别的日志输出到不同的文件夹,比较适合于系统正式上线运行阶段,这个可以很快的定位到错误所在,但要求必须熟悉系统流程,看到异常日志时能知道问题是出到哪一块了。
如果把log4j.xml和log4j.properties都放到classes文件加下,系统会自动先去查找log4j.xml配置文件,如果log4j.xml存在,那么系统日志将按照log4j.xml配置输出;不过log4j.xml不存在,则查找log4j.properties文件。