2010-03-08 11 views

risposta

15

Se si utilizza un framework di registrazione (log4j, commons-logging, ecc.), È possibile modificare/creare un file delle proprietà per indicare una soglia di registrazione elevata. in log4j questo sarà simile:

log4j.logger.org.library=error 

Se la libreria sta usando System.out, che non è una buona biblioteca, in primo luogo. È possibile modificare PrintStream chiamando System.setOut(yourDummyPrintStream) (e System.setErr(..)). Il tuo flusso di stampa fittizio non farebbe altro che inghiottire i dati e non stamparli ovunque.

0

Non penso che nessuna libreria decente/sana usi System.out per registrare i messaggi. Quindi posso tranquillamente supporre che usi una specie di framework di registrazione. Configura che il particolare pacchetto sia a un livello di registrazione più alto come "ERRORE" o "FATALE" in modo che tu non possa vedere quei messaggi.

0

Probabilmente la libreria utilizza un logger, log4j o slf4j. È possibile che sia possibile creare un file di configurazione per quel registratore e quindi impostare il livello di registro su WARN o superiore. Ciò interromperà la stampa delle informazioni.

7

Avete provato a impostare il canale OUT e ERR con System.setOut() e System.setErr()?

4

ho votato fino risposta di Jan e ha voluto aggiungere:

Utilizzando setOut significa che non è possibile stampare a System.out nel vostro programma di più.

Si può fare

PrintStream oldOut=System.out 

prima di salvarlo, quindi chiamare setOut per cambiarlo - poi basta stampare oldOut.

Sono andato così lontano da usare questo come un mini-logger - prendere il System.out, sostituirlo con il mio stream e avere il mio stream prendere una traccia dello stack e capire il metodo di chiamata in modo che possibile aggiungere il nome del metodo prima di inoltrare al System.out originale.

Terribilmente lento, ma buono per il debug. Aveva un'impostazione in modo da poter tornare a stampare semplicemente la stringa, nascondere tutti gli output o filtrare il metodo da cui proveniva il messaggio (che era il mio utilizzo principale, nascondendo tutti gli altri rifiuti in modo da poter vedere il mio output).

2

Considerare l'utilizzo di AspectJ, che può sostituire tutte le occorrenze di System.out.println() con una dichiarazione di propria scelta, un'istruzione di registro propably. Questo funziona anche con i file jar di terze parti (cerca la tessitura a tempo di caricamento).

0

Se il lib utilizza stampe userei asm per sostituire tutte sys.out.printXXx con una chiamata a un'altra classe con simili signatutes metodo che inghiottono ecc

Problemi correlati