我是靠谱客的博主 奋斗台灯,最近开发中收集的这篇文章主要介绍关于在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)
这里写图片描述

效果:
这里写图片描述

最后

以上就是奋斗台灯为你收集整理的关于在nginx负载均衡下,项目共用log4j配置导致的日志混乱问题的全部内容,希望文章能够帮你解决关于在nginx负载均衡下,项目共用log4j配置导致的日志混乱问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部