logback系列之七:继承RollingFileAppender,保存自定义文件名的日志

原创 2016年08月29日 10:08:38
继承类:
package com.hk3t.air.system.log;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.rolling.RollingFileAppender;

import com.hk3t.air.utils.MyConstants;

/**
 * @author Sunny 
 *
 * 2016-8-23
 */
public class UserFileAppender extends RollingFileAppender<ILoggingEvent> {
	
	private String currentlyActiveFile;
	
	@Override
	protected void subAppend(ILoggingEvent event){
		
		if(currentlyActiveFile == null){
			currentlyActiveFile = getFile();
		}
		
		String activeFile = currentlyActiveFile;
		if(event.getMdc() != null){
			if(event.getMdc().get(MyConstants.LOG_USER_KEY) != null && event.getMdc().get(MyConstants.LOG_FILEPATH_KEY) != null){
				activeFile = event.getMdc().get(MyConstants.LOG_FILEPATH_KEY);
			}else{
				if(event.getMdc().get(MyConstants.LOG_USER_KEY) != null){
					activeFile = activeFile.replace("{LOG_USER}", event.getMdc().get(MyConstants.LOG_USER_KEY));
				}
				if(event.getMdc().get(MyConstants.LOG_IP_KEY) != null){
					activeFile = activeFile.replace("{LOG_IP}", event.getMdc().get(MyConstants.LOG_IP_KEY));
				}
			}
		}
		
		setFile(activeFile);
		start();
		super.subAppend(event);
	}
}

XML配置

	<appender name="USERFILE"  class="com.hk3t.system.log.UserFileAppender">
	
	    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>INFO</level>
	    </filter>
	    
            <filter class="com.hk3t.system.log.UserNameFilter"></filter>
		
            <file>${log.base}/user/user_{LOG_USER}_{LOG_IP}.log</file> 
        
        <!-- 
        	无法归档user.log日志,只有当session和ip都相同时(即文件名相同)。才会进行回滚的操作 
	        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
	            <FileNamePattern>${log.base}/%d{yyyy-MM-dd}_user_log.log</FileNamePattern>
	            <minIndex>1</minIndex> 
	            <MaxHistory>2</MaxHistory> 
	        </rollingPolicy>
        -->  
        <encoder>
            <pattern>%date [%contextName] [%marker] [%thread] [%X{LOG_IP}] [%X{LOG_USER}] %-5level %logger{80} - %msg%n</pattern>  
        </encoder>
        <append>true</append>  
    	<prudent>false</prudent>    
    </appender>


版权声明:看完觉得好的。请留个脚印,证明你来过 举报

相关文章推荐

Logback常用配置详解

logback是一套日志框架,由log4j的优化版,由同一个作者开发,在速度和性能上都超过其他日志框架,再结合slf4j,已成为当前最流行的日志框架。Logback最常用就是在classpath定义一...

logback高级特性使用(二)

本文转自:点击打开链接 自定义Pattern模板 创建自定义格式转换符有两步: 1.写一个转换器类,继承ClassicConvert 示例代码: [java] vi...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

logback 常用配置详解(二) <appender>

logback 常用配置详解(二)    : 是的子节点,是负责写日志的组件。 有两个必要属性name和class。name指定appender名称,class指定ap...

logback logback.xml常用配置详解(二)<appender>

转载自:http://aub.iteye.com/blog/1103685 详细整理了logback常用配置, 不是官网手册的翻译版,而是使用总结,旨在更快更透彻的理解其配置 logback ...

logback高级特性使用(三)

本文转自:点击打开链接 异步记录日志 注意:该功能需要高版本才能支持,如1.0.11。 AsyncAppender,异步记录日志。 工作原理: 当Logging Eve...

Redis学习笔记(六)redis实现分布式锁

分布式锁介绍 注:本文讲的是分布式互斥锁 在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成,还有一些分布式任务调度等等。大部分的解决方案是基于DB实现的,Redis...

redis学习笔记(一)redis3.2.5集群安装与测试

redis3.2.5集群安装,以及简单测试。 具体实现原理后续再讲

Logback 配置文件例子

%d %-5level %logger{80} - %msg %n true --> \${user.home}/logs/hk_retail_out.log \${user.home}/lo...

如何加载指定路径的Logback.xml

如何加载指定路径的Logback.xml今天想外置logback.xml,谢了如下代码 File logbackFile = new File("./conf/logback.xml"); ...

使用logback输出日志,自定义输出格式

在开发中比较常见的还是log4j,基本上每个开发者都知道,但是使用logback输出日志,估计用的人不多,其实这两个都是slf4j的实现,而且是同一个作者。 Log4j是Apache的一个开源项目...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)