Search in sources :

Example 1 with LoggingClientBuilder

use of com.linecorp.armeria.client.logging.LoggingClientBuilder in project zipkin by openzipkin.

the class HttpClientFactory method configureHttpLogging.

void configureHttpLogging(HttpLogging httpLogging, ClientOptionsBuilder options) {
    if (httpLogging == HttpLogging.NONE)
        return;
    LoggingClientBuilder loggingBuilder = LoggingClient.builder().requestLogLevel(LogLevel.INFO).successfulResponseLogLevel(LogLevel.INFO).requestHeadersSanitizer((ctx, headers) -> {
        if (!headers.contains(HttpHeaderNames.AUTHORIZATION)) {
            return headers;
        }
        // TODO(anuraaga): Add unit tests after https://github.com/line/armeria/issues/2220
        return headers.toBuilder().set(HttpHeaderNames.AUTHORIZATION, "****").build();
    });
    switch(httpLogging) {
        case HEADERS:
            loggingBuilder.contentSanitizer((ctx, unused) -> "");
            break;
        case BASIC:
            loggingBuilder.contentSanitizer((ctx, unused) -> "");
            loggingBuilder.headersSanitizer((ctx, unused) -> HttpHeaders.of());
            break;
        case BODY:
        default:
            break;
    }
    options.decorator(loggingBuilder.newDecorator());
    if (httpLogging == HttpLogging.BODY) {
        options.decorator(ContentPreviewingClient.newDecorator(Integer.MAX_VALUE));
    }
}
Also used : LoggingClientBuilder(com.linecorp.armeria.client.logging.LoggingClientBuilder)

Example 2 with LoggingClientBuilder

use of com.linecorp.armeria.client.logging.LoggingClientBuilder in project curiostack by curioswitch.

the class LoggingModule method loggingClient.

@Provides
@Singleton
static Function<HttpClient, LoggingClient> loggingClient(LoggingConfig config, @RequestHeaderSanitizer Set<Consumer<HttpHeadersBuilder>> requestHeaderSanitizers, @ResponseHeaderSanitizer Set<Consumer<HttpHeadersBuilder>> responseHeaderSanitizers) {
    LoggingClientBuilder builder = LoggingClient.builder();
    configureLoggingDecorator(builder, config, requestHeaderSanitizers, responseHeaderSanitizers);
    if (config.getLogAllClientRequests()) {
        builder.requestLogLevel(LogLevel.INFO);
        builder.successfulResponseLogLevel(LogLevel.INFO);
    }
    return builder::build;
}
Also used : LoggingClientBuilder(com.linecorp.armeria.client.logging.LoggingClientBuilder) Singleton(javax.inject.Singleton) Provides(dagger.Provides)

Example 3 with LoggingClientBuilder

use of com.linecorp.armeria.client.logging.LoggingClientBuilder in project zipkin by openzipkin.

the class ElasticsearchExtension method computeStorageBuilder.

Builder computeStorageBuilder() {
    WebClientBuilder builder = WebClient.builder(baseUrl()).factory(ClientFactory.builder().useHttp2Preface(false).build());
    builder.decorator((delegate, ctx, req) -> {
        final HttpResponse response = delegate.execute(ctx, req);
        return HttpResponse.from(response.aggregate().thenApply(r -> {
            // ES will return a 'warning' response header when using deprecated api, detect this and
            // fail early so we can do something about it.
            // Example usage: https://github.com/elastic/elasticsearch/blob/3049e55f093487bb582a7e49ad624961415ba31c/x-pack/plugin/security/src/internalClusterTest/java/org/elasticsearch/integration/IndexPrivilegeIntegTests.java#L559
            final String warningHeader = r.headers().get("warning");
            if (warningHeader != null) {
                if (IGNORE_THESE_WARNINGS.stream().noneMatch(p -> p.matcher(warningHeader).find())) {
                    throw new IllegalArgumentException("Detected usage of deprecated API for request " + req.toString() + ":\n" + warningHeader);
                }
            }
            // Convert AggregatedHttpResponse back to HttpResponse.
            return r.toHttpResponse();
        }));
    });
    // com.linecorp.armeria.client.logging
    if (Boolean.parseBoolean(System.getenv("ES_DEBUG"))) {
        ClientOptionsBuilder options = ClientOptions.builder();
        LoggingClientBuilder loggingBuilder = LoggingClient.builder().requestLogLevel(LogLevel.INFO).successfulResponseLogLevel(LogLevel.INFO);
        options.decorator(loggingBuilder.newDecorator());
        options.decorator(ContentPreviewingClient.newDecorator(Integer.MAX_VALUE));
        builder.options(options.build());
    }
    WebClient client = builder.build();
    return ElasticsearchStorage.newBuilder(new ElasticsearchStorage.LazyHttpClient() {

        @Override
        public WebClient get() {
            return client;
        }

        @Override
        public void close() {
            client.endpointGroup().close();
        }

        @Override
        public String toString() {
            return client.uri().toString();
        }
    }).index("zipkin-test").flushOnWrites(true);
}
Also used : Wait(org.testcontainers.containers.wait.strategy.Wait) WebClientBuilder(com.linecorp.armeria.client.WebClientBuilder) Builder(zipkin2.elasticsearch.ElasticsearchStorage.Builder) ClientFactory(com.linecorp.armeria.client.ClientFactory) HttpResponse(com.linecorp.armeria.common.HttpResponse) LogLevel(com.linecorp.armeria.common.logging.LogLevel) Logger(org.slf4j.Logger) ContentPreviewingClient(com.linecorp.armeria.client.logging.ContentPreviewingClient) TestAbortedException(org.opentest4j.TestAbortedException) LoggerFactory(org.slf4j.LoggerFactory) ClientOptions(com.linecorp.armeria.client.ClientOptions) ExtensionContext(org.junit.jupiter.api.extension.ExtensionContext) LoggingClient(com.linecorp.armeria.client.logging.LoggingClient) TestInfo(org.junit.jupiter.api.TestInfo) ElasticsearchStorage(zipkin2.elasticsearch.ElasticsearchStorage) LoggingClientBuilder(com.linecorp.armeria.client.logging.LoggingClientBuilder) IGNORE_THESE_WARNINGS(zipkin2.elasticsearch.integration.IgnoredDeprecationWarnings.IGNORE_THESE_WARNINGS) ClientOptionsBuilder(com.linecorp.armeria.client.ClientOptionsBuilder) BeforeAllCallback(org.junit.jupiter.api.extension.BeforeAllCallback) Slf4jLogConsumer(org.testcontainers.containers.output.Slf4jLogConsumer) AfterAllCallback(org.junit.jupiter.api.extension.AfterAllCallback) WebClient(com.linecorp.armeria.client.WebClient) GenericContainer(org.testcontainers.containers.GenericContainer) DockerImageName.parse(org.testcontainers.utility.DockerImageName.parse) WebClientBuilder(com.linecorp.armeria.client.WebClientBuilder) ElasticsearchStorage(zipkin2.elasticsearch.ElasticsearchStorage) HttpResponse(com.linecorp.armeria.common.HttpResponse) ClientOptionsBuilder(com.linecorp.armeria.client.ClientOptionsBuilder) WebClient(com.linecorp.armeria.client.WebClient) LoggingClientBuilder(com.linecorp.armeria.client.logging.LoggingClientBuilder)

Aggregations

LoggingClientBuilder (com.linecorp.armeria.client.logging.LoggingClientBuilder)3 ClientFactory (com.linecorp.armeria.client.ClientFactory)1 ClientOptions (com.linecorp.armeria.client.ClientOptions)1 ClientOptionsBuilder (com.linecorp.armeria.client.ClientOptionsBuilder)1 WebClient (com.linecorp.armeria.client.WebClient)1 WebClientBuilder (com.linecorp.armeria.client.WebClientBuilder)1 ContentPreviewingClient (com.linecorp.armeria.client.logging.ContentPreviewingClient)1 LoggingClient (com.linecorp.armeria.client.logging.LoggingClient)1 HttpResponse (com.linecorp.armeria.common.HttpResponse)1 LogLevel (com.linecorp.armeria.common.logging.LogLevel)1 Provides (dagger.Provides)1 Singleton (javax.inject.Singleton)1 TestInfo (org.junit.jupiter.api.TestInfo)1 AfterAllCallback (org.junit.jupiter.api.extension.AfterAllCallback)1 BeforeAllCallback (org.junit.jupiter.api.extension.BeforeAllCallback)1 ExtensionContext (org.junit.jupiter.api.extension.ExtensionContext)1 TestAbortedException (org.opentest4j.TestAbortedException)1 Logger (org.slf4j.Logger)1 LoggerFactory (org.slf4j.LoggerFactory)1 GenericContainer (org.testcontainers.containers.GenericContainer)1