Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [Log4j] - logger nullo

  1. #1

    [Log4j] - logger nullo

    Esimi, vi sottopongo uno strano problema in cui mi sono imbattuto di recente, ed al quale non sono certo di aver trovato una soluzione (l'incubo più grande di un programmatore non è NON correggere un bug, ma correggerlo e non capire come ci è riuscito).

    Scenario:
    - Applicazione J2EE basata su Spring
    - Container: Tomcat 6
    - Logging dell'applicativo effettuato mediante Log4j 1.2.13

    Accade che, in maniera assolutamente non predicibile e non riproducibile sistematicamente (o almeno finora non ci sono mai riuscito), si ottiene una misteriosa NullPointerException nell'implementazione del DAO che accede agli utenti. L'eccezione viene sollevata da una riga di log in uno dei metodi del dato, a causa del fatto che il logger in quel punto (e solo quando si verifica il problema) è misteriosamente null.
    Di seguito potete vedere le righe salienti del codice nel DAO.
    codice:
    public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao {
    
    	private final Logger logger = Logger.getLogger(UserDaoImpl.class);
            ....
            ....
            ....
           public UserDetails loadUserByUsername(String username)  {
    	.....
    	logger.debug("originalUsername: " + originalUsername);
            .....
            }
    La classe non è stata scritta da me, ma sulla sua costruzione non avrei nulla da eccepire, l'unica cosa "strana" che noto è nella dichiarazione del logger, e cioè il fatto che il campo logger non è stato dichiarato come static (cosa che io normalmente faccio). Il mio "fix" consiste proprio nel dichiarare come static tale campo, ma non ho assolutamente la certezza del fatto che sia risolutivo, sebbene il problema non si sia più presentato infatti, non è detto che non sia un caso.
    La documentazione non fa riferimento al fatto che Logger.getLogger possa in alcun caso restituire null, e nemmeno specifica di utilizzare una variabile static per memorizzarne il valore di ritorno.

    Le domande in buona sostanza sono essenzialmente due:

    1) a qualcuno di voi è mai capitata una stranezza del genere, e cioè che getLogger restituisse null? Per me è in assoluto la prima volta.
    2) qualcuno sa indicarmi un valido motivo per dichiarare sempre static la variabile che ospita il logger? Io l'ho sempre fatto, ma si tratta per lo più di una consuetudine acquisita per osservazione di codice altrui, ed alla convinzione che fosse più efficiente utilizzare un logger statico.
    Eventualmente apprezzo link a della documentazione autorevole in merito o esperienze pro o contro static.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  2. #2
    Anche a me non ha mai dato problemi.
    Io lo dichiaro sempre static, e andrebbe dichiarato sempre static, perchè poi per ogni oggetto di quella classe sarà istanziato un nuovo logger.

    Forse per quella classe, gestire il logging su diverse istanze è un problema, non sò
    lolide
    Java Programmer

    Informati

  3. #3
    Originariamente inviato da lolide
    Anche a me non ha mai dato problemi.
    Io lo dichiaro sempre static, e andrebbe dichiarato sempre static, perchè poi per ogni oggetto di quella classe sarà istanziato un nuovo logger.
    Sono le stesse considerazioni di buon senso che ho sempre fatto anche io.

    Originariamente inviato da lolide Forse per quella classe, gestire il logging su diverse istanze è un problema, non sò
    Questo si che è strano...non vedo perché dovrebbe essere un problema purtroppo, si tratta si un dao normalissimo istanziato da spring e iniettato nel contesto come una marea di altri nell'applicativo. In ogni caso se a qualcuno viene in mente qualcosa sono tutt'orecchi, tnx
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

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.