IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Logging Java Discussion :

[Log4J] Configuration (création) par le code d'un logger


Sujet :

Logging Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 81
    Par défaut [Log4J] Configuration (création) par le code d'un logger
    Bonjour,

    Pour mon environnement, je dois configurer mes loggers selon des données stockées (en base dans mon cas). En gros, je dois refaire la configuration du logger et ne plus utiliser le fichier xml ou properties.
    La création du logger ne semble pas poser de problème (extension de la classe logger), mais l'ajout d'appender fait tout sauter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public class Main {
     
        public Main() {
            NewLog log = new NewLog("MyLog");
                                  System.out.println("Etape 0");
            PatternLayout myLayout = new PatternLayout("%d{dd MMM yyyy HH:mm:ss:SSS} [%t] %-5p - logger %c - %l - %m%n");
            myLayout.activateOptions();
            ConsoleAppender myAppender = new ConsoleAppender();
            myAppender.setLayout(myLayout);
            myAppender.activateOptions();
            System.out.println("Etape 1");
            log.addAppender(myAppender);
            System.out.println("Etape 2");
            log.debug("coucou");
        }
     
        /**
         * @param args
         */
        public static void main(String[] args)
        {
            Main m = new Main();
        }
     
        class NewLog extends Logger{
     
            /**
             * @param name
             */
            protected NewLog(String name)
            {
                super(name);
            }
        }
    }
    Dans mon cas, je vois bien les étapes 0 et 1 mais pas la 2.
    Cette erreur est levée:
    Exception in thread "main" java.lang.NullPointerException
    at org.apache.log4j.Category.addAppender(Category.java:165)
    at app.Main.<init>(Main.java:19)
    at app.Main.main(Main.java:29)
    Quelqu'un saurait-il m'indiquer comment résoudre ce problème ?

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Je ne sais pas quelle version de Log4J tu utilises,
    mais sur la 1.2.16, ta NullPointerException pourrais être causée par un Repository NULL.

    Voir les Sources à la ligne 165.


    Et ça me semble du au fait que tu instancie ton Logger avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NewLog log = new NewLog("MyLog");
    Au lieu d'utiliser le LoggerManager qui se cache derrière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NewLog log = Logger.getLogger("MyLog");

    Si ce que tu veux faire c'est configurer tes log de manière programmée, regarde du côté des "Custom configurators".

    You can optionaly specify a custom configurator. The value of the log4j.configuratorClass system property is taken as the fully qualified class name of your custom configurator. The custom configurator you specify must implement the Configurator interface.
    Javadoc : Configurator

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 81
    Par défaut
    Merci de la réponse.

    Pour tout expliquer, je récupère la configuration de mes loggers dans une base de données puis je les créé en fonction de mon besoin. (un logger par exécutable par exemple)
    Comme je n'ai plus de fichier xml ni de properties, le code suivant n'a pas de sens (à mon gout):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NewLog log = Logger.getLogger("MyLog");
    En effet, ce que je veux faire c'est bien logger que je programme moi-même, mais il y a peu de tutoriel sur les "Custom configurators". Il va falloir pousser sur la javadoc.

    Je laisse volontairement ce sujet ouvert, si d'autre personne veulent apporter la pierre à l'édifice pour les "Custom configurators" ou si j'ai trouvé rapidement.

    Cdt,
    Xpmich

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 81
    Par défaut
    La réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    import org.apache.log4j.Level;
    import org.apache.log4j.Logger;
     
     
    public class MonLogger {
     
     
    	private Logger logger;
     
    	/**
             * Constructeur du logger
             * @param nom nom du logger
             * @param level niveau du logger
             */
    	public MonLogger (String nom, String strLevel)
    	{
    		this.logger = Logger.getLogger(nom);
    		this.setStrLevel(strLevel);
    	}
     
    	public Logger getLogger()
    	{
    		return logger;
    	}
     
    	/**
             * @param level the level to set
             */
    	public void setStrLevel(String strLevel)
    	{
    		if(strLevel.toLowerCase().compareTo(Level.ALL.toString().toLowerCase()) == 0)
    			this.getLogger().setLevel(Level.ALL);
    		if(strLevel.toLowerCase().compareTo(Level.DEBUG.toString().toLowerCase()) == 0)
    			this.getLogger().setLevel(Level.DEBUG);
    		if(strLevel.toLowerCase().compareTo(Level.ERROR.toString().toLowerCase()) == 0)
    			this.getLogger().setLevel(Level.ERROR);
    		if(strLevel.toLowerCase().compareTo(Level.FATAL.toString().toLowerCase()) == 0)
    			this.getLogger().setLevel(Level.FATAL);
    		if(strLevel.toLowerCase().compareTo(Level.INFO.toString().toLowerCase()) == 0)
    			this.getLogger().setLevel(Level.INFO);
    		if(strLevel.toLowerCase().compareTo(Level.OFF.toString().toLowerCase()) == 0)
    			this.getLogger().setLevel(Level.OFF);
    		if(strLevel.toLowerCase().compareTo(Level.TRACE.toString().toLowerCase()) == 0)
    			this.getLogger().setLevel(Level.TRACE);
    		if(strLevel.toLowerCase().compareTo(Level.WARN.toString().toLowerCase()) == 0)
    			this.getLogger().setLevel(Level.WARN);
    	}
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme lors d'une création d'animation par le code
    Par Finality dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 13/10/2008, 21h12
  2. Réponses: 10
    Dernier message: 18/02/2008, 09h37
  3. Création par code vb6 d'un site IIS
    Par Joseph9999 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 05/01/2008, 02h19
  4. Réponses: 2
    Dernier message: 20/04/2007, 11h00
  5. Réponses: 2
    Dernier message: 22/08/2006, 19h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo