Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Log4j

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    324

    Log4j

    Ciao a tutti,

    apro questa discussione in quanto mi sono imbattuto in un problema che non so se sia possibile effettuare.
    Il problema in questione consiste nella gestione dei log dove ho creato un log4j.xml che mi gestisce, tramite la stampa a console che in un file.log, i messaggi generati. Nel frattempo facendo delle ricerche ho visto che con log4j da anche la possibilità di mandare delle email. E qui e dove mi sono bloccato, nel senso che non so come fare ad attuare tale gestione in quanto nel mio log4j.xml ho il tag root dove intercetta tutti i messaggi di livello INFO,WARN ed ERROR. Detto ciò vorrei gestire la cosa in maniera un più completa nel senso che vorrei, qualora mi arrivasse un messaggio di livello WARN e/o ERROR, farmi inviare le email con la stampa dell'errore generato.


    Qualcuno saprebbe dirmi come fare tutto cio per favore?

    Grazie Anticipatamente

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Log4j

    Originariamente inviato da manublack
    Detto ciò vorrei gestire la cosa in maniera un più completa nel senso che vorrei, qualora mi arrivasse un messaggio di livello WARN e/o ERROR, farmi inviare le email con la stampa dell'errore generato.
    Ciao, nel caso dell'uso di SMTPAppender bisogna distinguere due cose: quali sono i livelli che devono arrivare all'appender (questo vale in generale per qualunque appender) e poi (specifico per SMTPAppender) quali sono i livelli che scatenano effettivamente l'invio della email.

    La documentazione javadoc di SMTPAppender dice chiaramente che (per default) una mail viene inviata quando viene fatto l'append di un ERROR o più grave. Questo vuol dire che se si ha solo un WARN, di per sé non invia l'email. Il WARN potrebbe rientrare nella email se successivamente c'è un ERROR e il BufferSize di SMTPAppender è sufficiente da aver tenuto nel buffer quel WARN.

    Se vuoi cambiare il livello di triggering di invio della email, devi impostare il parametro EvaluatorClass con il nome di una classe che implementa TriggeringEventEvaluator (vedi javadoc). In Log4j non c'è una implementazione predefinita ... devi farla tu.

    Se vuoi filtrare i livelli in modo che al SMTPAppender arrivino solo WARN/ERROR, devi usare un org.apache.log4j.varia.LevelRangeFilter con i parametri LevelMin e LevelMax.

    Se hai bisogno di info più precise, chiedi pure.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    AndBin, mi sa che ti stai sbagliando...
    In log4j esistono i cosi detti filtri che possono essere impostati sugli appender per "filtrare" quello che gli appender devono ricevere. In particolare esiste il filtro LevelRangeFilter che ti permette di specificare il "livello" minimo e massimo dei "messaggi" che devono essere intercettati.
    Qui un esempio di appender smpt:
    codice:
    	<appender name="EMAIL" class="org.apache.log4j.net.SMTPAppender">
    		<param name="BufferSize" value="1" />
    		<param name="SMTPHost" value="indirizzo smpt" />
    		<param name="From" value="indirizzo mittente" />
    		<param name="To" value="destinatari" />
    		<param name="Subject" value="OGGETTO" />
    		
    		<filter class="org.apache.log4j.varia.LevelRangeFilter">
    			<param name="LevelMin" value="FATAL" />
    			<param name="LevelMax" value="FATAL" />
    		</filter>
    	</appender>

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da francesco.muia
    In particolare esiste il filtro LevelRangeFilter che ti permette di specificare il "livello" minimo e massimo dei "messaggi" che devono essere intercettati.
    Infatti ... è anche questo che ho detto. Ma un conto, lo ripeto vale per SMTPAppender, è cosa arriva all'appender e un altro conto è cosa fa scatenare l'invio della mail in SMTPAppender!

    Nel XML che hai postato, lo scenario è abbastanza tranquillo, hai filtrato solo i FATAL e siccome SMTPAppender invia solo quando gli arriva un ERROR (o più grave), allora è scontato che nel tuo caso: 1 FATAL = 1 mail inviata subito.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    metti levelMin WARN e partiranno tutti i warn.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da francesco.muia
    metti levelMin WARN e partiranno tutti i warn.
    Sì ma per default, ripeto, non sono i WARN che inviano la email.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    324
    Originariamente inviato da francesco.muia
    AndBin, mi sa che ti stai sbagliando...
    In log4j esistono i cosi detti filtri che possono essere impostati sugli appender per "filtrare" quello che gli appender devono ricevere. In particolare esiste il filtro LevelRangeFilter che ti permette di specificare il "livello" minimo e massimo dei "messaggi" che devono essere intercettati.
    Qui un esempio di appender smpt:
    codice:
    	<appender name="EMAIL" class="org.apache.log4j.net.SMTPAppender">
    		<param name="BufferSize" value="1" />
    		<param name="SMTPHost" value="indirizzo smpt" />
    		<param name="From" value="indirizzo mittente" />
    		<param name="To" value="destinatari" />
    		<param name="Subject" value="OGGETTO" />
    		
    		<filter class="org.apache.log4j.varia.LevelRangeFilter">
    			<param name="LevelMin" value="FATAL" />
    			<param name="LevelMax" value="FATAL" />
    		</filter>
    	</appender>
    Innanzi tutto vi ringrazio per le risposte che mi avete dato.

    Quindi se ho capito bene quando creo il mio appender SMTPAppender aggiungo il filter e lui con i LevelMin e LevelMax riconosce che a tali livelli mi deve mandare l'emil... giusto?
    Però ho un altra domanda io nel mio log4j.xml ho il tag <root> stilato in questa maniera:

    codice:
    <root>    	 
          <level value="INFO,WARN,ERROR"/>  	  
          <appender-ref ref="consoleAppender"/>       
          <appender-ref ref="fileAppender"/>   
        
    </root>
    dove dichiaro i livelli che devono essere esposti. Domanda per farsi che le email mi vengano inviate devo aggiungerlo all'interno del tag <root>? Se si non influisce poi sull'intercettazione dei livelli impostati nel appender SMTPAppender?

    Grazie anticipatamente

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da manublack
    Quindi se ho capito bene quando creo il mio appender SMTPAppender aggiungo il filter e lui con i LevelMin e LevelMax riconosce che a tali livelli mi deve mandare l'emil... giusto?
    Lo ripeto ancora una volta ma in modo diverso: il LevelRangeFilter è l'imbuto che "filtra" gli eventi in base al livello e ciò che esce da questo "imbuto" va a finire nel buffer (di dimensione BufferSize) del SMTPAppender. Questo buffer è di dimensione fissa, se pieno e c'è un evento, il più vecchio viene buttato via.

    Solo quando l'evento è uno di "triggering", allora e solo in quel momento SMTPAppender invia tramite email il contenuto del buffer. Per default l'evento di triggering è un evento di livello ERROR o più grave.

    Se vuoi che anche WARN possa causare l'invio della email, allora devi implementare TriggeringEventEvaluator in modo che il isTriggeringEvent restituisca true per WARN o ERROR.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    324
    Originariamente inviato da andbin
    Lo ripeto ancora una volta ma in modo diverso: il LevelRangeFilter è l'imbuto che "filtra" gli eventi in base al livello e ciò che esce da questo "imbuto" va a finire nel buffer (di dimensione BufferSize) del SMTPAppender. Questo buffer è di dimensione fissa, se pieno e c'è un evento, il più vecchio viene buttato via.

    Solo quando l'evento è uno di "triggering", allora e solo in quel momento SMTPAppender invia tramite email il contenuto del buffer. Per default l'evento di triggering è un evento di livello ERROR o più grave.

    Se vuoi che anche WARN possa causare l'invio della email, allora devi implementare TriggeringEventEvaluator in modo che il isTriggeringEvent restituisca true per WARN o ERROR.
    ok perfetto.... ti posso chiedere solo un esempio di codice?

    Ti ringrazioe per la risposta

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da manublack
    ok perfetto.... ti posso chiedere solo un esempio di codice?

    Ti ringrazioe per la risposta
    In definitiva, se vuoi lo scenario:
    - 1 WARN -> subito email con solo questo WARN
    - 1 ERROR -> subito email con solo questo ERROR

    allora:
    1) BufferSize a 1
    2) implementi TriggeringEventEvaluator

    codice:
    public class WarnErrorTriggeringEventEvaluator implements TriggeringEventEvaluator {
        public boolean isTriggeringEvent(LoggingEvent event) {
            return event.getLevel() == Level.WARN || event.getLevel() == Level.ERROR;
        }
    }
    (ho omesso package/import)

    e poi configuri con (param dentro <appender>):

    <param name="EvaluatorClass" value="x.y.z.WarnErrorTriggeringEventEvaluator" />

    3) il LevelRangeFilter io comunque lo metterei in ogni caso, anche se credo che teoricamente in questo scenario non servirebbe.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.