2013-07-18 19 views
6

Due progetti: il prodotto (progetto-A) e il progetto auto benchmark per A (progetto-B).Il file di build chiamato utilizzando l'attività <ant> reimposta le configurazioni di registrazione del chiamante

Nel file di configurazione di B, abbiamo bisogno di chiamare file di generazione di A per eseguire la compilazione e bundle-con-app-server di processo come questo:

<ant antfile="${build-file-A}" inheritall="false" target="all" /> 

E, nel progetto B, abbiamo un sacco di Attività ant che emettono messaggi utilizzando java.util.logging (il framework di registrazione JDK).

Il problema è, dopo quella riga, tutte le uscite del logger jdk scompaiono.

con il debug, trovo che, durante l'initialzation di file di configurazione di progetto di A, una cosa staticly definito nel progetto A verrà eseguito LogManager.readConfiguration(InputStream), che carica un file di configurazione che contiene solo la configurazione del logger di una singola classe.

E durante il readConfiguration, verrà chiamato il numero LogManager.reset(); durante il reset, ciascun gestore di ciascun programma di registrazione verrà rimosso. Poiché <ant> caricherà il file di build di destinazione nello stesso processo del chiamante, tutti i gestori verranno rimossi.

Quindi, ad eccezione di quello configurato, ogni altra classe che utilizza il logger jdk non può emettere messaggi a causa della mancanza di gestore di output.

La mia domanda è:

non v'è alcun modo per risolvere questo problema, diverso:

  1. uso <exec> per eseguire file di costruire il progetto di A;
  2. scrivere un'attività per eseguire readConfiguration() per ripristinare le impostazioni di registrazione JDK predefinite dal file di configurazione predefinito dopo la chiamata <ant>.
  3. Utilizzare il framework di registrazione della formica (Task.log(), ecc.).

Si noti che non è possibile modificare il progetto A per evitare il problema.

+0

Cosa intendi per "sparire" esattamente? – fge

+0

@fge L'output del logger jdk non viene visualizzato nella console: l'attività viene eseguita correttamente, ma non viene prodotto alcun output. Come ho detto, ConsoleHandler del root logger viene rimosso quando 'readConfiguration (InputStream)', che formatta ed emette il messaggio di logging. – coolcfan

+0

Le attività Ant che stanno facendo uso della registrazione JDK o delle destinazioni che sono state definite eseguono programmi Java che registrano? – Phani

risposta

1

Potrebbe essere possibile creare sottoclasse di LogManager e sovrascrivere reset ei due metodi readConfiguration per installare i gestori necessari. Quindi utilizzare la proprietà di sistema java.util.logging.config.class per installare il codice personalizzato su statup.