Domanda

Esiste un modo per scrivere eventi di registrazione log4j in un file di registro che viene anche scritto da altre applicazioni. Le altre applicazioni potrebbero essere applicazioni non Java. Quali sono gli svantaggi? Problemi di blocco? La formattazione?

È stato utile?

Soluzione

Log4j ha un SocketAppender, che invierà eventi a un servizio, che puoi implementare tu stesso o usare la semplice implementazione in bundle con Log4j.

Supporta anche syslogd e il registro eventi di Windows, che può essere utile nel tentativo di unificare l'output del registro con eventi provenienti da applicazioni non Java.

Se le prestazioni sono un problema, si desidera che un singolo servizio scriva il file di registro, anziché cercare di coordinare una strategia di blocco coerente tra diverse applicazioni di registrazione.

Altri suggerimenti

La soluzione migliore potrebbe essere quella di consentire a ciascuna applicazione di accedere separatamente, quindi mettere in atto un lavoro programmato per "zippare" i file in base al tempo. Se hai bisogno di un accesso veramente aggiornato al registro completo, puoi farlo funzionare ogni ora.

Ho un'esperienza con i seguenti due approcci:

  1. Utilizza il database per la registrazione anziché un file di testo semplice: può essere proibitivo a causa di problemi di prestazioni, d'altra parte è molto facile analizzare i log, creare report. Il database si occupa di tutti i problemi di concorrenza.
  2. L'altro approccio prevede l'utilizzo del server JBoss, che può essere utilizzato per leggere le informazioni di registrazione da altre fonti. JBoss può essere eseguito nella configurazione minima e grazie a ciò è davvero leggero (tempo di avvio di 2 secondi). I dettagli sono disponibili qui http://docs.jboss.org/process -guide / it / html / logging.html (registrazione su un server separato). Log4J si occupa di tutti i problemi di blocco / concorrenza.

Se non si intende utilizzare JBoss, è possibile utilizzare il secondo approccio come base della propria soluzione di registrazione.

Non credo che le appendici log4j predefinite facciano alcun blocco o sincronizzazione dei file. Senza tale blocco, è probabile che perdiate i messaggi di registro o li riceviate alterati.

Non sono sicuro di quanto sia facile eseguire il blocco dei file in Java, ma per farlo funzionare direttamente, penso che dovresti sottoclassare l'Appender appropriato e sovrascrivere il metodo di registrazione, avvolgendolo con il codice di sincronizzazione che blocca e sblocca il file. Ciò potrebbe avere implicazioni sulle prestazioni, a seconda del carico del sistema.

Log4perl ha un Appender di sincronizzazione, Log :: Log4perl :: Appender :: Synchronized, che avvolge un Appender e lo fa, e sembra anche fornire un flag nel suo Log :: Log4perl :: Appender :: File che impedisce il interfogliamento Linee. Potresti vedere cosa fanno quelli per vedere se potrebbe essere replicabile in Java.

Log4j è abbastanza flessibile da poter creare voci di registro in un formato compatibile con i record già presenti nel file. Dai un'occhiata alle appendici per come formattare specifici campi di dati.

La tua principale preoccupazione sarà il blocco, molto probabilmente da altre applicazioni. Assicurati che tutte le applicazioni non abbiano un blocco esclusivo sul file e dovresti andare bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top