使用log4j时,java applet中的重复行

时间:2011-04-30 16:19:22

标签: java applet log4j

我正在尝试在applet中使用log4j,但每次我在浏览器中刷新页面(重新启动applet)时,我都会在java控制台中获得重复的输出行。每次刷新后,输出重复的次数会增加。

此代码重现了效果:

public class HelloWorldApplet extends JApplet {
    static Logger logger = Logger.getLogger(HelloWorldApplet.class);
    public void init() {
        BasicConfigurator.configure();
        logger.info("Hello log4j");
        System.out.println("Hello System.out");
    }
}

这是我看到的输出:

0 [thread applet-HelloWorldApplet.class-26] INFO HelloWorldApplet  - Hello log4j
Hello System.out
<refresh>
1987 [thread applet-HelloWorldApplet.class-27] INFO HelloWorldApplet  - Hello log4j
1987 [thread applet-HelloWorldApplet.class-27] INFO HelloWorldApplet  - Hello log4j
Hello System.out
<again>
3156 [thread applet-HelloWorldApplet.class-28] INFO HelloWorldApplet  - Hello log4j
3156 [thread applet-HelloWorldApplet.class-28] INFO HelloWorldApplet  - Hello log4j
3156 [thread applet-HelloWorldApplet.class-28] INFO HelloWorldApplet  - Hello log4j
Hello System.out

清除类加载器缓存会修复它,我知道我需要清除类加载器缓存以实际重新加载applet,但有时我只想重新启动它,尤其是在调试时。所以我想理解:

  1. 为什么会这样?
  2. 有没有办法阻止它?
  3. 谢谢!

1 个答案:

答案 0 :(得分:3)

来自BasicConfigurator:

的javadoc
  

public static void configure()

     

使用PatternLayout.TTCC_CONVERSION_PATTERN添加使用PatternLayout的ConsoleAppender,并将System.out打印到根类别。

因此,每次初始化applet时都要添加一个新的appender。请先尝试拨打resetConfiguration()