2017-07-13 1 views
0

J'ai écrit le service Web RESTful. Les technologies que j'utilise: Glassfish 4, JDK 8 & Jersey (partie de glassfish).Comment activer la journalisation de suivi jersey dans glassfish

Pour résoudre un problème, je souhaite activer la consignation de trace effectuée par les classes jersey. Par exemple ci-dessous est le code d'enregistrement dans la méthode de MessageBodyFactory

final TracingLogger tracingLogger = TracingLogger.getInstance(propertiesDelegate); 
    MessageBodyWriter<T> selected = null; 
    final Iterator<MbwModel> iterator = writers.iterator(); 
    while (iterator.hasNext()) { 
     final MbwModel model = iterator.next(); 
     if (model.isWriteable(c, t, as, mediaType)) { 
      selected = (MessageBodyWriter<T>) model.provider; 
      tracingLogger.log(MsgTraceEvent.MBW_SELECTED, selected); 
      break; 
     } 
     tracingLogger.log(MsgTraceEvent.MBW_NOT_WRITEABLE, model.provider); 
    } 

    if (tracingLogger.isLogEnabled(MsgTraceEvent.MBW_SKIPPED)) { 
     while (iterator.hasNext()) { 
      final MbwModel model = iterator.next(); 
      tracingLogger.log(MsgTraceEvent.MBW_SKIPPED, model.provider); 
     } 
    } 

_getMessageBodyWriter() Comment puis-je activer cette journalisation par fichier logging.properties?

+0

Regardez dans la console d'administration, il y a une section pour l'administration et la configuration des services d'exploitation pour toutes les composantes de GlassFish. Consultez également la documentation: [À propos de la journalisation] (https://docs.oracle.com/cd/E18930_01/html/821-2416/abluk.html#scrolltoc) – perissf

+0

Je suppose que vous faites référence au lien Paramètres de l'enregistreur sur la configuration de l'instance. Est-ce que ce n'est pas une question de jersey? Il est possible d'ajouter des enregistreurs dans l'onglet "Niveaux de journal". Quels enregistreurs dois-je ajouter pour obtenir les messages de journal ci-dessus dans le fichier server.log? –

Répondre

1

Voici un exemple:

@ApplicationPath("rest") 
public class ApplicationConfig extends ResourceConfig { 

    public ApplicationConfig() { 
     super(); 
     register(LoggingFilter.class); 
     // register your rest classes here 
     property("jersey.config.server.tracing.type", "ALL"); 
     property("jersey.config.server.tracing.threshold", "VERBOSE"); 
    } 
} 

Définissez les paramètres suivants dans votre logging.properties:

org.glassfish.jersey.tracing.level=ALL 

Cela permettra d'activer la journalisation du suivi jersey via les en-têtes HTTP et server.log, vous pouvez utiliser quelque chose comme Firebug ou Console développeur Chrome pour voir les en-têtes.

En affectant jersey.config.server.tracing.type à ALL, vous activez la consignation de trace pour chaque requête. Vous pouvez également le définir à ON_DEMAND, puis vous devez ajouter un en-tête nommé X-Jersey-Tracing-Accept (valeur n'a pas d'importance) à votre demande de connexion.

Il y a une limite pour les en-têtes par demande dans Glassfish, si vous atteignez cette limite avec l'enregistrement, vous pouvez le faire via asadmin:

set configs.config.server-config.network-config.protocols.protocol.http-listener-1.http.max-response-headers=1000 

Voir aussi:

+0

J'ai suivi les étapes et essayé d'activer la connexion dans une application glassfish intégrée (à des fins de débogage), mais je ne vois pas les journaux de suivi. S'il vous plaît jeter un oeil sur le fichier logging.properties - https://pastebin.com/2ECzuUxJ. J'ai essayé de mettre un point de débogage dans ApplicationConfig mais il semble que le constructeur n'est pas appelé. Quel pourrait être le problème? –

+0

Votre fichier logging.properties a l'air correct. Pouvez-vous voir les journaux de suivi dans les en-têtes HTTP? Avez-vous déjà utilisé ApplicationConfig ou l'avez-vous ajouté uniquement en fonction de ma réponse? – unwichtich

+0

Je n'ai pas ajouté l'en-tête HTTP puisque j'ai défini ALL pour "jersey.config.server.tracing.type". A propos de ApplicationConfig, oui, je l'ai seulement ajouté pour activer la journalisation en fonction de votre réponse. Il n'y a aucun autre besoin fonctionnel de celui-ci. –