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;
}
}