9
votes

Apache CXF LoggingInInterceptor est obsolète - que faut-il utiliser à la place?

J'utilise Apache CXF avec Spring Boot avec l'aide du plugin cxf-spring-boot-starter-jaxws de la version 3.2.7.

Mon intention est de personnaliser les LoggingInterceptors mais quand J'ai créé la classe ci-dessous:

public class CustomLoggingInInterceptor extends org.apache.cxf.interceptor.LoggingInInterceptor {}

mais mon IDE supprime le LoggingInInterceptor se plaignant qu'il est obsolète avec l'explication

utilisez plutôt le module de journalisation rt / features / logging

Alors comment personnaliser l'intercepteur de journalisation à l'aide de ce module?


1 commentaires

J'ai ajouté un peu plus de détails à la réponse. Je pense qu'ils devraient être suffisants.


3 Réponses :


22
votes

Ce que ce message vous dit, c'est d'utiliser le module Apache CXF Advanced logging feature .

Sa dépendance est (dernière version)

factory.getInInterceptors().add(new MyCustomInterceptor());

À l'intérieur, vous trouverez un org.apache.cxf.ext.logging.LoggingInInterceptor comparable ( link )


Je ne suis pas un utilisateur CXF, mais je suppose que vous devrez interagir avec un JaxWsProxyFactoryBean .
N'oubliez pas que vous devez utiliser la même version pour tous les modules CXF.

Après avoir mis la main dessus, vous pouvez faire

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-features-logging</artifactId>
    <version>3.3.0</version>
    <scope>test</scope>
</dependency>


6 commentaires

Merci pour la réponse. Cependant, l'API a changé, semble-t-il. Je vais devoir trouver comment remplacer les méthodes supprimées telles que formatLoggingMessage () . N'hésitez pas à partager plus d'informations sur la migration vers ce nouveau module. À votre santé


@dashboard recherchez PrintWriterEventSender et au code source si LoggingInInterceptor github.com/apache/cxf/blob/master/rt/features/logging/src/ ma‌ en /…


@dashboard regarde également le deuxième constructeur et la dernière ligne de LoggingInInterceptor # handleMessage


Pour quiconque se demande comment l'utiliser à partir d'une configuration Spring XML, voici un exemple: cxf.apache.org/docs/… Fondamentalement, il faut définir dans le < code> jaxws: section fonctionnalités .


THX. trouvé votre réponse après une journée entière de recherche. Et il est nécessaire d'ajouter une seule dépendance ...


@Filomat Je connais ce sentiment: P Heureux que cela ait été utile.



10
votes

Fondamentalement, 4 choses sont nécessaires pour mettre à jour de l'ancien vers le nouveau journal cxf (rt / features / logging).

Tout d'abord, définissez la fonction de journalisation:

public class CustomEventLogSender extends Slf4jVerboseEventSender {
    @Override
    protected String getLogMessage(LogEvent event) {
        String logMessage = super.getLogMessage(event);
        return CustomMasker.mask(logMessage);
    }
}

Vous n'avez plus besoin des intercepteurs (au cas où vous les utilisiez, supprimez-les):

factory.getInInterceptors (). add (nouveau CustomMaskedLoggingInInterceptor ()); factory.getOutInterceptors (). add (nouveau CustomMaskedLoggingOutInterceptor ());

Deuxièmement, créez votre LoggingFeature:

public class CustomLoggingFeature extends org.apache.cxf.ext.logging.LoggingFeature {
    public CustomLoggingFeature() {
        super();
        this.setSender(new CustomEventLogSender());
    }
}

Troisièmement, créez votre EventLogSender:

final JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setFeatures(Collections.singletonList(new CustomLoggingFeature()));

Quatrièmement, créez une classe CustomMasker dans laquelle vous avez votre propre logique de manipulation de chaîne pour masquer les informations souhaitées.

Faites-moi savoir si cela a fonctionné!


3 commentaires

Merci pour la contribution, essaiera dès que le temps sera venu. Si cela fonctionne, on vous répondra à la deuxième partie de la question, mais je ne peux choisir qu'une seule réponse. Peut-être pouvez-vous mettre à jour la réponse afin qu'elle comporte deux sections une pour l'existant et une pour votre réponse?


Eh bien, le fait est qu'avec la nouvelle journalisation cxf, vous ne personnalisez pas la classe LoggingInInterceptor , vous faites plutôt les choses que j'ai décrites ci-dessus. Ou peut-être n'ai-je pas compris votre commentaire? Quelles informations manquent exactement?


Il ne manque aucune information, je pensais que ce serait mieux si vous deviez être si gentil de mettre à jour la réponse acceptée afin qu'elle contienne aussi votre part, c'est tout :)



0
votes

Lorsque vous avez cette dépendance mentionnée ailleurs:

LoggingFeature loggingFeature = new LoggingFeature();
loggingFeature.setPrettyLogging(true);
loggingFeature.setVerbose(true);
loggingFeature.setLogMultipart(true);
factory.getFeatures().add(loggingFeature);

et lorsque vous travaillez avec un JaxWsProxyFactoryBean , vous pouvez configurer cette fabrique, par exemple comme ceci:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-features-logging</artifactId>
    <version>${org.apache.cxf.version}</version>
</dependency>


0 commentaires