как динамически регистрировать SOAP-запрос / ответ с использованием log4j2 в отдельных файлах журнала - PullRequest
0 голосов
/ 29 мая 2019

Необходимо написать отдельные файлы журнала на основе apikey, используя log4j2 для SOAP-запроса и ответа. мы на стороне клиента или потребляем SOAP webservice.

Я могу написать отдельные файлы журнала на основе apikey для запроса и ответа REST, но не знаю, как это сделать для запроса и ответа SOAP

код для записи журналов в отдельных файлах журналов выглядит следующим образом

Необходимо написать отдельные файлы журнала на основе apikey, используя log4j2 для SOAP-запроса и ответа. мы на стороне клиента или потребляем SOAP webservice.

Я могу написать отдельные файлы журнала на основе apikey для запроса и ответа REST, но не знаю, как это сделать для запроса и ответа SOAP

код для записи журналов в отдельные файлы журналов выглядит следующим образом:

public final class SPRestLog4j2Logger extends org.apache.logging.log4j.core.async.AsyncLogger {

    private SPRestLog4j2Logger(LoggerContext context, String name, MessageFactory msgFactory) {
        super(context, name, msgFactory);
        this.setLevel(Level.ALL);
    }

    public static SPRestLog4j2Logger configureCategoryLogger(String apiKey, String loggingPath) {
        LoggerContext context = new AsyncLoggerContext(apiKey);
        MessageFactory msgFactory = new FormattedMessageFactory();
        SPRestLog4j2Logger logger = new SPRestLog4j2Logger(context, apiKey, msgFactory);

        RandomAccessFileAppender appender = RandomAccessFileAppender
            .createAppender(
                loggingPath + apiKey + ".log", // filename
                "true", // append
                "file_appender-" + apiKey, // name
                "true", // immediateFlush
                "", // bufferSize
                "true", // ignoreExceptions
                PatternLayout.createLayout(
                    "%-5p - [%d] - [%t] - [%l]  : %m%n", null,
                    null, Charset.forName("UTF-8"), true, true, apiKey, apiKey), null, // filter
                "false", // advertise
                null, // advertiseURI
                null // config
            );

        ConsoleAppender consoleAppender = ConsoleAppender.createAppender(
            PatternLayout.createLayout(
                "%-5p - [%d] - [%t] - [%l]  : %m%n", null,
                null, Charset.forName("UTF-8"), true, true, apiKey, apiKey), null, null,
            "Console", null, null);

        appender.start();
        consoleAppender.stop();
        logger.getContext().getConfiguration().getLoggerConfig(apiKey)
            .addAppender(appender, Level.TRACE, null);
        logger.getContext().getConfiguration().getLoggerConfig(apiKey)
            .addAppender(consoleAppender, Level.OFF, null);
        return logger;
    }
}

код, используемый для записи SOAP-запроса / ответа в файл, выглядит следующим образом:

SalesCustomerSelectService customerService = new SalesCustomerSelectService(wsdlURL, SERVICE_NAME);
        SalesCustomerSelect customerPort = customerService.getPort(SERVICE_NAME1, SalesCustomerSelect.class);
        if (isLogging()) {
            Client client = ClientProxy.getClient(customerPort);
            client.getInInterceptors().add(new LoggingInInterceptor());
            client.getOutInterceptors().add(new LoggingOutInterceptor());
        }

Но не уверен, как динамически записывать запрос / ответ SOAP в отдельные файлы журнала.

1 Ответ

1 голос
/ 31 мая 2019

Вы можете написать свой собственный Interceptor, в котором вы регистрируете запрос / ответ SOAP в соответствующем файле журнала.

Похоже, вы используете Apache CXF.Документация содержит раздел о написании пользовательских перехватчиков .Кроме того, вы можете оформить заказ, следуя примеру .

...