2014-09-05 11 views
7

Ho un po 'di problemi nel loggare su un file usando log4j in tempesta.Come scrivere registri su un file usando Log4j e Storm Framework?

Prima di presentare la mia topologia, vale a dire nel mio metodo principale per cui ho scritto alcune dichiarazioni di registro e configurato il logger tramite:

PropertyConfigurator.configure(myLog4jProperties) 
  • Ora, quando eseguo il mio topologia usando il mio eseguibile jar in Eclipse - i suoi file funzionanti e di registro vengono creati come supposto.
    O
    Quando eseguo il mio jar eseguibile con "java-jar MyJarFile someOtherOptions", posso vedere log4j in fase di configurazione ei file vengono formato correttamente e la registrazione viene effettuata su entrambi i file e le console (come definito nel mio log4j .properties)

  • mA quando ho eseguito lo stesso vaso utilizzando "jar tempesta MyJarFile MyMainClass someOtherOptions" non è in grado di creare e accedere in una delle file, tranne su console.

sto parlando i log che sto Printing PRIMA presentazione mia topologia.

Esiste un modo per registrare le mie istruzioni in un file durante l'utilizzo di tempesta? Sono non associato a org.apache.log4j.

+0

Si sta utilizzando un cluster locale come exec jar? Quando usi "storm jar ..." stai usando la modalità cluster. Quindi hai controllato il file storm.log.properties sul tuo storm install/log4j nel tuo server? Quando si invia una topologia in modalità cluster, storm è già in esecuzione e si scrivono i registri, forse non è possibile sovrascrivere log4j in fase di runtime, pertanto la modifica del file log4j storm prima dovrebbe funzionare in tutti i casi. – zenbeni

+0

@zenbeni In realtà sto girando in local_mode. Non riesco a trovare alcuna proprietà relativa a log4j nella directory di installazione di tempesta. Sto usando l'incubazione di apache-storm-0.9.2. – holmes840

risposta

4

Il framework storm utilizza la propria registrazione. Molto probabilmente i registri finiranno nella directory dei registri in cui è installata la tempesta ({Storm DIR}/logs). È possibile trovare le proprietà del registro temporale in {Storm DIR} /logback/cluster.xml. Utilizza logback non log4j

+0

Questo file definisce le proprietà dei file in apache-storm-incubating-0.9.2.jar. Certo che posso cambiare le proprietà per quello. Ma voglio cambiare le proprietà di registrazione per MyJarFile.jar. cluster.xml non influenzerà la sua registrazione. Inoltre, sono in grado di definire le proprietà per i registri che vengono stampati dopo aver inviato la mia topologia, cioè sui nodi supervisore. Non riesco a ottenere i registri (che sono presenti in MyJarFile.jar) per stampare in un file PRIMA di inviare la mia topologia. – holmes840

+0

Come posso usare log4j su jar slf4j? – Mani

4

Raccomanderei l'utilizzo di SLF4J per la registrazione in caso di tempesta. Probabilmente potresti far funzionare LOG4J ma avrai un setup aggiuntivo da fare su ogni nodo nel cluster. Dal momento che la tempesta fa già questo per te, non capisco il punto.

Nel progetto, includono queste dipendenze Maven (slf4j-semplici per il test di unità!):

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.5</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-simple</artifactId> 
    <version>1.7.5</version> 
    <scope>test</scope> 
</dependency> 

Poi, dentro le topologie/beccucci/bulloni basta avere il Logger:

private static final Logger LOG = LoggerFactory.getLogger(MySpout.class); 

Nel mio ambiente, tutto INFO e sopra è registrato su file e, soprattutto, visibile nell'interfaccia utente Storm. Devi solo cliccare sul beccuccio/chiavistello e quindi fare clic sul numero di porta per andare alla pagina del visualizzatore del registro.

Se si desidera ottenere i file effettivi, è possibile raccoglierli da ciascun nodo (i miei sono in /var/log/storm/).

+0

Quindi quando dici "vai ai file attuali" stai dicendo su worker- .log file che per default vanno nella directory $ STORM_HOME/logs. o vuoi dire che hai configurato il tuo file log4j con path come/var/log/storm? Inoltre, è possibile che Storm non utilizzi Cluster.xml e utilizzi il file di registro ur inviato nel bar in uso nel cluster. –

+0

@AnkurGarg Intendevo i file worker-port.log. Ogni volta che si chiama LOG.info o sopra la propria topologia, verrà registrato in tali log dei lavoratori e visibile nell'interfaccia utente di Storm. –

+0

Ok. Grazie per aver risposto Kit :) –