Differenze tra le versioni di "Impostazione livelli di logging"
imported>Root |
imported>Root |
||
(9 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 15: | Riga 15: | ||
* <code>Utente</code>: come il caso precedente ma è possibile definire un utente applicativo scegliendolo tra quelli disponibili nel database. | * <code>Utente</code>: come il caso precedente ma è possibile definire un utente applicativo scegliendolo tra quelli disponibili nel database. | ||
* <code>Utente J2EE corrente</code>: effettua il logging per tutte le sessioni relative all'utente j2EE corrente (quindi tutti gli utenti applicativi del database corrente) | * <code>Utente J2EE corrente</code>: effettua il logging per tutte le sessioni relative all'utente j2EE corrente (quindi tutti gli utenti applicativi del database corrente) | ||
''Per ragioni di sicurezza non è permesso creare logger per utenti J2EE diversi da quello con cui si è connessi al sistema, ma è possibile rimuoverne di preesistenti qualora questi creassero problemi. '' | |||
* <code>Globale</code>: effettua il logging per tutte le sessioni di tutti i database ''(dettagli nel paragrafo "Efficacia degli scope")''. | * <code>Globale</code>: effettua il logging per tutte le sessioni di tutti i database ''(dettagli nel paragrafo "Efficacia degli scope")''. | ||
==== Efficacia degli scope ==== | |||
Lo scope <code>Globale</code> ha effetto su tutto il codice eseguito dal server mentre gli altri scope più specifici hanno effetto solamente per il codice che effettua il logging tramite le <code>API</code> della suite. Pertanto se si ha necessità di loggare le operazioni eseguite da librerie di terze parti installate nel sistema, l'unica possibilità è <code>Globale</code>. | |||
== Creare un nuovo Logger == | == Creare un nuovo Logger == | ||
Riga 21: | Riga 25: | ||
E' possibile digitare il nome completo nel box <code>Nuovo logger</code> oppure si può utilizzare il pulsante <code>Recenti</code> che mostra una lista degli ultimi logger creati nel sistema. Il pulsante <code>Recenti</code> è disponibile fintanto che il box <code>Nuovo logger</code> è vuoto. Se invece il box contiene un testo, il tasto si commuta in <code>Cerca</code>. Premendolo si effettua una ricerca tra i logger che attualmente sono stati caricati (registrati) nella memoria del server. Pertanto è possibile che un logger che si sa esistere non venga trovato perché il server è stato appena riavviato e il logger in oggetto non è ancora stato utilizzato (registrato) dall'applicativo. In questo caso è sempre possibile sfruttare i Recenti oppure digitare manualmente l'intero nome nel box. | E' possibile digitare il nome completo nel box <code>Nuovo logger</code> oppure si può utilizzare il pulsante <code>Recenti</code> che mostra una lista degli ultimi logger creati nel sistema. Il pulsante <code>Recenti</code> è disponibile fintanto che il box <code>Nuovo logger</code> è vuoto. Se invece il box contiene un testo, il tasto si commuta in <code>Cerca</code>. Premendolo si effettua una ricerca tra i logger che attualmente sono stati caricati (registrati) nella memoria del server. Pertanto è possibile che un logger che si sa esistere non venga trovato perché il server è stato appena riavviato e il logger in oggetto non è ancora stato utilizzato (registrato) dall'applicativo. In questo caso è sempre possibile sfruttare i Recenti oppure digitare manualmente l'intero nome nel box. | ||
'''''Nota: '''Sia per la lista dei <code>Recenti</code> che per la lista dei risultati di <code>Cerca</code>, se è presente un solo elemento questo viene automaticamente impostato nel box <code>Nuovo logger</code>.'' | |||
La lista dei <code>Recenti</code> o la lista dei risultati di <code>Cerca</code> potrebbero includere elementi con l'icona della terra. Tali elementi sono stati riconosciuti come non appartenenti alle <code>API</code> di logging della suite e l'icona avverte che funzioneranno solamente con lo scope <code>Globale</code>. Selezionando uno di questi elementi se lo scope non è <code>Globale</code> l'interfaccia lo commuta automaticamente. E' possibile modificarlo successivamente ad un altro tipo di scope ma si tenga conto che come detto precedentemente i logger che non usano le <code>API</code> della suite non rispondono che allo scope <code>Globale</code>. | |||
Questo automatismo è presente solamente a fronte di una ricerca. Se si digita il nome del logger manualmente, questo non viene analizzato per verificarne la tipologia. E' comunque possibile effettuare una ricerca dopo avere digitato il nome completo. In tal caso viene verificata la tipologia. Quando si crea un logger dopo una ricerca, il sistema cerca di memorizzare nella lista dei recenti anche la tipologia e la ripropone successivamente. Se però dopo la ricerca si modifica manualmente il valore allora l'informazione viene resettata. | |||
'''''Nota:''' Si tenga conto che i logger vengono cercati all'interno del <code>ClassLoader</code> corrente per cui se esistono altri logger su altri <code>ClassLoader</code> questi non verranno rilevati.'' | |||
'''''Nota: '''E' possibile cercare utilizzando le wildcard <code>*</code> e <code>?</code>, in particolare se queste non vengono utilizzate all'inizio o alla fine del testo di ricerca per comodità viene internamente preposta e anteposta la wildcard <code>*</code>.'' | |||
Esiste anche la possibilità di digitare degli shortcut per i vari moduli applicativi. Digitando il prefisso di applicazione e premendo <code>tab</code>, tale prefisso si espande nel package dell'applicativo. A quel punto è possibile premere il pulsante di ricerca per vedere tutti i logger attualmente registrati nel sistema sotto quel package. | Esiste anche la possibilità di digitare degli shortcut per i vari moduli applicativi. Digitando il prefisso di applicazione e premendo <code>tab</code>, tale prefisso si espande nel package dell'applicativo. A quel punto è possibile premere il pulsante di ricerca per vedere tutti i logger attualmente registrati nel sistema sotto quel package. | ||
Riga 28: | Riga 42: | ||
== Modificare un Logger == | == Modificare un Logger == | ||
I nuovi logger vengono creati con i livelli di logging client e server pari a quanto definito nei file <code>logging.properties</code> delle rispettive macchine client e server, in modo che la loro creazione non alteri lo stato delle cose. A questo punto è possibile modificare i livelli di logging cliccando sulle celle da modificare. | I nuovi logger vengono creati con i livelli di logging client e server pari a quanto definito nei file <code>logging.properties</code> delle rispettive macchine client e server, in modo che la loro creazione non alteri lo stato delle cose. A questo punto è possibile modificare i livelli di logging cliccando sulle celle da modificare. | ||
'''''Nota: '''I valori modificati vengono applicati immediatamente, non c'è pulsante di salvataggio.'' | |||
'''''Nota: '''Creando più logger con lo stesso nome e scope differenti si potrà notare che il livello di logging lato client è condiviso tra tutti loro. Questo perchè il livello di logging lato client ha un unico scope, che è appunto quello client. Modificando il livello di logging client su un logger, tutti gli altri logger con il medesimo nome verranno aggiornati di conseguenza.'' | '''''Nota: '''Creando più logger con lo stesso nome e scope differenti si potrà notare che il livello di logging lato client è condiviso tra tutti loro. Questo perchè il livello di logging lato client ha un unico scope, che è appunto quello client. Modificando il livello di logging client su un logger, tutti gli altri logger con il medesimo nome verranno aggiornati di conseguenza.'' | ||
E' anche possibile specificare un valore <code>mnemonico</code> per il logger. In tal caso il valore viene preposto ai messaggi stampati sulla console server, facilitandone l'individuazione. Il valore non viene stampato sulla console client in quanto non necessario (il client non è condiviso tra più sessioni di lavoro) | E' anche possibile specificare un valore <code>mnemonico</code> per il logger. In tal caso il valore viene preposto ai messaggi stampati sulla console server, facilitandone l'individuazione. Il valore non viene stampato sulla console client in quanto non necessario (il client non è condiviso tra più sessioni di lavoro) | ||
'''''Nota: '''Per applicare il valore mnemonico è necessario terminare la modifica della cella della tabella premendo <code>TAB</code>, <code>INVIO</code> oppure cliccando in un'altra cella. Finchè non viene terminata la modifica il valore mnemonico non verrà stampato.'' | |||
Altri valori come il <code>nome</code> o lo <code>scope</code> non sono modificabili, è necessario creare un nuovo logger con un altro <code>nome</code>/<code>scope</code> se necessario. | Altri valori come il <code>nome</code> o lo <code>scope</code> non sono modificabili, è necessario creare un nuovo logger con un altro <code>nome</code>/<code>scope</code> se necessario. | ||
== Influenza dei Logger nelle elaborazioni in corso == | |||
Per la natura tecnica del meccanismo degli scope, i nuovi logger (o le modifiche a logger) con scope <code>Sessione</code>, <code>Utente</code> o <code>Utente J2EE</code> verranno recepite dagli algoritmi lato server solamente quando l'algoritmo attraversa una frontiera di chiamata <code>remota</code> o <code>locale</code> (EJB) in quanto è in quella fase che le strutture dati vengono aggiornate nella sessione di lavoro. | |||
L'unico scope con effetti immediati è lo scope <code>Globale</code>, che agisce più a basso livello e non necessita delle sovrastrutture degli altri scope. | |||
== Rimuovere un Logger attivo == | == Rimuovere un Logger attivo == | ||
Per rimuovere un logger è sufficiente cancellarlo dalla lista.con l'apposito pulsante della tabella o con un click di destro del mouse sulla riga | Per rimuovere un logger è sufficiente cancellarlo dalla lista.con l'apposito pulsante della tabella o con un click di destro del mouse sulla riga. | ||
'''''Nota: '''Non è necessario reimpostare il livello di logging al valore originario. Il sotto sistema di logging si prende l'onere di ripristinare automaticamente i livelli originali.'' | '''''Nota: '''Non è necessario reimpostare il livello di logging al valore originario. Il sotto sistema di logging si prende l'onere di ripristinare automaticamente i livelli originali.'' | ||
== | ==== Rimozione automatica dei logger di sessione ==== | ||
Per i logger legati ad una specifica sessione di lavoro, la rimozione avviene automaticamente entro trenta secondi dalla terminazione della sessione stessa. E' comunque possibile rimuoverli manualmente senza terminare la sessione, come per tutti gli altri logger. | |||
== Codifica a colori == | == Codifica a colori == | ||
Riga 48: | Riga 71: | ||
Ad esempio, un livello <code>FINEST</code> viene indicato in rosso in quanto probabilmente genererà molto testo sulla console. | Ad esempio, un livello <code>FINEST</code> viene indicato in rosso in quanto probabilmente genererà molto testo sulla console. | ||
Uno scope <code> | Uno scope <code>GLobale</code> verrà indicato in rosso per lo stesso motivo di cui sopra. | ||
Gli scope a livello di <code> | Gli scope a livello di <code>Sessione</code> e di <code>Utente J2EE</code> vengono indicati in giallo in quanto nel primo caso potrebbero non essere stampate tutte le righe di log che potrebbero interessare, mentre nel secondo caso si tratta comunque di una generazione massiva di informazioni, anche se non a livello di <code>Globale</code> (sempre che siano installati più database/utenti J2EE nel server corrente). |
Versione attuale delle 15:42, 20 ott 2017
La finestra di impostazione livelli di logging permette di creare e manipolare i logger (vedi dopo per una definizione di logger).
L'interfaccia visualizza tutti i logger attivi nell'intero sistema. Tali logger sono degli override rispetto al livello di logging impostato nel file logging.properties
della macchina virtuale. Pertanto, se non e' attivo un logger specifico, vale il livello di logging impostato nel file di properties.
Cosa e' un Logger
In sostanza un logger è una combinazione di un nome
, un livello
ed uno scope
.
nome
: indica l'argomento del logging. In generale è il nome di una classe java presente nell'applicativo. L'applicativo deve prevedere un logger con tale nome e stampare messaggi di informazione/debug con tale logger, a vari livelli di importanza. Se l'applicativo non prevede un logger non sarà possibile ottenere alcun risultato.livello
: indica quanto specifica debba essere l'informazione loggata.SEVERE
indica di loggare solo i messaggi più importanti mentreFINEST
indica di loggare qualsiasi tipo di messaggio, anche il più dettagliato. Tipicamente il livelloFINEST
produce moltissimo log, pertanto è necessario utilizzarlo con cautela.scope
: indica a quali sessioni di lavoro applicare l'impostazione (vedi dopo per dettagli).
Scope di un Logger
Se si effettua il logging su un sistema che ospita più database e molti utenti che stanno lavorando per ogni database, è necessario selezionare per quali sessioni di lavoro generare i log al fine di evitare una produzione di log esagerata che risulta in alcuni casi impossibile da interpretare.
Sessione corrente
: causa la generazione di log solamente per la sessione corrente. Se l'utente corrente effettua dei login lato server (generando nuove sessioni) queste non vengono loggate.Utente corrente
: causa la generazione di log per tutte le sessioni dell'utente corrente, sia quella interattiva che eventuali altre sessioni lato server.Utente
: come il caso precedente ma è possibile definire un utente applicativo scegliendolo tra quelli disponibili nel database.Utente J2EE corrente
: effettua il logging per tutte le sessioni relative all'utente j2EE corrente (quindi tutti gli utenti applicativi del database corrente)
Per ragioni di sicurezza non è permesso creare logger per utenti J2EE diversi da quello con cui si è connessi al sistema, ma è possibile rimuoverne di preesistenti qualora questi creassero problemi.
Globale
: effettua il logging per tutte le sessioni di tutti i database (dettagli nel paragrafo "Efficacia degli scope").
Efficacia degli scope
Lo scope Globale
ha effetto su tutto il codice eseguito dal server mentre gli altri scope più specifici hanno effetto solamente per il codice che effettua il logging tramite le API
della suite. Pertanto se si ha necessità di loggare le operazioni eseguite da librerie di terze parti installate nel sistema, l'unica possibilità è Globale
.
Creare un nuovo Logger
Per aggiungere un logger alla lista dei logger attivi è necessario crearlo, specificando per prima cosa il nome
.
E' possibile digitare il nome completo nel box Nuovo logger
oppure si può utilizzare il pulsante Recenti
che mostra una lista degli ultimi logger creati nel sistema. Il pulsante Recenti
è disponibile fintanto che il box Nuovo logger
è vuoto. Se invece il box contiene un testo, il tasto si commuta in Cerca
. Premendolo si effettua una ricerca tra i logger che attualmente sono stati caricati (registrati) nella memoria del server. Pertanto è possibile che un logger che si sa esistere non venga trovato perché il server è stato appena riavviato e il logger in oggetto non è ancora stato utilizzato (registrato) dall'applicativo. In questo caso è sempre possibile sfruttare i Recenti oppure digitare manualmente l'intero nome nel box.
Nota: Sia per la lista dei Recenti
che per la lista dei risultati di Cerca
, se è presente un solo elemento questo viene automaticamente impostato nel box Nuovo logger
.
La lista dei Recenti
o la lista dei risultati di Cerca
potrebbero includere elementi con l'icona della terra. Tali elementi sono stati riconosciuti come non appartenenti alle API
di logging della suite e l'icona avverte che funzioneranno solamente con lo scope Globale
. Selezionando uno di questi elementi se lo scope non è Globale
l'interfaccia lo commuta automaticamente. E' possibile modificarlo successivamente ad un altro tipo di scope ma si tenga conto che come detto precedentemente i logger che non usano le API
della suite non rispondono che allo scope Globale
.
Questo automatismo è presente solamente a fronte di una ricerca. Se si digita il nome del logger manualmente, questo non viene analizzato per verificarne la tipologia. E' comunque possibile effettuare una ricerca dopo avere digitato il nome completo. In tal caso viene verificata la tipologia. Quando si crea un logger dopo una ricerca, il sistema cerca di memorizzare nella lista dei recenti anche la tipologia e la ripropone successivamente. Se però dopo la ricerca si modifica manualmente il valore allora l'informazione viene resettata.
Nota: Si tenga conto che i logger vengono cercati all'interno del ClassLoader
corrente per cui se esistono altri logger su altri ClassLoader
questi non verranno rilevati.
Nota: E' possibile cercare utilizzando le wildcard *
e ?
, in particolare se queste non vengono utilizzate all'inizio o alla fine del testo di ricerca per comodità viene internamente preposta e anteposta la wildcard *
.
Esiste anche la possibilità di digitare degli shortcut per i vari moduli applicativi. Digitando il prefisso di applicazione e premendo tab
, tale prefisso si espande nel package dell'applicativo. A quel punto è possibile premere il pulsante di ricerca per vedere tutti i logger attualmente registrati nel sistema sotto quel package.
Una volta specificato il nome
, è necessario specificare lo scope
nel campo combo successivo. Di default lo scope è Utente corrente
in quanto rappresenta la scelta più bilanciata. Scelto lo scope
, premendo il pulsante Crea
viene creato il nuovo logger e questo compare nella lista dei logger attivi.
Modificare un Logger
I nuovi logger vengono creati con i livelli di logging client e server pari a quanto definito nei file logging.properties
delle rispettive macchine client e server, in modo che la loro creazione non alteri lo stato delle cose. A questo punto è possibile modificare i livelli di logging cliccando sulle celle da modificare.
Nota: I valori modificati vengono applicati immediatamente, non c'è pulsante di salvataggio.
Nota: Creando più logger con lo stesso nome e scope differenti si potrà notare che il livello di logging lato client è condiviso tra tutti loro. Questo perchè il livello di logging lato client ha un unico scope, che è appunto quello client. Modificando il livello di logging client su un logger, tutti gli altri logger con il medesimo nome verranno aggiornati di conseguenza.
E' anche possibile specificare un valore mnemonico
per il logger. In tal caso il valore viene preposto ai messaggi stampati sulla console server, facilitandone l'individuazione. Il valore non viene stampato sulla console client in quanto non necessario (il client non è condiviso tra più sessioni di lavoro)
Nota: Per applicare il valore mnemonico è necessario terminare la modifica della cella della tabella premendo TAB
, INVIO
oppure cliccando in un'altra cella. Finchè non viene terminata la modifica il valore mnemonico non verrà stampato.
Altri valori come il nome
o lo scope
non sono modificabili, è necessario creare un nuovo logger con un altro nome
/scope
se necessario.
Influenza dei Logger nelle elaborazioni in corso
Per la natura tecnica del meccanismo degli scope, i nuovi logger (o le modifiche a logger) con scope Sessione
, Utente
o Utente J2EE
verranno recepite dagli algoritmi lato server solamente quando l'algoritmo attraversa una frontiera di chiamata remota
o locale
(EJB) in quanto è in quella fase che le strutture dati vengono aggiornate nella sessione di lavoro.
L'unico scope con effetti immediati è lo scope Globale
, che agisce più a basso livello e non necessita delle sovrastrutture degli altri scope.
Rimuovere un Logger attivo
Per rimuovere un logger è sufficiente cancellarlo dalla lista.con l'apposito pulsante della tabella o con un click di destro del mouse sulla riga.
Nota: Non è necessario reimpostare il livello di logging al valore originario. Il sotto sistema di logging si prende l'onere di ripristinare automaticamente i livelli originali.
Rimozione automatica dei logger di sessione
Per i logger legati ad una specifica sessione di lavoro, la rimozione avviene automaticamente entro trenta secondi dalla terminazione della sessione stessa. E' comunque possibile rimuoverli manualmente senza terminare la sessione, come per tutti gli altri logger.
Codifica a colori
Vengono utilizzati dei codici di colore per indicare il livello di "pericolosità" di un logger.
Ad esempio, un livello FINEST
viene indicato in rosso in quanto probabilmente genererà molto testo sulla console.
Uno scope GLobale
verrà indicato in rosso per lo stesso motivo di cui sopra.
Gli scope a livello di Sessione
e di Utente J2EE
vengono indicati in giallo in quanto nel primo caso potrebbero non essere stampate tutte le righe di log che potrebbero interessare, mentre nel secondo caso si tratta comunque di una generazione massiva di informazioni, anche se non a livello di Globale
(sempre che siano installati più database/utenti J2EE nel server corrente).