2016-08-22 1 views
0

Dies ist vielleicht eine alte Frage, aber es hat nicht für mich funktioniert.Deaktivieren Sie system.out.println Protokolle von bestimmten Java-Paket in catalina.out

Ich habe eine API, die system.out.println enthält. Wie es vom Verkäufer ist, kann ich das nicht kommentieren. Also habe ich versucht, dieses spezielle Java-Paket zu deaktivieren. Unten ist der Code, den ich ausprobiert habe.

log4j.logger.com.backend.LogManager.class = OFF 

legte ich den obigen Code in Myapp/WEB-INF/classes/log4j.properties. Ich habe es auch in Myapp/WEB_INF/und Myapp/WEB-INF/lib/versucht, aber es hat nicht funktioniert. Ich sehe immer noch die API system.out.println loggt sich in catalina.out-Datei.

Auch mein lib-Verzeichnis enthält log4j-1.2.14.jar und commons-logging-1.1.1.jar.

Bitte lassen Sie mich wissen, wie dies zu verhindern ist, da es Produktionsumgebung ist, verursacht dies auf Speicherplatz.

Vielen Dank im Voraus!

+0

Ich verstehe nicht die Beziehung zwischen 'log4j.logger.com.backend.LogManager' und' System.out'. – davidxxx

+0

Okay, also, wie system.out Protokolle in catalina.out zu deaktivieren? – user6744971

Antwort

0

Warum überschreiben Sie PrintStream von System.out nicht?

Ich mache ein Beispiel, um zu zeigen, dass Sie es aktivieren und deaktivieren können, wenn Sie das Original PrintStream speichern.

Wenn Sie auch mehr Zeit gewinnen möchten, können Sie die println() - Methode, die von Ihrem API-Anbieter verwendet wird, überschreiben.

package sysout; 

import java.io.IOException; 
import java.io.OutputStream; 
import java.io.PrintStream; 

public class DisableSysout { 

    private static PrintStream outOriginal; 

    public static void main(String[] args) { 
     outOriginal = System.out; 
     doSysout(); 
     disableSysout(); 
     doSysout(); 
    } 

    private static void doSysout() { 
     long start = System.currentTimeMillis(); 
     for (int i=0;i<=500000;i++){ 
      System.out.println("Mess " + i);  
      System.out.println(i); 
     } 
     long end = System.currentTimeMillis(); 

     enableSysout(); 
     System.out.println("time="+ (end-start)); 
    } 


    private static void enableSysout() { 
     System.setOut(outOriginal); 
    } 

    private static void disableSysout() { 

     System.setOut(new PrintStream(new OutputStream() { 

     @Override 
     public void write(int b) throws IOException { 
     } 

     })); 
    } 
} 
+0

Wie gesagt, es ist eine Vendor API. Dies sollte nicht geändert werden. Ich bin auf der Suche nach einer Konfiguration, so dass ich die system.out Logs von bestimmten Java-Paket deaktivieren kann – user6744971

+0

Sie müssen es nicht ändern. 'System.out' wird von allen geladenen Klassen vom JVM-Prozess gemeinsam genutzt. Außerdem ist es nicht möglich, die Aufrufklasse eines 'System.out' zu kennen. Deshalb schlage ich vor, dass Sie den 'sysout' wieder deaktivieren und aktivieren. – davidxxx

+0

Ich habe die aufrufende Klasse herausgefunden, indem ich die API entpackt habe, damit ich die Klasse und ihr Paket sehen kann. – user6744971

Verwandte Themen