关于在nginx负载均衡下,项目共用log4j配置导致的日志混乱问题

自定义Log4j Appender

在开发-运维时遇到一个这样的问题:
用nginx负载均衡代理了几个项目,每个项目用的log4j的配置文件是一样的。本以为不会有影响,但是在之后运维时,发现打印出来日志不仅漏而且还把时间错位了。然后以为自己写错了什么,网上一搜,找到下面这位博主的文章。
nginx中使用log4j的漏日志问题

上面的博主提供了一种解决方案。这里我写一个自己的~~
1.自定义一个Appender继承DailyRollingFileAppender
2.增加两个属性 filePath 和 logFileName
3.重写activateOptions方法,在方法里面将DailyRollingFileAppender 的fileName 赋值为新路径

package cn.sxk.utils;

import java.io.File;
import java.io.IOException;
import java.util.Properties;

import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.Layout;


public class DailyRollingCatalogAppender extends DailyRollingFileAppender{
	
	private String filePath;
	private String logFileName;
	private static Properties props = System.getProperties();
	private static String difference;
	
	static{
		if("Windows 7".equals(props.getProperty("os.name").toString())){
			String[] temp = props.getProperty("user.dir").split("\\\\");
			difference = temp[temp.length-2];
		}else{
			String[] temp = props.getProperty("user.dir").split("/");
			difference = temp[temp.length-2];
		}
	}
	
	public DailyRollingCatalogAppender() {
	}
	
	public DailyRollingCatalogAppender(Layout layout, String filePath,String logFileName,
			   String datePattern) throws IOException {
		super(layout, filePath + "/"+  difference + "/" +logFileName, datePattern);
		this.filePath = filePath;
		this.logFileName = logFileName;
	}
	
	@Override
	public void activateOptions() {
		File target  = new File(filePath + "/"+  difference);
	    if(!target.exists()) {
	    	target.mkdirs();
	    }
	    super.fileName=filePath + "/"+  difference + "/" +logFileName;
		super.activateOptions();
	}
	

	public String getFilePath() {
		return filePath;
	}

	public void setFilePath(String filePath) {
		this.filePath = filePath;
	}

	public String getLogFileName() {
		return logFileName;
	}

	public void setLogFileName(String logFileName) {
		this.logFileName = logFileName;
	}
}

注:静态块那边内容可以随意修改,但是这是我唯一能想到能动态修改目录的手段了,如果你有更好的方案,还请在评论下不吝赐教。
使用条件:你必须先移动相应的tomcat的bin目录启动tomcat,因为这个静态块获取的是当前的工作目录。


下面是配置文件
1.配置自定义 Appender
2.配置filePath 和 logFileName
3.其他按照DailyRollingFileAppender配置(除了fileName)
这里写图片描述

效果:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值