Log4j配置详解

   一、xml文件的配置,首先给出一个最简配置的log4j.xml

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" 
"http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd" >
<log4j:configuration> 
    
    <!-- 控制台输出日志信息 -->
    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n"/>
        </layout>
    </appender>    
    
    <!-- 每天产生一个日志文件 -->
    <appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="D:/main.log"/>  
        <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->  
        <param name="append" value="true"/>          
        <param name="encoding" value="UTF-8"/>  
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n"/>
        </layout>        
    </appender>
    <!--通过邮件发送 -->
    <appender name="EMAIL_QQ" class="org.apache.log4j.net.SMTPAppender">  
        <param name="Threshold" value="INFO"/>  
        <param name="BufferSize" value="128" />  
        <param name="SMTPHost" value="smtp.qq.com" />          
        <param name="From" value="[email protected]" />  
        <param name="To" value="[email protected]" />  
        <param name="Subject" value="测试邮件发送" />  
        <param name="SMTPUsername" value="41335*****" />  
        <param name="SMTPPassword" value="*********" /> 
        <param name="LocationInfo" value="true" />  
        <param name="SMTPDebug" value="true" />  
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n"/>
        </layout>    
    </appender>  

    <!--定义logger输出器-->
    <logger name="file" additivity="true">
        <level value="INFO"/>
        <appender-ref ref="fileAppender"/>
    </logger>

    <!--定义根日志输出类-->   
    <root>
        <!-- 控制日志输出级别 -->
        <priority value="INFO"/>        
        <appender-ref ref="consoleAppender"/>
    </root>
    
</log4j:configuration>

  二、log4.properties属性文件的配置方式:

log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=%m%n
log4j.appender.fileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern=%m%n
log4j.rootLogger=DEBUG, consoleAppender
log4j.logger.test=DEBUG, fileAppender

 (A)先来分析一下上面的配置文件:

 logger标签设置一个logger输出器,additivity=true则表示这个logger输出的日志也会再root中输出

  root元素定义根日志输出器一个logger可以向多个appender输出,一个appender可以被多个logger共同使用。

 (B)简单的测试程序(注意添加log4j-1.2.17.jar到工程中):

package com.tliu.case2;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
public class Log4jTest {
    public static void main(String[] args) {        
        DOMConfigurator.configure("log4j.xml");        
        //PropertyConfigurator.configure("log4j.properties");
        Logger root = Logger.getRootLogger();        
        Logger file = Logger.getLogger("file");        
        root.info("root logger");
        file.info("file logger");
    }
}

 三、Appender配置日志输出的目的地:

org.apache.log4j.RollingFileAppender(滚动文件,自动记录最新日志)
org.apache.log4j.ConsoleAppender (控制台)
org.apache.log4j.FileAppender (文件)
org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
org.apache.log4j.net.SMTPAppender(邮件发送)

 四、日志的输出级别,优先级由高到低有FATAL ,ERROR ,WARN ,INFO ,DEBUG五个级别  

 五、ConversionPattern布局参数说明:
 5.1示例:
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MMM-dd HH:mm:ss,SSS}-[TS] %p %t %c - %m%n 

  输出:2014-08-12 10:45:30,000-[TS] INFO thread30 TestClass - 日志内容

 5.2参数说明:

 %c:输出类的全名c{n} n表示显示的包路径层数如%c显示com.login.test则%c{1}显示test而%c{2显示login.test  
 %C:(C大写)输出日志所属类目的调用者的全类名
 %L:只输出在代码中的行数     
 %d:输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
 %l:输出日志事件发生位置,包括类目名、发生线程,在代码中的行数 相当于%C%M(%F:%L)
 %n:换行符
 %m:输出代码指定信息,如info(“message”),输出message
 %p:输出优先级,即 FATAL ,ERROR 等
 %r:输出从启动到显示该log信息所耗费的毫秒数
 %t:输出产生该日志事件的线程名 

 %F 输出日志消息产生时所在的文件名称。性能不好,不建议使用
 %M 输出日志消息产生时所在的方法名称。性能不好,不建议使用
 %x 输出和当前线程相关联的NDC(nested diagnostic context)环境,用于多客户多线程的应用中
 %X 输出和当前线程相关联的MDC(mapped diagnostic context)环境

 5.3一些输出格式说明:
 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
 %20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
 %-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,”-”号指定左对齐。
 %.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话 也不会有空格。
%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边将多出的字符截掉。

 六、Web项目配置log4j,将以下内容到WEB-INF/web.xml 

<context-param>
   <param-name>webAppRootKey</param-name>
   <param-value>web.root</param-value>
</context-param>
<context-param>
   <param-name>log4jConfigLocation</param-name>
   <param-value>classpath:log4j.xml</param-value>
</context-param>
<context-param>
   <param-name>log4jRefreshInterval</param-name>
   <param-value>60000</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

  则${web.root}是web工程相对路径。

你可能感兴趣的:(log4j,Log4j配置,log4j.xml配置)