log4j.xml 配置

PatternLayout自定义格式代码

package com.morlia.management.common.config;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.helpers.PatternParser;
/**
 * 继承日志打印类,调用复写的日志打印格式类
 */
public class Log4jExPatternLayout extends PatternLayout
{
    public Log4jExPatternLayout()
    {
        super();
    }
    /**
     * 重写createPatternParser方法,返回PatternParser的子类
     */
    @Override protected PatternParser createPatternParser(String pattern)
    {
        return new Log4jExPatternParser(pattern);
    }
}
package com.morlia.management.common.config;
import com.morlia.management.common.utils.DateUtil;
import org.apache.log4j.helpers.FormattingInfo;
import org.apache.log4j.helpers.PatternConverter;
import org.apache.log4j.helpers.PatternParser;
import org.apache.log4j.spi.LoggingEvent;
/**
 * 复写日志打印格式类,增加线程号打印
 */
public class Log4jExPatternParser extends PatternParser
{
    /**
     * 表示线程
     */
    private static final char T = 'T';
    
    /**
     * 表示占位符
     */
    private static final char D = 'D';
    
    public Log4jExPatternParser(String pattern)
    {
        super(pattern);
    }
    /**
     * 重写finalizeConverter,对特定的占位符进行处理,T表示线程ID占位符
     */
    @Override protected void finalizeConverter(char c)
    {
        if (c == T)
        {
            this.addConverter(new ExPatternConverter(this.formattingInfo));
        }
        else if (c == D)
        {
            this.addConverter(new TimePatternConverter(this.formattingInfo));
        }
        else
        {
            super.finalizeConverter(c);
        }
    }
    /**
     * 打印线程号功能
     */
    private static class ExPatternConverter extends PatternConverter
    {
        public ExPatternConverter(FormattingInfo fi)
        {
            super(fi);
        }

        /**
         * 当需要显示线程ID的时候,返回当前调用线程的ID
         */
        @Override protected String convert(LoggingEvent event)
        {
            return String.valueOf(Thread.currentThread().getId());
        }
    }
    /**
     * 打印时间功能(时间格式:yyyyMMddHHmmss)
     */
    private static class TimePatternConverter extends PatternConverter
    {
        public TimePatternConverter(FormattingInfo fi)
        {
            super(fi);
        }
        /**
         * 当需要显示线程ID的时候,返回当前调用线程的ID
         */
        @Override protected String convert(LoggingEvent event)
        {
            return DateUtil.getUTCTimeStr2();
        }
    }
}

log4j.xml 样例

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

	<!-- 可以配置多个appender来对应不同的输出,如文件输出,sql输出,控制台输出,邮件输出等 -->
	<!-- [控制台STDOUT] 不同的输出类型对应着不同的calss,如控制台输出class对应着 org.apache.log4j.ConsoleAppender -->
	<!--name提供给logger或者root调用 -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender"> 
		<!--保存字符集 -->  
		<param name="encoding" value="UTF-8" />
		<!--输出到控制台 -->   
		<param name="target" value="System.out" /> 
		<!--loyout表示输出方式,可以多种,class值区分,PatternLayout表示自定义格式 --> 
		<layout class="com.morlia.management.common.config.Log4jExPatternLayout">
			<!-- [method: %l] %l 表示当前的方法,它前面必须要加一个空格,否则不能定位到代码位置;
			%m 表示日志打印的内容; %n 表示换行 -->  
		    <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method: %l]%n%m%n%n" />  
		    <!--输出格式,后面解释 -->
			<!-- <param name="ConversionPattern" value="%D %T[from: %-40.40c{3} type: %-5p content: %m]%n" /> -->    
		</layout>
		<!-- filter过滤器设置输出的级别:
		ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF 
		所有下面输出的是debug到warn不会有error和fatal -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="levelMin" value="debug" />
			<param name="levelMax" value="error" />
			<!--答案:http://bbs.csdn.net/topics/350195913 -->
			<param name="AcceptOnMatch" value="true" /> 
		</filter>
	</appender>

	<!--系统相关相关日志 -->
	<appender name="system" class="org.apache.log4j.DailyRollingFileAppender">
		<!-- ${webapp.root}项目根路径,自动获得,不用配置,可自己在web.xml中配置 -->
		<param name="File" value="${management.root}../../logs/managementlogs/management-system.log" />
		<!-- 是否项目重启继续保存之前日志 -->  
		<param name="Append" value="true" />  
		<param name="encoding" value="UTF-8" />
		<!-- 记录所有类型日志,记录它和比它等级高的日志all<debug -->
		<param name="threshold" value="all" /> 
		<!-- 日期格式 例子:common-default.log.2015-09-17.log -->
		<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />  
		<layout class="com.morlia.management.common.config.Log4jExPatternLayout">  <!-- 输出方式 -->
		    <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" />
			<!-- <param name="ConversionPattern" value="%D %T[from: %-40.40c{3} type: %-5p content: %m]%n" /> -->
		</layout>
	</appender>
	
	<!--游戏配置相关日志 -->
    <appender name="config" class="org.apache.log4j.DailyRollingFileAppender">
     	<!-- ${webapp.root}项目根路径,自动获得,不用配置,可自己在web.xml中配置 -->
        <param name="File" value="${management.root}../../logs/managementlogs/management-config.log" /> 
        <!-- 是否项目重启继续保存之前日志 --> 
        <param name="Append" value="true" />  
        <param name="encoding" value="UTF-8" />
        <!-- 记录所有类型日志,记录它和比它等级高的日志all<debug -->
        <param name="threshold" value="all" /> 
        <!-- 日期格式 例子:common-default.log.2015-09-17.log -->
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />  
        <layout class="com.morlia.management.common.config.Log4jExPatternLayout">  <!-- 输出方式 -->
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" />
            <!-- <param name="ConversionPattern" value="%D %T[from: %-40.40c{3} type: %-5p content: %m]%n" /> -->
        </layout>
    </appender>
    <!--
              注意:
     1:当additivity="false"时,root中的配置就失灵了,不遵循缺省的继承机制
     2:logger中的name非常重要,它代表记录器的包的形式,有一定的包含关系,试验表明
        2-1:当定义的logger的name同名时,只有最后的那一个才能正确的打印日志
        2-2:当对应的logger含有包含关系时,比如:name=test.log4j.test8 和 name=test.log4j.test8.UseLog4j,则2-1的情况是一样的
        2-3:logger的name表示所有的包含在此名的所有记录器都遵循同样的配置,name的值中的包含关系是指记录器的名称哟!注意啦!
     3:logger中定义的level和appender中的filter定义的level的区间取交集
     4:如果appender中的filter定义的 levelMin > levelMax ,则打印不出日志信息
     -->
	<!-- Root Logger -->
	
	<!--指定logger的设置,additivity指示是否遵循缺省的继承机制 -->
    <logger name="org.springframework.scheduling" additivity="false">
        <level value ="INFO"/>
        <appender-ref ref="console"/>
        <appender-ref ref="db"/>
    </logger>
    
    <!--指定logger的设置,additivity指示是否遵循缺省的继承机制 -->
    <logger name="com.morlia.management.service.configservice" additivity="false">
        <level value ="INFO"/>
        <appender-ref ref="console"/>
        <appender-ref ref="config"/>
    </logger>
    
	<!-- 所有logger的父类,记录所有的日志。 -->
	<root>
	 	<!-- 限定记录等级 ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF -->
		<level value="INFO"></level> 
		<!-- 调用记录方式 -->
		<appender-ref ref="system" />
		<appender-ref ref="console" />
	</root>

</log4j:configuration>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值