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

Java Discussion :

[Log4j] Projets multi jars => comment utiliser un seul logger ?


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 30
    Points
    30
    Par défaut [Log4j] Projets multi jars => comment utiliser un seul logger ?
    Bonjour,

    Mon projet se découpe en couche (web-app, coordination, service, domaine, persistence, transverse). Chaque sous projet (chaque couche) génère un jar, qui sera mis dans le WEB-INF/lib de web-app, qui elle sera packagée en war et déployée sur le serveur (TomCat pour l'instant).

    J'ai mis le log4j.properties dans le sous projet web-app, mais quand j'utilise un logger dans coordination par exemple, ça ne génère rien dans mon fichier de log.

    Comment faire pour n'avoir qu'un seul log4j.properties et que tous les sous-projet l'utilisent ?

    Si je mets le log4j dans transverse (chaque sous-projet le référence), j'ai un warn au démarrage me disant qu'il ne trouve pas d'Appender pour le logger. J'ai donc des logs "par défaut", et mes debug de coordination ne s'affichent pas.

    Si je mets le log4j.properties dans web-app, il trouve bien le logger et logs tout ce qui est relatif à web-app, mais pas mes debug de coordination.

    Idem si je duplique ce log4j.properties dans web-app et transverse.

    Mon log4j.properties :
    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
    # Set root logger level to DEBUG and its only appender to A1.
    log4j.rootLogger=DEBUG, A1, CRM
     
    # A1 is set to be a ConsoleAppender.
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
     
    # CRM is set to be a FileAppender.
    log4j.appender.CRM=org.apache.log4j.FileAppender
    log4j.appender.CRM.File=C:/{...}/crm.log
    log4j.appender.CRM.layout=org.apache.log4j.PatternLayout
    log4j.appender.CRM.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
     
    log4j.logger.com.abw=debug, CRM
    log4j.logger.org.apache.commons=error, CRM
    log4j.logger.org.apache.jasper=error, CRM
    log4j.logger.org.apache.axis=error, CRM
    log4j.logger.org.apache.catalina=error, CRM
    log4j.logger.org.apache.struts=debug, CRM
    log4j.logger.org.apache.struts.action=error, CRM
    log4j.logger.org.apache.struts.taglib=error, CRM
    log4j.logger.org.apache.struts.tiles=error, CRM
    log4j.logger.org.apache.struts.util=error, CRM
    log4j.logger.org.apache.struts.validator=error, CRM
    log4j.logger.org.displaytag.filter=error, CRM
    log4j.logger.com.mchange=error, CRM
    log4j.logger.org.springframework=error, CRM
    log4j.logger.org.hibernate=error, CRM
    Mes appels dans le ssous-projet "coordination" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private Logger log = Logger.getLogger(LoginAction.class);
    log.debug("Entering login...");
    Merci pour vos lumières.

    PS : Eclipse 3.2.0
    Struts 1.2.7
    Spring 1.2.5
    commons-logging 1.0.4
    log4j 1.2.9
    TomCat 5.0.28

  2. #2
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    avec Log4J, tu passes par Logger.getLogger(---) pour récupérer l'instance unique de ton logger (c'est un singleton).

    Donc, tu l'initialises au démarrage de ta webapp avec ton properties, et après a chaque trace, tu utilises Logger.getLogger(---).onError(xxx) ou un truc du genre.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    Effectivement en passant par un Servlet d'init :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void init() throws ServletException {
    		super.init();
    		System.out.println("Initializing log4j...");
    		String prefix =  getServletContext().getRealPath("/");
    	    String file = getInitParameter("log4j-init-file");
    	    // if the log4j-init-file is not set, then no point in trying
    	    if(file != null) {
    	    	PropertyConfigurator.configure(prefix + file);
    	    	log.info("Log4j initialized !");
    	    }
    	}
    Ca fonctionne. Je suis un peu en retard mais merci.

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

Discussions similaires

  1. [Bonne pratique] Comment utiliser Subversion dans un cadre multi-projets/multi-domaines?
    Par Nixar dans le forum Subversion
    Réponses: 2
    Dernier message: 09/06/2011, 14h04
  2. [COM] Comment utiliser une dll DotNet dans un projet win32 ?
    Par Marmottoc dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 05/05/2006, 15h58
  3. Réponses: 4
    Dernier message: 24/08/2005, 14h09
  4. [C#] Comment utiliser des dll win 32 dans un projet .NET
    Par Mickey.jet dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 31/05/2005, 13h45

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