2

每个服务都有一个log4j appender,还有一种方法来执行加载这些附加程序。附加程序正在按预期进行处理。

在重新加载相同的附加程序之前是否有必要卸载任何/所有附加程序?如果是这样,我该如何卸载这些附加程序,BasicConfigurator.unConfigure

我的示例 Appender 加载器(注意:UserNameserviceName通过 a 加载servlet filter):

protected void configLogger(String serviceName, Integer serviceCode) {
    MyConfig config = (MyConfig) getServletContext().getAttribute(CONFIG);
    String path = "/" + System.getProperty("jboss.server.home.dir")
            + "/log/services/" + serviceName + ".log";

    PatternLayout pl = new PatternLayout(
            "%-5p   |   %d{yyyyMMdd HH:mm:ss,SSS}   |   %X{userName}    |   %X{serviceCode} |   %L  |   %m  |   %n");

    DailyRollingFileAppender fileAppender = null;
    org.apache.log4j.Level level = org.apache.log4j.Level.INFO;

    if (config.isTesting()){
        level = org.apache.log4j.Level.DEBUG;
    }

    try {
        fileAppender = new DailyRollingFileAppender(pl, path, "//.yyyyMMdd");
        fileAppender.addFilter(new MyLoggerFilter(serviceName, level));
        fileAppender.setAppend(true);

        BasicConfigurator.configure(fileAppender);


    } catch (IOException e) {
        e.printStackTrace();
    }
}

我的 log4j 类过滤器:

    public class MyLoggerFilter extends Filter {
        String serviceCode = "";
    Level level;

    public FielcoLoggerFilter(String serviceCode, Level level) {
        super();
        this.serviceCode = serviceCode;
        this.level = level;
    }

    @Override
    public int decide(LoggingEvent loggingEvent) {
        org.apache.log4j.Level level = loggingEvent.getLevel();
        if (level.isGreaterOrEqual(this.level)
                && serviceCode.equals(loggingEvent.getMDC("serviceCode"))) {
            // System.out.println("decide" +
            // loggingEvent.getMDC("serviceCode"));
            return 1;
        }
        return -1;
    }

}
4

0 回答 0