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

Spring Java Discussion :

problème de mise en place d'un logger


Sujet :

Spring Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 57
    Points : 53
    Points
    53
    Par défaut problème de mise en place d'un logger
    Bonjour,

    J'essaie de mettre en place un logger avec spring-aop et aspectj pour logguer les appels à mes méthodes services ainsi que leurs retours. Ce que je voudrais c'est logguer chaque appel à toutes les méthodes du package services (appels + liste des arguments passés) et ensuite logguer tous les retours de chaque appel.

    J'ai donc configuré mon ApplicationContextServices.xml comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
     
    <beans>
     
        <bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />
        <bean id="loggingAspect" class="logging.LoggingInterceptor"/>
     
    ...
     
    </beans>
    Et mon fichier LoggingInterceptor.java :
    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
    50
    51
     
    @Aspect
    public class LoggingInterceptor {
     
    	/**
             * 
             */
    	public LoggingInterceptor()
    	{
    	}
     
    	/**
             * 
             */
    	@Before("execution(* services.domain.impl.*.*(..))")
    	public void beforeCallingMethod(JoinPoint jp)
    	{
    		final Log log = LogFactory.getLog(jp.getTarget().getClass());
    		log.info("#########################################");
    		log.info("CALL TO : "+jp.getSignature().getName());
    		log.info("   ARGS : ");
    	}
     
    	/**
             * 
             */
    	@AfterReturning(
    			pointcut="execution(* services.domain.impl.*.*(..))",
    			returning="value")
    	public void afterReturningMethod(JoinPoint jp, Object value)
    	{
    		final Log log = LogFactory.getLog(jp.getTarget().getClass());
    		log.info("#########################################");
    		log.info("CALL TO : "+jp.getSignature().getName());
    		log.info(" RETURN : "+value.toString());
    	}
     
    	/**
             * 
             */
    	@AfterThrowing(
    			pointcut="execution(* services.domain.impl.*.*(..))",
    			throwing="exception")
    	public void afterThrowingException(JoinPoint jp, Throwable exception)
    	{
    		final Log log = LogFactory.getLog(jp.getTarget().getClass());
    		log.info("#########################################");
    		log.info("EXCEPTION IN : "+jp.getSignature().getName());
    		log.info("   EXCEPTION : "+exception.getMessage());
    	}
    }
    Apparement l'appel au "before" se passe bien mais le "after" plante : toute l'exécution est freezée.
    J'ai très certainement foiré quelque chose dans mon implémentation mais j'avoue ne pas comprendre où.
    Est-ce que quelqu'un peut m'aider à comprendre ce qui ne va pas ?

    Merci d'avance.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 57
    Points : 53
    Points
    53
    Par défaut
    Je me permets de relancer : personne n'a jamais eu de problème dans la mise en place d'un logger par cette méthode ?

    Pour plus d'information : l'appli est à base de spring et hibernate. Dans les logs je me suis rendu compte que quelque chose freezait au moment de faire un "delete from..." dans mes tests unitaires dbunit.

    Par contre j'aurais du mal à penser que le problème vient d'hibernate parce que lorsque j'enlève l'aop sur mes méthodes du package services (qui encapsule les appels à la dao et aux méthodes hibernate), ça fonctionne sans problème.

    Du coup je reste assez dubitatif sur l'erreur d'autant plus que j'ai suivi à la lettre le guide de référence de spring pour mettre en place mon aop mais malgré ça, il y a toujours des couaks qui trainent ; et googler l'erreur ne sert à rien...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur blockchain
    Inscrit en
    Avril 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur blockchain
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2003
    Messages : 20
    Points : 33
    Points
    33
    Par défaut
    Et ton log d'erreur ???

    Citation Envoyé par BerBiX Voir le message
    Je me permets de relancer : personne n'a jamais eu de problème dans la mise en place d'un logger par cette méthode ?

    Pour plus d'information : l'appli est à base de spring et hibernate. Dans les logs je me suis rendu compte que quelque chose freezait au moment de faire un "delete from..." dans mes tests unitaires dbunit.

    Par contre j'aurais du mal à penser que le problème vient d'hibernate parce que lorsque j'enlève l'aop sur mes méthodes du package services (qui encapsule les appels à la dao et aux méthodes hibernate), ça fonctionne sans problème.

    Du coup je reste assez dubitatif sur l'erreur d'autant plus que j'ai suivi à la lettre le guide de référence de spring pour mettre en place mon aop mais malgré ça, il y a toujours des couaks qui trainent ; et googler l'erreur ne sert à rien...

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Avril 2005
    Messages : 27
    Points : 31
    Points
    31
    Par défaut Mise en place d'un AOP
    En ce qui me concerne, pour mettre en place une classe Aspect j'ai fait ceci :

    Classe Aspect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    @Component
    public class ClasseAop {
        // Logger
        private static final Logger logger = Logger.getLogger( ClasseAop.class );
     
       // Cette méthode est appelée à chaque fois (et avant) une méthode
       public void before( JoinPoint joinPoint ) {
       }
     
       // Cette méthode est appelée à chaque fois (et après) une méthode
       public void afterReturning( StaticPart staticPart, Object result ) {
       }
    }
    Declarée dans le fichier de configuration de la façon suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!--	Debut de la configuration AOP -->
    <aop:aspectj-autoproxy/>
      <aop:config>
        <aop:pointcut id="pointCut" expression="execution( public * org.***.****.****.ClasseASurveiller.*(..) )"/>
        <aop:aspect id="classeAspect" ref="classeAop">
          <aop:before method="before"  pointcut-ref="pointCut"/>
          <aop:after-returning method="afterReturning" returning="result" pointcut-ref="pointCut"/>
        </aop:aspect>
    </aop:config>
     
    <bean id="classeAop" class="org.***.***.***.ClasseAop"/>
    <!--	Fin de la configuration AOP -->
    Tu peux le faire aussi avec les annotations.
    En espérant que cela pourra t'aider

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/04/2012, 16h55
  2. Problème de mise en place JavaBeans
    Par popy67 dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 28/08/2009, 18h48
  3. Problème de mise en place channel bonding
    Par juanito7 dans le forum Réseau
    Réponses: 9
    Dernier message: 11/06/2007, 14h04
  4. Problème de mise en place de datasource pour Hibernate
    Par K-Kaï dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 27/07/2006, 10h41
  5. Problème de mise en place de la log4j
    Par pitit777 dans le forum Logging
    Réponses: 2
    Dernier message: 28/03/2006, 15h17

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