Comment répondre aux besoins de            logs en production avec LOG4J ?Fabien Baligand                                 ...
Cliquez pour ajouter un titre         Besoins de logs en production    • Cliquez pour ajouter un plan            Debugging...
Cliquez pour ajouter un titre         Solutions    • Cliquez pour ajouter un plan            Debugging               Mettr...
Cliquez pour ajouter un titre         Résultat obtenu    • Cliquez pour ajouter *un planwhere id=?;48          INFO;john;1...
Cliquez pour ajouter un titre         Résultat obtenu (entrelacement)    • Cliquez pour ajouter *un planwhere id=?;48     ...
Cliquez pour ajouter un titre         Résultat obtenu (cas d’erreur)    • Cliquez pour ajouter *un planwhere id=?;48      ...
Cliquez pour ajouter un titre         Mise en oeuvre technique    • Cliquez pour (au sens Servlet 2.3) :            Un fil...
Cliquezdu filtre ajouter un titre           Code pour             // on lance le chrono    • Cliquez pour ajouter un plan ...
Cliquezdu filtre ajouter un titre          Code pour (suite)                  // On passe la main à la suite de la FilterC...
Cliquez pour ajouter un titre          Configuration LOG4J          log4j.rootCategory=ERROR,console     • Cliquez pour aj...
Cliquez pour ajouter un titre          Log des appels Back-End     • Cliquez pour ajouter un :             Plusieurs possi...
Cliquezcontextes ?          Quels pour ajouter un titre     • Cliquez pour ajouter un plan             Tous les contextes ...
Prochain SlideShare
Chargement dans…5
×

Comment répondre aux besoins de log en production avec log4j

2 275 vues

Publié le

Présente comment on peut répondre aux besoins de logs en production, concernant l'analyse de problèmes isolés ou la mesure des performances, grâce à la corrélation de logs, simplifiée avec log4j.

Publié dans : Technologie, Business
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
2 275
Sur SlideShare
0
Issues des intégrations
0
Intégrations
58
Actions
Partages
0
Téléchargements
31
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Comment répondre aux besoins de log en production avec log4j

  1. 1. Comment répondre aux besoins de logs en production avec LOG4J ?Fabien Baligand Copyright©Sfeir (D.GEN.315.V2)
  2. 2. Cliquez pour ajouter un titre Besoins de logs en production • Cliquez pour ajouter un plan Debugging Être capable de retrouver un problème remonté par un client dans les logs Être capable de retrouver l’ensemble du contexte qui a amené au problème remonté et à l’erreur constatée Mesure de la performance et de la charge : Connaissance des performances et de la charge Statistiques et mesures de l’évolution Détection des éléments non performants2
  3. 3. Cliquez pour ajouter un titre Solutions • Cliquez pour ajouter un plan Debugging Mettre en place de la corrélation de logs, au moyen de LOG4J, en préfixant chaque ligne de log par : le login de l’utilisateur connecté un identifiant unique de requête HTTP Mesure de la performance et de la charge : Log du temps d’exécution de chaque requête HTTP entrante Log du temps d’exécution de chaque requête envoyée aux Back-Ends accédés (Base de Données, Annuaires LDAP, Web Services, …) Ecrire chaque ligne de log au format CSV3
  4. 4. Cliquez pour ajouter un titre Résultat obtenu • Cliquez pour ajouter *un planwhere id=?;48 INFO;john;103;NEWREQUEST;/Compte/Consulter INFO;john;103;BDD1;select from user INFO;john;103;WebService1;getListeDesComptes;79 INFO;john;103;HTTPREQUEST;/Compte/Consulter;1354
  5. 5. Cliquez pour ajouter un titre Résultat obtenu (entrelacement) • Cliquez pour ajouter *un planwhere id=?;48 INFO;john;103;NEWREQUEST;/Compte/Consulter INFO;john;103;BDD1;select from user INFO;kate;104;NEWREQUEST;/Compte/Consulter INFO;john;103;WebService1;getListeDesComptes;79 INFO;kate;104;BDD1;select * from user where id=?;43 INFO;john;103;HTTPREQUEST;/Compte/Consulter;135 INFO;kate;104;WebService1;getListeDesComptes;74 INFO;kate;104;HTTPREQUEST;/Compte/Consulter;1255
  6. 6. Cliquez pour ajouter un titre Résultat obtenu (cas d’erreur) • Cliquez pour ajouter *un planwhere id=?;48 INFO;john;103;NEWREQUEST;/Compte/Consulter INFO;john;103;BDD1;select from user ERROR;john;103;WebService1;getListeDesComptes;2530 <stacktrace> ERROR;john;103;HTTPREQUEST;/Compte/Consulter;25856
  7. 7. Cliquez pour ajouter un titre Mise en oeuvre technique • Cliquez pour (au sens Servlet 2.3) : Un filtre ajouter un plan en frontal de l’application web, injectant les informations de corrélation à LOG4J (login + requestId), et loggant les appels HTTP Une configuration LOG4J : préfixant chaque ligne de log par les informations de corrélation (login + requestId)7
  8. 8. Cliquezdu filtre ajouter un titre Code pour // on lance le chrono • Cliquez pour ajouter un plan long executionTime = System.currentTimeMillis(); try { // on assigne le numéro unique de la requête HTTP String requestId = getRequestId(); // on récupère le login de lutilisateur connecté String login = (String) session.getAttribute("LOGIN"); // on renseigne à Log4J le numéro de requete HTTP et le login de lutilisateur MDC.put("requestId", requestId); MDC.put("login", login); // on logge le début de traitement de la requête HTTP LOG.info("NEWREQUEST;" + request.getRequestURI());8
  9. 9. Cliquezdu filtre ajouter un titre Code pour (suite) // On passe la main à la suite de la FilterChain • Cliquez pour ajouter un plan filterChain.doFilter(request, response); // On logge le temps dexécution executionTime = System.currentTimeMillis() - executionTime; LOG.info("HTTPREQUEST;" + request.getRequestURI() + ";" + executionTime); } catch (Exception e) { // on logge lerreur executionTime = System.currentTimeMillis() - executionTime; LOG.error("HTTPREQUEST ;" + request.getRequestURI() + ";" + executionTime, e); } finally { // on libère le ThreadLocal MDC.remove("requestId"); MDC.remove("login"); }9
  10. 10. Cliquez pour ajouter un titre Configuration LOG4J log4j.rootCategory=ERROR,console • Cliquez pour ajouter un plan log4j.logger.filter.LogCorrelationFilter=INFO log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%p;%X{login};%X{requestId};%m%n10
  11. 11. Cliquez pour ajouter un titre Log des appels Back-End • Cliquez pour ajouter un : Plusieurs possibilités plan Utilisation d’un composant central pour les appels Back-End loggant tous les appels Utilisation d’un dynamic proxy Utilisation d’un decorator Utilisation d’AOP11
  12. 12. Cliquezcontextes ? Quels pour ajouter un titre • Cliquez pour ajouter un plan Tous les contextes sont possibles : Application web Web Service Portail & Portlets Le principe peut tout à fait être mis en place pour des usages autres que web12

×