2

log4j appenderサービスごとに1つと、これらのアペンダーのロードを実行するための1つのメソッドがあります。アペンダーは期待どおりに処理されています。

同じアペンダーを再ロードする前に、一部またはすべてのアペンダーをアンロードする必要がありますか?もしそうなら、どうすればこれらのアペンダーをアンロードできBasicConfigurator.unConfigureますか?

私のサンプルAppenderLoader(注:UserNameおよびserviceNameはを介してロードされます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