我正在尝试在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,但有时我只想重新启动它,尤其是在调试时。所以我想理解:
谢谢!
答案 0 :(得分:3)
public static void configure()
使用PatternLayout.TTCC_CONVERSION_PATTERN添加使用PatternLayout的ConsoleAppender,并将System.out打印到根类别。
因此,每次初始化applet时都要添加一个新的appender。请先尝试拨打resetConfiguration()
。