3 Stimmen

doppelte Zeilen im Java-Applet bei Verwendung von log4j

Ich versuche, log4j in einem Applet zu verwenden, aber jedes Mal, wenn ich die Seite im Browser aktualisiere (um das Applet neu zu starten), erhalte ich doppelte Zeilen der Ausgabe in der Java-Konsole. Die Anzahl der duplizierten Ausgaben erhöht sich nach jeder Aktualisierung.

Dieser Code reproduziert den Effekt:

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

Und das ist die Ausgabe, die ich sehe:

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

Das Löschen des Classloader-Caches behebt das Problem, und ich weiß, dass ich den Classloader-Cache löschen muss, um ein Applet tatsächlich neu zu laden, aber manchmal möchte ich es einfach neu starten, vor allem beim Debuggen. Ich würde also gerne verstehen:

  1. Warum ist das so?
  2. Gibt es eine Möglichkeit, dies zu verhindern?

Gracias.

3voto

Mike Baranczak Punkte 8043

Aus den Javadocs für BasicConfigurator:

public static void configure()

Fügen Sie einen ConsoleAppender hinzu, der PatternLayout unter Verwendung von PatternLayout.TTCC_CONVERSION_PATTERN verwendet und in der Kategorie Root nach System.out druckt.

Sie fügen also jedes Mal, wenn das Applet initialisiert wird, einen neuen Appender hinzu. Versuchen Sie den Aufruf von resetConfiguration() Erstens.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X