log4j的使用与配置

log4j的应用与配置
在java编程领域,log4j已经是事实上的日志输出工具。不但功能强大,配置还非常简单。
一、基础知识
1、5种输出目的地(appender)
(1)控制台:
org.apache.log4j.ConsoleAppender

(2)文件
org.apache.log4j.FileAppender

(3)滚动文件
org.apache.log4j.RollingFileAppender

(4)每日滚动文件
org.apache.log4j.DailyRollingFileAppender

(5)书写器(暂时这么翻译,即以流格式发送到任意指定的地方)
org.apache.log4j.WriterAppender


2、7种优先级(priority)
从高到低分别是:
off fatal error warn info debug all

3、8种输出模式(PatternLayout)参数
%c:输出所属类的全名,可加上参数配置为 %c{Num},num是整数值,表示输出类的全名的后几个单词。
%d:输出时间,可加上参数配置为%d{yyyy-MM-dd HH:mm:ss SSS}
%l:日志的位置信息,包括类名,线程名,代码行数等
%t:产生该日志的线程名
%r:输出从启动到该日志的所耗费的毫秒数
%p:输出优先级名称,如debug,info等
%m:代码指定的信息。如logger.info("xxxx")
%n:换行符。通常配置在最后面。

二、实例
1、开发环境为ssh.通过xml来配置
2、ssh环境下的依赖包
引用
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.2.jar
log4j-1.2.15.jar

3、代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<!-- Appenders -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
		</layout>
	</appender>
	<appender name="file" class="org.apache.log4j.RollingFileAppender">       
        <param name="File" value="D:/myapp.log" />     
        <param name="Append" value="true" />    
        <param name="MaxBackupIndex" value="10" />    
        <layout class="org.apache.log4j.PatternLayout">    
            <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />    
        </layout>    
    </appender>
    <appender name="dailyFile" class="org.apache.log4j.DailyRollingFileAppender">    
        <param name="File" value="D:/myapp.log" />      
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />      
        <layout class="org.apache.log4j.PatternLayout">    
         <param name="ConversionPattern" value="[%d{MMdd HH:mm:ss}] %p : %c{3\} - %m%n" />    
        </layout>      
    </appender>
	
	<!-- Application Loggers -->
	<logger name="com.harmony.cap.auth">
		<level value="debug" />
	</logger>
	
	<logger name="com.harmony.common">
		<level value="debug" />
	</logger>
	
	<!-- 3rdparty Loggers -->
	<logger name="org.springframework.core">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.beans">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.context">
		<level value="info" />
	</logger>

	<logger name="org.springframework.web">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.security">
		<level value="debug" />
	</logger>

	<!-- Root Logger -->
	<root>
		<priority value="warn" />
		<appender-ref ref="console" />
		<!-- <appender-ref ref="file" /> -->
		<appender-ref ref="dailyFile" />
	</root>
	
</log4j:configuration>



三、小结
1、支持属性文件和xml文件两种配置方式,个人更倾向于xml
2、日志的加载在ssh环境中,只需将配置文件放到类路径下即可,一般不需要额外的配置
3、<root>元素只能放置在配置文件的最后
4、可以同时配置多个目的地(appender),但是要配置到<root>元素中才会生效。