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

来源:互联网 发布:网络歌手戴丽丽的经历 编辑:程序博客网 时间:2024/06/17 05:03

自定义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
原创粉丝点击