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 :

Configuration d'un aspect logging avec Spring2.0


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut Configuration d'un aspect logging avec Spring2.0
    Je débute avec la configuration d'AOP dans Spring 2 et j'essaie de configurer un aspect logging en suivant la documentation de référence et en utilisant les annotation d'AspectJ.

    Voilà ce que j'ai fait à ce stade:

    1- J'ai créé une classe SystemArchitecture pour enregistrer les pointcuts:
    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
     
    package com.mycompany.myapp.server.utilities;
     
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Pointcut;
     
    @Aspect public class SystemArchitecture {
     
      @Pointcut("within(com.mycompany..*")
      public void inAllApplication() {}
     
      @Pointcut("inBusinessLayer() && inPersistenceLayer() && inRemoteLayer() && inServiceLayer()")
      public void inAllLayers() {}
     
      @Pointcut("within(com.mycompany.myapp.server.business..*)")
      public void inBusinessLayer() {}
     
      @Pointcut("within(com.mycompany.myapp.server.persistence..*")
      public void inPersistenceLayer() {}
     
      @Pointcut("within(com.mycompany.myapp.server.remote..*")
      public void inRemoteLayer() {}
     
      @Pointcut("within(com.mycompany.myapp.server.service..*")
      public void inServiceLayer() {}
    }
    2- J'ai créé une 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
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    package com.mycompany.myapp.server.utilities.logging;
     
    import org.apache.log4j.Logger;
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.annotation.After;
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.AfterThrowing;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.springframework.core.Ordered;
     
    @Aspect public class ServerSideLogger
      implements Ordered {
     
      public ServerSideLogger() {}
     
      @After("com.mycompany.myapp.server.utilities.SystemArchitecture.inAllApplication()")
      public void logOperationEnd(JoinPoint logged) {
        getLog(logged).info("End of operation " + getLoggedOperationDescription(logged));
      }
     
      @AfterThrowing(
                     pointcut = "com.mycompany.myapp.server.utilities.SystemArchitecture.inAllApplication()",
                     throwing = "exception"
                    )
      public void logOperationFailure(JoinPoint logged,
                                      RuntimeException exception) {
        Logger log = getLog(logged);
        log.warn("Exception was thrown in " + getLoggedOperationDescription(logged));
        if (log.isDebugEnabled()) {
          log.debug(exception.getMessage(), exception);
        }
      }
     
      @Before("com.mycompany.myapp.server.utilities.SystemArchitecture.inAllApplication()")
      public void logOperationStart(JoinPoint logged) {
        getLog(logged).info("Entering operation " + getLoggedOperationDescription(logged));
      }
     
      @AfterReturning(
                      pointcut = "com.mycompany.myapp.server.utilities.SystemArchitecture.inAllApplication()",
                      returning = "returnValue"
                     )
      public void logOperationSuccess(JoinPoint logged,
                                      Object returnValue) {
        Logger log = getLog(logged);
        log.info("Successful operation " + getLoggedOperationDescription(logged));
        if (log.isTraceEnabled()) {
          log.trace("Operation returned: " + returnValue);
        }
      }
     
      public int getOrder() {
        return order;
      }
     
      public void setOrder(int order) {
        this.order = order;
      }
     
      private Logger getLog(JoinPoint logged) {
        return Logger.getLogger(logged.getTarget().getClass());
      }
     
      private String getLoggedOperationDescription(JoinPoint logged) {
        return logged.toLongString();
      }
     
      private int order;
    }
    3- Comme j'ai plusieurs fichiers de config Spring qui sont tous chargés dans une application web, j'ai ajouté l'élément suivant à l'un de ces fichiers:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <aop:aspectj-autoproxy/>
    Et d'après ce que j'ai compris de la documentation, c'est tout ce qu'il faut faire pour que ça fonctionne. Malheureusement, quand je fais tourner mon application et que j'appelle quelques services, rien n'est loggé. Du coup j'ai ajouté quelques points d'arrêts dans Eclipse sur mes méthodes d'aspect, mais elles semblent ne jamais être appelées.
    Alors de toute évidence j'ai oublié quelque chose d'important.

    Est-ce que quelqu'un peut m'aider là-dessus?

  2. #2
    Membre chevronné
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Par défaut
    Bonjour,

    L'utilisation de AspectJ nécessite une phase de compilation supplémentaire. Il faut donc le télécharger pour marcher votre programme (http://www.eclipse.org/aspectj/). Si vous utilisez eclipse vous pouvez utiliser AJDT (http://www.eclipse.org/ajdt/downloads/) qui vous fait cette compilation à la volée. Deplus elle vous indique les aspects et les fonctions qui sont visées par des points de coupures.

Discussions similaires

  1. [configuration] JBoss 4.0.2 avec EJB, JNDI, JSP/Servlets
    Par ran_hery dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 28/08/2006, 14h49
  2. remplacer la génération de log avec UTL_FILE.
    Par yrogerg_d dans le forum Oracle
    Réponses: 1
    Dernier message: 30/06/2006, 15h10
  3. [Configuration] nombre de scripts limité avec buffers de sorties
    Par alcor dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 08/04/2006, 22h59
  4. configuration virtual hosts sous windows avec apache
    Par ceriise dans le forum Apache
    Réponses: 3
    Dernier message: 05/03/2006, 20h57
  5. Configuration des droits pour samba avec ftp et www
    Par Alkmie dans le forum Réseau
    Réponses: 2
    Dernier message: 07/11/2004, 13h50

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