2010-03-28 7 views
2

J'ai une méthode dans ma classe uniquement à des fins de test:Utilisez Java Annotation ne pas exécuter une méthode

private void printOut(String msg, Object value) 
{ 
    System.out.println(msg + value); 
} 

Il est une méthode d'emballage pour System.out.println(); Donc j'espère, avec l'utilisation de Annotation, je peux choisir de ne pas exécuter cette méthode pendant l'environnement productif tout en gardant ces sorties de diagnostic prêtes si je dois revenir à l'environnement de débogage.

Quelle annotation dois-je mettre en tête du nom de la méthode?

+0

La méthode n'exécutera pas à moins qu'il est appelé par une autre méthode. –

+4

Pourquoi n'utilisez-vous pas l'infrastructure de journalisation, telle que Log4j ou java.util.logging? http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/overview.html – uthark

+0

@uthark: Je suis assez nouveau pour faire progresser Java alors je ne savais pas que certains framework/utils de journalisation existent. .. Certainement je vais aller vérifier, thx! –

Répondre

11

Comme je l'ai indiqué ci-dessus, vous devriez utiliser la journalisation. Voici quelques-uns des avantages de l'utilisation dans l'exploitation d'une application:

  • Logging peut générer des informations détaillées sur le fonctionnement d'une application.
  • Une fois ajoutée à une application, la consignation ne nécessite aucune intervention humaine.
  • Les journaux d'application peuvent être sauvegardés et étudiés ultérieurement.
  • Si elles sont suffisamment détaillées et correctement formatées, les journaux d'application peuvent fournir des pistes d'audit.
  • En détectant les erreurs qui peuvent ne pas être signalées aux utilisateurs, la journalisation peut aider le personnel à résoudre les problèmes.
  • En capturant des messages très détaillés et spécifiés par le programmeur, la journalisation peut aider les programmeurs à effectuer le débogage.
  • La journalisation peut être un outil de débogage dans lequel les débogueurs ne sont pas disponibles, ce qui est souvent le cas avec les applications multithread ou distribuées.
  • La journalisation reste avec l'application et peut être utilisée à tout moment de l'exécution de l'application.

En savoir plus sur l'exploitation forestière here

Il y a beaucoup de cadres d'exploitation forestière en Java:

  1. Log4j
  2. java.util.logging
  3. Logback.

Et plusieurs façades, qui fournit l'abstraction pour différents cadres d'exploitation:

  1. slf4j
  2. commons-logging
+0

C'est juste ce que je veux. J'aurais dû faire bon usage de ces utilitaires plutôt que de réinventer la roue ... –

+0

+1 - Pour une réponse plus simple et plus efficace. :) –

8

Une solution consiste à utiliser AspectJ pour ce faire, car vous pouvez contrôler le comportement en fonction des annotations.

Voici un tutoriel sur la façon d'utiliser les annotations comme points de jonction:

http://www.eclipse.org/aspectj//doc/next/adk15notebook/annotations-pointcuts-and-advice.html

Ce que vous pouvez faire est d'avoir:

@DebugMessage 
private void printOut(String msg, Object value) 
{ } 

Ensuite, dans votre aspect que vous pourriez avoir la aspect faire l'appel println. De cette façon, en production, l'aspect n'est pas inclus, mais si vous avez besoin de l'activer, ajoutez simplement l'aspect, même au code de production, pour obtenir un débogage.

+0

Merci pour cette astuce, je vais y aller et voir si je peux implémenter ceci :) –

+1

Cela répond définitivement à la question initiale, mais je pense que l'utilisation d'un cadre de journalisation est en réalité une meilleure solution ultime pour la situation à portée de main. –

+0

@Peter Recore - Voir mon commentaire en haut, je suis d'accord avec vous, en fonction des exigences de l'OP. –

3

Vous devriez vraiment suivre les conseils d'uthark et utiliser un cadre de diagraphie.

Ceux-ci ont été spécialement conçus pour cette situation.

Faire quelque chose de «génial» causera probablement des problèmes plus tard.

Questions connexes