spring + struts 等项目当中重构 log4j 输出的办法

今日在项目当中想要重构一下 log4j 的info 方法,发现有一些好的办法,所以进行一些记录。

 

目标:在项目当中有时候需要把一些遗忘掉的重要内容统一输出。但是因为大家在写程序的时候获取日志的方法都是较为简便的写法,如:

private Logger log = Logger.getLogger(OrderServiceImpl.class);  所有想要实现一个类来偷换掉 logger 是不太可能的了。

 

另外,根据网上有些用户的办法 新建一个 org.apache.log4j.Logger 类,然后通过 eclipse 重构,让整个项目关于这个部分的代码全部被修改过来,个人感觉对项目伤害比较大,所以不太赞成使用。继续搜索后发现,其实  log4j.properties 里边的  layout 是可以修改的。只需要自己写一个类,继承与原先的 org.apache.log4j.PatternLayout ,实现里边的

public String format(LoggingEvent event)  方法,基本上就可以进行自定义的输出了。

 

配置文件如下:

#define logfile
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.Encoding=GBK
log4j.appender.logfile.File= ${log.output.directory}/zjgjgxcucc.log
log4j.appender.logfile.DatePattern=.yyyy-MM-dd

#以下修改成自己实现的类
log4j.appender.logfile.layout=com.xxx.LogLayoutTest   

log4j.appender.logfile.layout.ConversionPattern=%d %p [%t] [%c] - <%m>%n


 

代码如下:

/**
	 * 重构 log4j 的日志格式化输出方法,所有的日志当中加入渠道商id。
	 */
	public String format(LoggingEvent event) {
		Object userId = "abcsss";
		String info = super.format(event);
		try{
			String level = event.getLevel().toString();
			String str = "["+level.toUpperCase()+"]";  // [INFO] [DEBUG] 等等
				
			int index = info.indexOf(str);
			String first = info.substring(0, str.length());
			String last = info.substring(index + 6);
			return first + " 登陆用户:"+userId+ last;
			//request.getSession().setAttribute("sessionMessage", "im'sessionMessage!");  
			//request.getSession().getAttribute("sessionMessage");
		}catch (Exception e) {
			//e.printStackTrace();
		}
		
		return info;
	}



 

同时,引用以下网上的资源,还可以将log4j 当中的某些内容,输出成  HTML 方式。即继承 HTMLLayout  类。原文地址:

http://onlyonetoone.iteye.com/blog/1563658

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值