2010-10-01 13 views
5

Sto scrivendo un'applicazione composta da diversi moduli Maven. Tutti devono registrare le informazioni nei propri file di registro. Ho creato un file log4j.properties nella cartella principale/risorse di ciascun modulo. Ora quando avvio l'applicazione da uno dei moduli, scrive tutto nel file di registro di quel modulo. Mi chiedevo se questo fosse solo perché avrebbe potuto prendere la directory di root da quel modulo di avvio e usarlo per salvare i file di log, ma quando creo un appender solo per quel modulo di avvio (usando la categoria nelle proprietà log4j) e no rootLogger mi dà un errore sulle classi negli altri moduli che non riescono a trovare i loro appendici, il che indica che i file log4j.properties in ognuno di questi moduli non sono stati trovati o letti. Qualche idea su come risolvere questo problema e fare in modo che quei moduli usino quei file di proprietà, oppure devo mettere tutte le appendici in un unico grande file log4j.properties, facendo sì che tutti i log vengano visualizzati nella cartella principale di quel modulo di avvio invece di le cartelle radice di quegli altri moduli?Proprietà Log4j da ciascun modulo

Spero che la domanda sia abbastanza chiara da capire, altrimenti non esitate a chiedere dettagli.

+1

Puoi fornire ulteriori informazioni sulla tua app; ad esempio è un'app web? È distribuito su un app server? – Qwerky

+0

Questa app verrà eseguita ogni settimana per aggiornare un database che contiene dati sulle proteine. Prima controlla se ci sono nuovi dati in molti altri database, quindi se c'è, legge quei dati, fa qualche calcolo con esso (inviandolo a uno speciale webservice che esegue il calcolo) recupera i dati da quel webservice e poi lo inserisce nel mio database di proteine. Uno dei moduli è un modulo di ibernazione che dialoga con il mio database. Il problema che sto avendo è che tipo ibernato registra tutto ciò che fa.Voglio separare questi registri dai log degli altri moduli. – FinalArt2005

risposta

0

Per quanto ne so, solo i log4j.properties del modulo invocato vengono letti e inizializzati per impostazione predefinita.

Se si desidera richiamare i moduli separati da un singolo modulo di avvio, è necessario aggiungere tutti gli appendici a un singolo file log4j.properties che si trova nella directory start-module/src/main/resources. Se e quando vorresti, questa è probabilmente una domanda di architettura.

Solo un suggerimento: Passa alla registrazione basata su XML ora se desideri controlli di registrazione più avanzati ora o in futuro.

0

Se si includono log4j.properties separati in src/main/resources di ciascun modulo separato e si caricano i file jar generati in un singolo programma di caricamento classi, verrà caricata solo una risorsa poiché log4j carica i file delle proprietà dal classloader (le tue risorse si sovrappongono nel nome del file).

Non includerei i file log4j.configuration in qualsiasi dei file jar. Per due motivi:

  • Non funzionerà nel tuo caso.

  • Per configurare log4j (modifica della verbosità dei logger), dovrei aprire il file jar e modificare il file delle proprietà.

Una diversa soluzione potrebbe essere fanno altro modulo produrre un ombreggiato (http://maven.apache.org/plugins/maven-shade-plugin/) file jar dai moduli resto, compreso un singolo log4j.properties in src/main/risorse. Quindi, se hai un altro modulo che consuma i tuoi progetti precedenti come dipendenze, potresti includere solo una dipendenza da quella ombreggiata.

Tuttavia, questa è una soluzione che non utilizzerei.

Spero che questo aiuti.

Problemi correlati