Java EE:实现日志记录时的奇怪行为

时间:2010-09-15 22:22:28

标签: java logging java-ee

我使用java.util.logging,并将日志放在应用程序托管bean中,因为我认为整个应用程序应该只有一个记录器。

@ManagedBean(name="logging")  
@ApplicationScoped
public class Logging {

    private static Logger logger = Logger.getLogger(Logger.class.getName());
    private static FileHandler fh = null;

    public Logging() {
        try{
            fh = new FileHandler("DMBackingBean");
        }catch(IOException ignore){}
        logger.addHandler(fh);
        logger.setLevel(Level.ALL);
    }

    public Logger getLogger(){
        return logger;
    }
}

这是我遇到的奇怪行为。当我第一次运行程序时,我在AAA内记录DMBackingBean。然后我重新部署应用程序(新会话),现在我看到另一个日志文件已创建,DMBackingBean.1内容为AAA。现在包含DMBackingBean AAA
AAA

两个问题:将日志记录放在应用程序作用域bean中是否标准?有没有办法让所有日志都附加到一个文件中,而不是每次重新部署(新会话)时都会创建一个新的日志文件?

2 个答案:

答案 0 :(得分:2)

  

将日志记录放在应用程序作用域bean中是否标准?

IMO,更典型的是创建记录器层次结构,以便您可以以细粒度的方式激活和控制记录(例如,配置com.acme.Foo以记录ERROR级别,同时配置{{1}的记录在DEBUG级别。)

  

有没有办法让所有日志都附加到一个文件中,而不是每次重新部署(新会话)时都会创建一个新的日志文件?

看起来你需要创建一个追加文件处理程序:

com.acme.bar.BAR

参考

答案 1 :(得分:0)

取消部署bean时,需要撤消日志记录。否则,每次重新部署时都会添加一个新的。