2016-08-22 2 views
0

Это может быть старый вопрос, но это не сработало для меня.Отключить журналы system.out.println из Специфического пакета Java в catalina.out

У меня есть API, который содержит system.out.println. Как от поставщика я не могу этого прокомментировать. Итак, я попытался отключить этот конкретный пакет java. Ниже приведен код, который я пробовал.

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

Я разместил вышеуказанный код в Myapp/WEB-INF/classes/log4j.properties. Я также пробовал в Myapp/WEB_INF/и Myapp/WEB-INF/lib /, но это не сработало. Я все еще вижу журналы API system.out.println в файле catalina.out.

Также каталог My lib содержит log4j-1.2.14.jar и commons-logging-1.1.1.jar.

Пожалуйста, дайте мне знать, как предотвратить это, так как это производственная среда, что вызывает проблемы на диске.

Заранее благодарен!

+0

Я не понимаю отношения между 'log4j.logger.com.backend.LogManager' и' System.out'. – davidxxx

+0

Итак, как отключить журнал system.out в catalina.out? – user6744971

ответ

0

Почему бы вам не переоценить PrintStream от System.out?

Я делаю пример, чтобы показать, что вы можете включить его и отключить, если вы храните оригинал PrintStream.

Если вы также хотите получить больше времени, вы можете переопределить весь метод println(), используемый вашим поставщиком API.

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

Как я уже сказал, это API-интерфейс поставщика. Это не должно меняться. Я ищу конфигурацию, поэтому я могу отключить журналы system.out из определенного пакета java. – user6744971

+0

Вам не нужно его менять. 'System.out' разделяется всеми загруженными классами процессом JVM. Кроме того, невозможно узнать вызывающий класс 'System.out'. Вот почему я предлагаю вам отключить и снова включить 'sysout'. – davidxxx

+0

Я вычислил вызывающий класс, распакуя API, поэтому я вижу класс и его пакет. – user6744971