Sto cercando di aggiungere il componente di registrazione al sistema distribuito. È scritto in AspectJ
per evitare di concatenare il codice sorgente attuale. Uso l'appender socket per inviare i log, ma mi piacerebbe provare qualcosa di più efficace.Quali appendici dovrebbero essere utilizzati nel sistema distribuito? Come configurarli?
Ho sentito che dovrei usare JMSAppender
e AsyncAppender
, ma non sono riuscito a configurarlo. Devo creare Receiver
che raccoglie i log e li passiamo al database e alla GUI (io uso ChainSaw
)?
Ho provato a seguire turorial1 e tutorial2, ma non sono abbastanza chiari.
Edit:
In una piccola demo ho preparato ho mandato 6 registri per una richiesta (simulazione di 3 componenti)
[2012-08-08 15:40:28,957] [request1344433228957] [Component_A] [start]
[2012-08-08 15:40:32,050] [request1344433228957] [Component_B] [start]
[2012-08-08 15:40:32,113] [request1344433228957] [Component_C] [start]
[2012-08-08 15:40:32,113] [request1344433228957] [Component_C] [end - throwing]
[2012-08-08 15:40:32,144] [request1344433228957] [Component_B] [end]
[2012-08-08 15:40:32,175] [request1344433228957] [Component_A] [end]
Utilizzo della presa Appender. Così i miei log4j.properties è:
log4j.rootLogger=DEBUG, server
log4j.appender.server=org.apache.log4j.net.SocketAppender
log4j.appender.server.Port=4712
log4j.appender.server.RemoteHost=localhost
log4j.appender.server.ReconnectionDelay=1000
così corro
>java -classpath log4j-1.2.17.jar org.apache.log4j.net.SimpleSocketServer 4712 log4j-server.properties
con la configurazione
log4j.rootLogger=DEBUG, CA, FA
#
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=[%d] [%t] [%c] [%m]%n
#
log4j.appender.FA=org.apache.log4j.FileAppender
log4j.appender.FA.File=report.log
log4j.appender.FA.layout=org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern=[%d] [%t] [%c] [%m]%n
Poi io mando il mio registri dal file da Chainsaw:
È assolutamente fondamentale, ma voglio imparare come farlo meglio. Prima di tutto, vorrei inviare i registri in modo asincrono. Quindi crea un ricevitore molto semplice, ad es. può passare i log in un file.
Ho provato a seguire i tutorial che ho elencato sopra, ma ho fallito. Quindi la domanda è: potresti fornire qualche configurazione di esempio? Esempio di file Receiver.java
e log4.properties
?
Ho bisogno di dividere i registri su file diversi per tipo di richiesta, non per nome macchina. È possibile? – alicjasalamon
Hai bisogno di farlo quasi in tempo reale o può essere elaborato durante la notte? Un file per richiesta potrebbe essere molto inefficiente. Se stai facendo qualcosa di sensibile al tempo non userei log4j in alcun modo. ;) –
La mia idea era: i messaggi vengono inviati in modo asincrono dall'appender JMS a 'Receiver'. 'Ricevitore' sceglie le richieste più lunghe o una richiesta in un gruppo di 50, quindi passa a ChainSaw e al database. Non dovrei usare log4j in questa situazione? Sto cercando una soluzione ** easy ** – alicjasalamon