【发布时间】:2023-03-10 11:50:01
【问题描述】:
我想生成带有多个日志文件的记录器。
这是我的 cdi 产品类:
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
import java.io.IOException;
import java.util.logging.*;
@ApplicationScoped
public class LoggerProducer {
@Produces
private Logger logger(InjectionPoint ip) throws IOException {
return generalLogger(ip);
}
@Produces
@Log(Log.LogType.GENERAL)
private Logger generalLogger(InjectionPoint ip) throws IOException {
LogManager.getLogManager().reset();
Handler handler = new FileHandler(Log.LogType.GENERAL.getValue(), 200000, 5, true);
handler.setLevel(Level.ALL);
handler.setFormatter(new LogFormat());
Logger logger = Logger.getGlobal();
logger.setLevel(Level.ALL);
logger.addHandler(handler);
return logger;
}
@Produces
@Log(Log.LogType.SIGNAL)
private Logger signalLogger(InjectionPoint ip) throws IOException {
LogManager.getLogManager().reset();
Handler handler = new FileHandler(Log.LogType.SIGNAL.getValue(), 200000, 5, true);
handler.setLevel(Level.ALL);
handler.setFormatter(new LogFormat());
Logger logger = Logger.getGlobal();
logger.setLevel(Level.ALL);
logger.addHandler(handler);
return logger;
}
@Produces
@Log(Log.LogType.ACTIVATION_KEY)
private Logger activationKeyLogger(InjectionPoint ip) throws IOException {
LogManager.getLogManager().reset();
Handler handler = new FileHandler(Log.LogType.ACTIVATION_KEY.getValue(), 200000, 5, true);
handler.setLevel(Level.ALL);
handler.setFormatter(new LogFormat());
Logger logger = Logger.getGlobal();
logger.setLevel(Level.ALL);
logger.addHandler(handler);
return logger;
}
}
这是我的注释:
@Retention(RUNTIME)
@Target({FIELD, METHOD})
@Qualifier
public @interface Log {
LogType value() default LogType.GENERAL;
public enum LogType {
GENERAL("logs/general.log"),
SIGNAL("logs/signal.log"),
ACTIVATION_KEY("logs/activation_key.log");
private String value;
LogType(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
}
我的问题是日志总是写在最后一个被注释的文件中。
例如:
第一个带注释的记录器:@Log(Log.LogType.GENERAL)
当记录器将日志写入带有注释的文件时:@Log(Log.LogType.SIGNAL)
现在GENERAL 日志也写入SIGNAL 文件。
有什么办法可以解决这个问题吗?
注意:日志引擎是java.util.logging.Logger
注意:带有 OpenLiberty 应用服务器的 JavaEE 8
【问题讨论】: