aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuang Zhu <guangzhu@google.com>2021-12-19 21:16:36 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-12-19 21:16:36 +0000
commitd1b7045c937ee5c0301f779f9190093e86879d44 (patch)
treea708999e461874826c05dd1c7f54c2c790e7e9de
parentc39db226b639f07b14500067aa79a286c49f94ef (diff)
parentef47135fc4f2941ee0fa09ded43eee0057d0d773 (diff)
downloadopencensus-java-android13-qpr3-release.tar.gz
Remove log4j and its references from opencensus am: 8fd12cb94e am: 1109620313 am: 1a0247bd40 am: ef47135fc4t_frc_odp_330442040t_frc_odp_330442000t_frc_con_330443020t_frc_cbr_330443000t_frc_ase_330444010t_frc_art_330443060t_frc_adb_330444000android-13.0.0_r83android-13.0.0_r82android-13.0.0_r81android-13.0.0_r80android-13.0.0_r79android-13.0.0_r78android-13.0.0_r77android-13.0.0_r76android-13.0.0_r75android-13.0.0_r74android-13.0.0_r73android-13.0.0_r72android-13.0.0_r71android-13.0.0_r70android-13.0.0_r69android-13.0.0_r68android-13.0.0_r67android-13.0.0_r66android-13.0.0_r65android-13.0.0_r64android-13.0.0_r63android-13.0.0_r62android-13.0.0_r61android-13.0.0_r60android-13.0.0_r59android-13.0.0_r58android-13.0.0_r57android-13.0.0_r56android-13.0.0_r55android-13.0.0_r54android-13.0.0_r53android-13.0.0_r52android-13.0.0_r51android-13.0.0_r50android-13.0.0_r49android-13.0.0_r48android-13.0.0_r47android-13.0.0_r46android-13.0.0_r45android-13.0.0_r44android-13.0.0_r43android-13.0.0_r42android-13.0.0_r41android-13.0.0_r40android-13.0.0_r39android-13.0.0_r38android-13.0.0_r37android-13.0.0_r36android-13.0.0_r35android-13.0.0_r34android-13.0.0_r33android-13.0.0_r32android-13.0.0_r30android-13.0.0_r29android-13.0.0_r28android-13.0.0_r27android-13.0.0_r24android-13.0.0_r23android-13.0.0_r22android-13.0.0_r21android-13.0.0_r20android-13.0.0_r19android-13.0.0_r18android-13.0.0_r17android-13.0.0_r16aml_uwb_331910010aml_uwb_331820070aml_uwb_331613010aml_uwb_331611010aml_uwb_331410010aml_uwb_331310030aml_uwb_331115000aml_uwb_331015040aml_uwb_330810010aml_tz4_332714070aml_tz4_332714050aml_tz4_332714010aml_tz4_331910000aml_tz4_331314030aml_tz4_331314020aml_tz4_331314010aml_tz4_331012050aml_tz4_331012040aml_tz4_331012000aml_go_wif_330911000aml_go_uwb_330912000aml_go_tz4_330912000aml_go_tet_330914010aml_go_swc_330913000aml_go_sta_330911000aml_go_sdk_330810000aml_go_sch_330911000aml_go_res_330912000aml_go_per_330912000aml_go_odp_330913000aml_go_odp_330912000aml_go_neu_330912000aml_go_net_330913000aml_go_mpr_330912000aml_go_ase_330913000aml_go_ads_330915100aml_go_ads_330915000aml_go_ads_330913000aml_go_adb_330913000aml_ase_331311020aml_ase_331112000aml_ase_331011020aml_ads_331920180aml_ads_331814200aml_ads_331710270aml_ads_331611190aml_ads_331511020aml_ads_331418080aml_ads_331131000main-16kandroid13-qpr3-s9-releaseandroid13-qpr3-s8-releaseandroid13-qpr3-s7-releaseandroid13-qpr3-s6-releaseandroid13-qpr3-s5-releaseandroid13-qpr3-s4-releaseandroid13-qpr3-s3-releaseandroid13-qpr3-s2-releaseandroid13-qpr3-s14-releaseandroid13-qpr3-s13-releaseandroid13-qpr3-s12-releaseandroid13-qpr3-s11-releaseandroid13-qpr3-s10-releaseandroid13-qpr3-s1-releaseandroid13-qpr3-releaseandroid13-qpr3-c-s8-releaseandroid13-qpr3-c-s7-releaseandroid13-qpr3-c-s6-releaseandroid13-qpr3-c-s5-releaseandroid13-qpr3-c-s4-releaseandroid13-qpr3-c-s3-releaseandroid13-qpr3-c-s2-releaseandroid13-qpr3-c-s12-releaseandroid13-qpr3-c-s11-releaseandroid13-qpr3-c-s10-releaseandroid13-qpr3-c-s1-releaseandroid13-qpr2-s9-releaseandroid13-qpr2-s8-releaseandroid13-qpr2-s7-releaseandroid13-qpr2-s6-releaseandroid13-qpr2-s5-releaseandroid13-qpr2-s3-releaseandroid13-qpr2-s2-releaseandroid13-qpr2-s12-releaseandroid13-qpr2-s11-releaseandroid13-qpr2-s10-releaseandroid13-qpr2-s1-releaseandroid13-qpr2-releaseandroid13-qpr2-b-s1-releaseandroid13-qpr1-s8-releaseandroid13-qpr1-s7-releaseandroid13-qpr1-s6-releaseandroid13-qpr1-s5-releaseandroid13-qpr1-s4-releaseandroid13-qpr1-s3-releaseandroid13-qpr1-s2-releaseandroid13-qpr1-s1-releaseandroid13-qpr1-releaseandroid13-mainline-uwb-releaseandroid13-mainline-tzdata4-releaseandroid13-mainline-go-wifi-releaseandroid13-mainline-go-uwb-releaseandroid13-mainline-go-tzdata4-releaseandroid13-mainline-go-tethering-releaseandroid13-mainline-go-sdkext-releaseandroid13-mainline-go-scheduling-releaseandroid13-mainline-go-resolv-releaseandroid13-mainline-go-permission-releaseandroid13-mainline-go-os-statsd-releaseandroid13-mainline-go-odp-releaseandroid13-mainline-go-neuralnetworks-releaseandroid13-mainline-go-networking-releaseandroid13-mainline-go-mediaprovider-releaseandroid13-mainline-go-media-swcodec-releaseandroid13-mainline-go-appsearch-releaseandroid13-mainline-go-adservices-releaseandroid13-mainline-go-adbd-releaseandroid13-mainline-appsearch-releaseandroid13-mainline-adservices-releaseandroid13-frc-odp-releaseandroid13-frc-conscrypt-releaseandroid13-frc-cellbroadcast-releaseandroid13-frc-art-releaseandroid13-frc-adbd-releaseandroid13-devandroid13-d4-s2-releaseandroid13-d4-s1-releaseandroid13-d4-releaseandroid13-d3-s1-releaseandroid13-d2-releaseaml_tz4_332714010
Original change: https://android-review.googlesource.com/c/platform/external/opencensus-java/+/1927168 Change-Id: I04aed30b35d36a3bdef9c01125175f53b7199297
-rw-r--r--all/build.gradle2
-rw-r--r--build.gradle3
-rw-r--r--buildscripts/import-control.xml6
-rw-r--r--checker-framework/stubs/log4j.astub8
-rw-r--r--contrib/log_correlation/log4j2/README.md88
-rw-r--r--contrib/log_correlation/log4j2/build.gradle26
-rw-r--r--contrib/log_correlation/log4j2/src/main/java/io/opencensus/contrib/logcorrelation/log4j2/ContextDataUtils.java212
-rw-r--r--contrib/log_correlation/log4j2/src/main/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusTraceContextDataInjector.java177
-rw-r--r--contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/AbstractOpenCensusLog4jLogCorrelationTest.java97
-rw-r--r--contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusLog4jLogCorrelationAllSpansTest.java167
-rw-r--r--contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusLog4jLogCorrelationNoSpansTest.java86
-rw-r--r--contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusLog4jLogCorrelationSampledSpansTest.java89
-rw-r--r--contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusTraceContextDataInjectorTest.java207
-rw-r--r--contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/TestSpan.java46
-rw-r--r--settings.gradle3
15 files changed, 0 insertions, 1217 deletions
diff --git a/all/build.gradle b/all/build.gradle
index 83ffb69e..d46f2f61 100644
--- a/all/build.gradle
+++ b/all/build.gradle
@@ -13,7 +13,6 @@ def subprojects = [
project(':opencensus-contrib-grpc-util'),
project(':opencensus-contrib-grpc-metrics'),
project(':opencensus-contrib-http-util'),
- project(':opencensus-contrib-log-correlation-log4j2'),
project(':opencensus-contrib-log-correlation-stackdriver'),
project(':opencensus-contrib-monitored-resource-util'),
project(':opencensus-contrib-spring'),
@@ -40,7 +39,6 @@ def subprojects_javadoc = [
project(':opencensus-contrib-grpc-util'),
project(':opencensus-contrib-grpc-metrics'),
project(':opencensus-contrib-http-util'),
- project(':opencensus-contrib-log-correlation-log4j2'),
project(':opencensus-contrib-log-correlation-stackdriver'),
project(':opencensus-contrib-monitored-resource-util'),
project(':opencensus-contrib-spring'),
diff --git a/build.gradle b/build.gradle
index dcb006ce..07751679 100644
--- a/build.gradle
+++ b/build.gradle
@@ -158,7 +158,6 @@ subprojects {
googleAuthVersion = '0.11.0'
googleCloudBetaVersion = '0.64.0-beta'
googleCloudGaVersion = '1.46.0'
- log4j2Version = '2.11.1'
signalfxVersion = '0.0.39'
springBootVersion = '1.5.15.RELEASE'
springCloudVersion = '1.3.4.RELEASE'
@@ -183,7 +182,6 @@ subprojects {
google_auth: "com.google.auth:google-auth-library-credentials:${googleAuthVersion}",
google_cloud_logging: "com.google.cloud:google-cloud-logging:${googleCloudGaVersion}",
google_cloud_trace: "com.google.cloud:google-cloud-trace:${googleCloudBetaVersion}",
- log4j2: "org.apache.logging.log4j:log4j-core:${log4j2Version}",
zipkin_reporter: "io.zipkin.reporter2:zipkin-reporter:${zipkinReporterVersion}",
zipkin_urlconnection: "io.zipkin.reporter2:zipkin-sender-urlconnection:${zipkinReporterVersion}",
jaeger_reporter: "com.uber.jaeger:jaeger-core:${jaegerReporterVersion}",
@@ -425,7 +423,6 @@ subprojects {
'opencensus-contrib-grpc-metrics',
'opencensus-contrib-grpc-util',
'opencensus-contrib-http-util',
- 'opencensus-contrib-log-correlation-log4j2',
'opencensus-contrib-log-correlation-stackdriver',
'opencensus-contrib-monitored-resource-util',
'opencensus-contrib-spring',
diff --git a/buildscripts/import-control.xml b/buildscripts/import-control.xml
index d545878a..6dffe25a 100644
--- a/buildscripts/import-control.xml
+++ b/buildscripts/import-control.xml
@@ -94,12 +94,6 @@ General guidelines on imports:
<allow pkg="io.opencensus.tags"/>
<allow pkg="io.opencensus.trace"/>
</subpackage>
- <subpackage name="logcorrelation.log4j2">
- <allow pkg="io.opencensus.contrib.logcorrelation.log4j2"/>
- <allow pkg="io.opencensus.trace"/>
- <disallow pkg="org.apache.logging.log4j.core.impl"/>
- <allow pkg="org.apache.logging.log4j"/>
- </subpackage>
<subpackage name="logcorrelation.stackdriver">
<allow pkg="com.google.cloud"/>
<allow pkg="io.opencensus.trace"/>
diff --git a/checker-framework/stubs/log4j.astub b/checker-framework/stubs/log4j.astub
deleted file mode 100644
index 20b3240e..00000000
--- a/checker-framework/stubs/log4j.astub
+++ /dev/null
@@ -1,8 +0,0 @@
-import org.checkerframework.checker.nullness.qual.Nullable;
-
-package org.apache.logging.log4j;
-
-class ThreadContext {
- @Nullable
- static ReadOnlyThreadContextMap getThreadContextMap();
-}
diff --git a/contrib/log_correlation/log4j2/README.md b/contrib/log_correlation/log4j2/README.md
deleted file mode 100644
index a5bf1449..00000000
--- a/contrib/log_correlation/log4j2/README.md
+++ /dev/null
@@ -1,88 +0,0 @@
-# OpenCensus Log4j 2 Log Correlation
-
-This subproject is currently experimental, so it may be redesigned or removed in the future. It
-will remain experimental until we have a specification for a log correlation feature in
-[opencensus-specs](https://github.com/census-instrumentation/opencensus-specs/)
-(issue [#123](https://github.com/census-instrumentation/opencensus-specs/issues/123)).
-
-The `opencensus-contrib-log-correlation-log4j2` artifact provides a
-[Log4j 2](https://logging.apache.org/log4j/2.x/)
-[`ContextDataInjector`](https://logging.apache.org/log4j/2.x/manual/extending.html#Custom_ContextDataInjector)
-that automatically adds tracing data to the context of Log4j
-[`LogEvent`](https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/LogEvent.html)s.
-The class name is
-`OpenCensusTraceContextDataInjector`. `OpenCensusTraceContextDataInjector` adds the current trace
-ID, span ID, and sampling decision to each `LogEvent`, so that they can be accessed with
-[`LogEvent.getContextData()`](https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/LogEvent.html#getContextData())
-or included in a layout.
-
-See
-https://github.com/census-ecosystem/opencensus-experiments/tree/master/java/log_correlation/log4j2
-for a demo that uses this library to correlate logs and traces in Stackdriver.
-
-## Instructions
-
-### Add the dependencies to your project
-
-For Maven add to your `pom.xml`:
-```xml
-<dependencies>
- <dependency>
- <groupId>io.opencensus</groupId>
- <artifactId>opencensus-contrib-log-correlation-log4j2</artifactId>
- <version>0.16.1</version>
- <scope>runtime</scope>
- </dependency>
-</dependencies>
-```
-
-For Gradle add to your dependencies:
-```groovy
-runtime 'io.opencensus:opencensus-contrib-log-correlation-log4j2:0.16.1'
-```
-
-### Configure the `OpenCensusTraceContextDataInjector`
-
-#### Specify the `ContextDataInjector` override
-
-Override Log4j's default `ContextDataInjector` by setting the system property
-`log4j2.contextDataInjector` to the full name of the class,
-`io.opencensus.contrib.logcorrelation.log4j2.OpenCensusTraceContextDataInjector`.
-
-#### Choose when to add tracing data to log events
-
-The following system property controls the decision to add tracing data from the current span to a
-log event:
-
-`io.opencensus.contrib.logcorrelation.log4j2.OpenCensusTraceContextDataInjector.spanSelection`
-
-The allowed values are:
-
-* `ALL_SPANS`: adds tracing data to all log events (default)
-
-* `NO_SPANS`: disables the log correlation feature
-
-* `SAMPLED_SPANS`: adds tracing data to log events when the current span is sampled
-
-### Add the tracing data to log entries
-
-`opencensus-contrib-log-correlation-log4j2` adds the following key-value pairs to the `LogEvent`
-context:
-
-* `opencensusTraceId` - the lowercase base16 encoding of the current trace ID
-* `opencensusSpanId` - the lowercase base16 encoding of the current span ID
-* `opencensusTraceSampled` - the sampling decision of the current span ("true" or "false")
-
-These values can be accessed from layouts with
-[Context Map Lookup](http://logging.apache.org/log4j/2.x/manual/lookups.html#ContextMapLookup). For
-example, the trace ID can be accessed with `$${ctx:opencensusTraceId}`. The values can also be
-accessed with the `X` conversion character in
-[`PatternLayout`](http://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout), for
-example, `%X{opencensusTraceId}`.
-
-See an example Log4j configuration file in the demo:
-https://github.com/census-ecosystem/opencensus-experiments/tree/master/java/log_correlation/log4j2/src/main/resources/log4j2.xml
-
-### Java Versions
-
-Java 6 or above is required for using this artifact.
diff --git a/contrib/log_correlation/log4j2/build.gradle b/contrib/log_correlation/log4j2/build.gradle
deleted file mode 100644
index 4a4a6ebc..00000000
--- a/contrib/log_correlation/log4j2/build.gradle
+++ /dev/null
@@ -1,26 +0,0 @@
-description = 'OpenCensus Log4j 2 Log Correlation'
-
-apply plugin: 'java'
-
-dependencies {
- compile project(':opencensus-api'),
- libraries.log4j2
-
- testCompile libraries.guava
-
- signature "org.codehaus.mojo.signature:java16:+@signature"
-}
-
-compileTestJava {
- sourceCompatibility = "1.7"
- targetCompatibility = "1.7"
-}
-
-test {
- systemProperties['log4j2.contextDataInjector'] =
- 'io.opencensus.contrib.logcorrelation.log4j2.OpenCensusTraceContextDataInjector'
-
- // Each test class should run in a separate JVM. See the comment in
- // AbstractOpenCensusLog4jLogCorrelationTest.
- forkEvery = 1
-}
diff --git a/contrib/log_correlation/log4j2/src/main/java/io/opencensus/contrib/logcorrelation/log4j2/ContextDataUtils.java b/contrib/log_correlation/log4j2/src/main/java/io/opencensus/contrib/logcorrelation/log4j2/ContextDataUtils.java
deleted file mode 100644
index dd32e448..00000000
--- a/contrib/log_correlation/log4j2/src/main/java/io/opencensus/contrib/logcorrelation/log4j2/ContextDataUtils.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright 2018, OpenCensus Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.opencensus.contrib.logcorrelation.log4j2;
-
-import io.opencensus.contrib.logcorrelation.log4j2.OpenCensusTraceContextDataInjector.SpanSelection;
-import io.opencensus.trace.Span;
-import io.opencensus.trace.SpanContext;
-import io.opencensus.trace.unsafe.ContextUtils;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.Immutable;
-import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.core.config.Property;
-import org.apache.logging.log4j.spi.ReadOnlyThreadContextMap;
-import org.apache.logging.log4j.util.BiConsumer;
-import org.apache.logging.log4j.util.ReadOnlyStringMap;
-import org.apache.logging.log4j.util.SortedArrayStringMap;
-import org.apache.logging.log4j.util.StringMap;
-import org.apache.logging.log4j.util.TriConsumer;
-
-// Implementation of the methods inherited from ContextDataInjector.
-//
-// This class uses "shareable" to mean that a method's return value can be passed to another
-// thread.
-final class ContextDataUtils {
- private ContextDataUtils() {}
-
- // The implementation of this method is based on the example in the Javadocs for
- // ContextDataInjector.injectContextData.
- static StringMap injectContextData(
- SpanSelection spanSelection, @Nullable List<Property> properties, StringMap reusable) {
- if (properties == null || properties.isEmpty()) {
- return shareableRawContextData(spanSelection);
- }
- // Context data has precedence over configuration properties.
- putProperties(properties, reusable);
- // TODO(sebright): The following line can be optimized. See
- // https://github.com/census-instrumentation/opencensus-java/pull/1422/files#r216425494.
- reusable.putAll(nonShareableRawContextData(spanSelection));
- return reusable;
- }
-
- private static void putProperties(Collection<Property> properties, StringMap stringMap) {
- for (Property property : properties) {
- stringMap.putValue(property.getName(), property.getValue());
- }
- }
-
- private static StringMap shareableRawContextData(SpanSelection spanSelection) {
- SpanContext spanContext = shouldAddTracingDataToLogEvent(spanSelection);
- return spanContext == null
- ? getShareableContextData()
- : getShareableContextAndTracingData(spanContext);
- }
-
- static ReadOnlyStringMap nonShareableRawContextData(SpanSelection spanSelection) {
- SpanContext spanContext = shouldAddTracingDataToLogEvent(spanSelection);
- return spanContext == null
- ? getNonShareableContextData()
- : getShareableContextAndTracingData(spanContext);
- }
-
- // This method returns the current span context iff tracing data should be added to the LogEvent.
- // It avoids getting the current span when the feature is disabled, for efficiency.
- @Nullable
- private static SpanContext shouldAddTracingDataToLogEvent(SpanSelection spanSelection) {
- switch (spanSelection) {
- case NO_SPANS:
- return null;
- case SAMPLED_SPANS:
- SpanContext spanContext = getCurrentSpanContext();
- if (spanContext.getTraceOptions().isSampled()) {
- return spanContext;
- } else {
- return null;
- }
- case ALL_SPANS:
- return getCurrentSpanContext();
- }
- throw new AssertionError("Unknown spanSelection: " + spanSelection);
- }
-
- private static StringMap getShareableContextData() {
- ReadOnlyThreadContextMap context = ThreadContext.getThreadContextMap();
-
- // Return a new object, since StringMap is modifiable.
- return context == null
- ? new SortedArrayStringMap(ThreadContext.getImmutableContext())
- : new SortedArrayStringMap(context.getReadOnlyContextData());
- }
-
- private static ReadOnlyStringMap getNonShareableContextData() {
- ReadOnlyThreadContextMap context = ThreadContext.getThreadContextMap();
- if (context != null) {
- return context.getReadOnlyContextData();
- } else {
- Map<String, String> contextMap = ThreadContext.getImmutableContext();
- return contextMap.isEmpty()
- ? UnmodifiableReadOnlyStringMap.EMPTY
- : new UnmodifiableReadOnlyStringMap(contextMap);
- }
- }
-
- private static StringMap getShareableContextAndTracingData(SpanContext spanContext) {
- ReadOnlyThreadContextMap context = ThreadContext.getThreadContextMap();
- SortedArrayStringMap stringMap;
- if (context == null) {
- stringMap = new SortedArrayStringMap(ThreadContext.getImmutableContext());
- } else {
- StringMap contextData = context.getReadOnlyContextData();
- stringMap = new SortedArrayStringMap(contextData.size() + 3);
- stringMap.putAll(contextData);
- }
- // TODO(sebright): Move the calls to TraceId.toLowerBase16() and SpanId.toLowerBase16() out of
- // the critical path by wrapping the trace and span IDs in objects that call toLowerBase16() in
- // their toString() methods, after there is a fix for
- // https://github.com/census-instrumentation/opencensus-java/issues/1436.
- stringMap.putValue(
- OpenCensusTraceContextDataInjector.TRACE_ID_CONTEXT_KEY,
- spanContext.getTraceId().toLowerBase16());
- stringMap.putValue(
- OpenCensusTraceContextDataInjector.SPAN_ID_CONTEXT_KEY,
- spanContext.getSpanId().toLowerBase16());
- stringMap.putValue(
- OpenCensusTraceContextDataInjector.TRACE_SAMPLED_CONTEXT_KEY,
- spanContext.getTraceOptions().isSampled() ? "true" : "false");
- return stringMap;
- }
-
- private static SpanContext getCurrentSpanContext() {
- Span span = ContextUtils.CONTEXT_SPAN_KEY.get();
- return span == null ? SpanContext.INVALID : span.getContext();
- }
-
- @Immutable
- private static final class UnmodifiableReadOnlyStringMap implements ReadOnlyStringMap {
- private static final long serialVersionUID = 0L;
-
- static final ReadOnlyStringMap EMPTY =
- new UnmodifiableReadOnlyStringMap(Collections.<String, String>emptyMap());
-
- private final Map<String, String> map;
-
- UnmodifiableReadOnlyStringMap(Map<String, String> map) {
- this.map = map;
- }
-
- @Override
- public boolean containsKey(String key) {
- return map.containsKey(key);
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public <V> void forEach(BiConsumer<String, ? super V> action) {
- for (Entry<String, String> entry : map.entrySet()) {
- action.accept(entry.getKey(), (V) entry.getValue());
- }
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public <V, S> void forEach(TriConsumer<String, ? super V, S> action, S state) {
- for (Entry<String, String> entry : map.entrySet()) {
- action.accept(entry.getKey(), (V) entry.getValue(), state);
- }
- }
-
- @Override
- @Nullable
- @SuppressWarnings({
- "unchecked",
- "TypeParameterUnusedInFormals" // This is an overridden method.
- })
- public <V> V getValue(String key) {
- return (V) map.get(key);
- }
-
- @Override
- public boolean isEmpty() {
- return map.isEmpty();
- }
-
- @Override
- public int size() {
- return map.size();
- }
-
- @Override
- public Map<String, String> toMap() {
- return map;
- }
- }
-}
diff --git a/contrib/log_correlation/log4j2/src/main/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusTraceContextDataInjector.java b/contrib/log_correlation/log4j2/src/main/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusTraceContextDataInjector.java
deleted file mode 100644
index 38b18826..00000000
--- a/contrib/log_correlation/log4j2/src/main/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusTraceContextDataInjector.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright 2018, OpenCensus Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.opencensus.contrib.logcorrelation.log4j2;
-
-import io.opencensus.common.ExperimentalApi;
-import java.util.List;
-import javax.annotation.Nullable;
-import org.apache.logging.log4j.core.ContextDataInjector;
-import org.apache.logging.log4j.core.Layout;
-import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.config.Property;
-import org.apache.logging.log4j.util.ReadOnlyStringMap;
-import org.apache.logging.log4j.util.StringMap;
-
-/**
- * A Log4j {@link ContextDataInjector} that adds OpenCensus tracing data to log events.
- *
- * <p>This class adds the following key-value pairs:
- *
- * <ul>
- * <li>{@value #TRACE_ID_CONTEXT_KEY} - the lowercase base16 encoding of the current trace ID
- * <li>{@value #SPAN_ID_CONTEXT_KEY} - the lowercase base16 encoding of the current span ID
- * <li>{@value #TRACE_SAMPLED_CONTEXT_KEY} - the sampling decision of the current span ({@code
- * "true"} or {@code "false"})
- * </ul>
- *
- * <p>The tracing data can be accessed with {@link LogEvent#getContextData} or included in a {@link
- * Layout}. For example, the following patterns could be used to include the tracing data with a <a
- * href="https://logging.apache.org/log4j/2.x/manual/layouts.html#Pattern_Layout">Pattern
- * Layout</a>:
- *
- * <ul>
- * <li><code>%X{opencensusTraceId}</code>
- * <li><code>%X{opencensusSpanId}</code>
- * <li><code>%X{opencensusTraceSampled}</code>
- * </ul>
- *
- * <p>This feature is currently experimental.
- *
- * @since 0.16
- * @see <a
- * href="https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/ContextDataInjector.html">org.apache.logging.log4j.core.ContextDataInjector</a>
- */
-@ExperimentalApi
-public final class OpenCensusTraceContextDataInjector implements ContextDataInjector {
- private static final SpanSelection DEFAULT_SPAN_SELECTION = SpanSelection.ALL_SPANS;
-
- /**
- * Context key for the current trace ID. The name is {@value}.
- *
- * @since 0.16
- */
- public static final String TRACE_ID_CONTEXT_KEY = "opencensusTraceId";
-
- /**
- * Context key for the current span ID. The name is {@value}.
- *
- * @since 0.16
- */
- public static final String SPAN_ID_CONTEXT_KEY = "opencensusSpanId";
-
- /**
- * Context key for the sampling decision of the current span. The name is {@value}.
- *
- * @since 0.16
- */
- public static final String TRACE_SAMPLED_CONTEXT_KEY = "opencensusTraceSampled";
-
- /**
- * Name of the property that defines the {@link SpanSelection}. The name is {@value}.
- *
- * @since 0.16
- */
- public static final String SPAN_SELECTION_PROPERTY_NAME =
- "io.opencensus.contrib.logcorrelation.log4j2."
- + "OpenCensusTraceContextDataInjector.spanSelection";
-
- private final SpanSelection spanSelection;
-
- /**
- * How to decide whether to add tracing data from the current span to a log entry.
- *
- * @since 0.16
- */
- public enum SpanSelection {
-
- /**
- * Never add tracing data to log entries. This constant disables the log correlation feature.
- *
- * @since 0.16
- */
- NO_SPANS,
-
- /**
- * Add tracing data to a log entry iff the current span is sampled.
- *
- * @since 0.16
- */
- SAMPLED_SPANS,
-
- /**
- * Always add tracing data to log entries, even when the current span is not sampled. This is
- * the default.
- *
- * @since 0.16
- */
- ALL_SPANS
- }
-
- /**
- * Returns the {@code SpanSelection} setting for this instance.
- *
- * @return the {@code SpanSelection} setting for this instance.
- * @since 0.16
- */
- public SpanSelection getSpanSelection() {
- return spanSelection;
- }
-
- /**
- * Constructor to be called by Log4j.
- *
- * <p>This constructor looks up the {@link SpanSelection} using the system property {@link
- * #SPAN_SELECTION_PROPERTY_NAME}.
- *
- * @since 0.16
- */
- public OpenCensusTraceContextDataInjector() {
- this(lookUpSpanSelectionProperty());
- }
-
- // visible for testing
- OpenCensusTraceContextDataInjector(SpanSelection spanSelection) {
- this.spanSelection = spanSelection;
- }
-
- private static SpanSelection lookUpSpanSelectionProperty() {
- String spanSelectionProperty = System.getProperty(SPAN_SELECTION_PROPERTY_NAME);
- return spanSelectionProperty == null || spanSelectionProperty.isEmpty()
- ? DEFAULT_SPAN_SELECTION
- : parseSpanSelection(spanSelectionProperty);
- }
-
- private static SpanSelection parseSpanSelection(String spanSelection) {
- try {
- return SpanSelection.valueOf(spanSelection);
- } catch (IllegalArgumentException e) {
- return DEFAULT_SPAN_SELECTION;
- }
- }
-
- // Note that this method must return an object that can be passed to another thread.
- @Override
- public StringMap injectContextData(@Nullable List<Property> properties, StringMap reusable) {
- return ContextDataUtils.injectContextData(spanSelection, properties, reusable);
- }
-
- // Note that this method does not need to return an object that can be passed to another thread.
- @Override
- public ReadOnlyStringMap rawContextData() {
- return ContextDataUtils.nonShareableRawContextData(spanSelection);
- }
-}
diff --git a/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/AbstractOpenCensusLog4jLogCorrelationTest.java b/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/AbstractOpenCensusLog4jLogCorrelationTest.java
deleted file mode 100644
index 93ad85e0..00000000
--- a/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/AbstractOpenCensusLog4jLogCorrelationTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2018, OpenCensus Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.opencensus.contrib.logcorrelation.log4j2;
-
-import io.opencensus.common.Function;
-import io.opencensus.common.Scope;
-import io.opencensus.contrib.logcorrelation.log4j2.OpenCensusTraceContextDataInjector.SpanSelection;
-import io.opencensus.trace.SpanContext;
-import io.opencensus.trace.Tracer;
-import io.opencensus.trace.Tracestate;
-import io.opencensus.trace.Tracing;
-import java.io.StringWriter;
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.core.Appender;
-import org.apache.logging.log4j.core.Logger;
-import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.StringLayout;
-import org.apache.logging.log4j.core.appender.WriterAppender;
-import org.apache.logging.log4j.core.layout.PatternLayout;
-
-/**
- * Superclass for all Log4j log correlation test classes.
- *
- * <p>The tests are split into multiple classes so that each one can be run with a different value
- * for the system property {@link OpenCensusTraceContextDataInjector#SPAN_SELECTION_PROPERTY_NAME}.
- * The property must be set when Log4j initializes a static variable, and running each test class in
- * a separate JVM causes the static variable to be reinitialized.
- */
-abstract class AbstractOpenCensusLog4jLogCorrelationTest {
- private static final Tracer tracer = Tracing.getTracer();
-
- static final String TEST_PATTERN =
- "traceId=%X{opencensusTraceId} spanId=%X{opencensusSpanId} "
- + "sampled=%X{opencensusTraceSampled} %-5level - %msg";
-
- static final Tracestate EMPTY_TRACESTATE = Tracestate.builder().build();
-
- private static Logger logger;
-
- // This method initializes Log4j after setting the SpanSelection, which means that Log4j
- // initializes a static variable with a ContextDataInjector that is constructed with the proper
- // SpanSelection. This method should be called from a @BeforeClass method in each subclass.
- static void initializeLog4j(SpanSelection spanSelection) {
- System.setProperty(
- OpenCensusTraceContextDataInjector.SPAN_SELECTION_PROPERTY_NAME, spanSelection.toString());
- logger = (Logger) LogManager.getLogger(AbstractOpenCensusLog4jLogCorrelationTest.class);
- }
-
- // Reconfigures Log4j using the given arguments and runs the function with the given SpanContext
- // in scope.
- String logWithSpanAndLog4jConfiguration(
- String log4jPattern, SpanContext spanContext, Function<Logger, Void> loggingFunction) {
- StringWriter output = new StringWriter();
- StringLayout layout = PatternLayout.newBuilder().withPattern(log4jPattern).build();
- Appender appender =
- WriterAppender.newBuilder()
- .setTarget(output)
- .setLayout(layout)
- .setName("TestAppender")
- .build();
- ((LoggerContext) LogManager.getContext(false)).updateLoggers();
- appender.start();
- logger.addAppender(appender);
- logger.setLevel(Level.ALL);
- try {
- logWithSpan(spanContext, loggingFunction, logger);
- return output.toString();
- } finally {
- logger.removeAppender(appender);
- }
- }
-
- private static void logWithSpan(
- SpanContext spanContext, Function<Logger, Void> loggingFunction, Logger logger) {
- Scope scope = tracer.withSpan(new TestSpan(spanContext));
- try {
- loggingFunction.apply(logger);
- } finally {
- scope.close();
- }
- }
-}
diff --git a/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusLog4jLogCorrelationAllSpansTest.java b/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusLog4jLogCorrelationAllSpansTest.java
deleted file mode 100644
index 355c9b67..00000000
--- a/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusLog4jLogCorrelationAllSpansTest.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright 2018, OpenCensus Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.opencensus.contrib.logcorrelation.log4j2;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import io.opencensus.common.Function;
-import io.opencensus.contrib.logcorrelation.log4j2.OpenCensusTraceContextDataInjector.SpanSelection;
-import io.opencensus.trace.SpanContext;
-import io.opencensus.trace.SpanId;
-import io.opencensus.trace.TraceId;
-import io.opencensus.trace.TraceOptions;
-import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.core.Logger;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/**
- * Tests for Log4j log correlation with {@link
- * OpenCensusTraceContextDataInjector#SPAN_SELECTION_PROPERTY_NAME} set to {@link
- * SpanSelection#ALL_SPANS}.
- */
-@RunWith(JUnit4.class)
-public final class OpenCensusLog4jLogCorrelationAllSpansTest
- extends AbstractOpenCensusLog4jLogCorrelationTest {
-
- @BeforeClass
- public static void setUp() {
- initializeLog4j(SpanSelection.ALL_SPANS);
- }
-
- @Test
- public void addSampledSpanToLogEntryWithAllSpans() {
- String log =
- logWithSpanAndLog4jConfiguration(
- TEST_PATTERN,
- SpanContext.create(
- TraceId.fromLowerBase16("b9718fe3d82d36fce0e6a1ada1c21db0"),
- SpanId.fromLowerBase16("75159dde8c503fee"),
- TraceOptions.builder().setIsSampled(true).build(),
- EMPTY_TRACESTATE),
- new Function<Logger, Void>() {
- @Override
- public Void apply(Logger logger) {
- logger.warn("message #1");
- return null;
- }
- });
- assertThat(log)
- .isEqualTo(
- "traceId=b9718fe3d82d36fce0e6a1ada1c21db0 spanId=75159dde8c503fee "
- + "sampled=true WARN - message #1");
- }
-
- @Test
- public void addNonSampledSpanToLogEntryWithAllSpans() {
- String log =
- logWithSpanAndLog4jConfiguration(
- TEST_PATTERN,
- SpanContext.create(
- TraceId.fromLowerBase16("cd7061dfa9d312cdcc42edab3feab51b"),
- SpanId.fromLowerBase16("117d42d4c7acd066"),
- TraceOptions.builder().setIsSampled(false).build(),
- EMPTY_TRACESTATE),
- new Function<Logger, Void>() {
- @Override
- public Void apply(Logger logger) {
- logger.info("message #2");
- return null;
- }
- });
- assertThat(log)
- .isEqualTo(
- "traceId=cd7061dfa9d312cdcc42edab3feab51b spanId=117d42d4c7acd066 sampled=false INFO "
- + "- message #2");
- }
-
- @Test
- public void addBlankSpanToLogEntryWithAllSpans() {
- String log =
- logWithSpanAndLog4jConfiguration(
- TEST_PATTERN,
- SpanContext.INVALID,
- new Function<Logger, Void>() {
- @Override
- public Void apply(Logger logger) {
- logger.fatal("message #3");
- return null;
- }
- });
- assertThat(log)
- .isEqualTo(
- "traceId=00000000000000000000000000000000 spanId=0000000000000000 sampled=false FATAL "
- + "- message #3");
- }
-
- @Test
- public void preserveOtherKeyValuePairs() {
- String log =
- logWithSpanAndLog4jConfiguration(
- "%X{opencensusTraceId} %X{myTestKey} %-5level - %msg",
- SpanContext.create(
- TraceId.fromLowerBase16("c95329bb6b7de41afbc51a231c128f97"),
- SpanId.fromLowerBase16("bf22ea74d38eddad"),
- TraceOptions.builder().setIsSampled(true).build(),
- EMPTY_TRACESTATE),
- new Function<Logger, Void>() {
- @Override
- public Void apply(Logger logger) {
- String key = "myTestKey";
- ThreadContext.put(key, "myTestValue");
- try {
- logger.error("message #4");
- } finally {
- ThreadContext.remove(key);
- }
- return null;
- }
- });
- assertThat(log).isEqualTo("c95329bb6b7de41afbc51a231c128f97 myTestValue ERROR - message #4");
- }
-
- @Test
- public void overwriteExistingTracingKey() {
- String log =
- logWithSpanAndLog4jConfiguration(
- TEST_PATTERN,
- SpanContext.create(
- TraceId.fromLowerBase16("18e4ae44273a0c44e0c9ea4380792c66"),
- SpanId.fromLowerBase16("199a7e16daa000a7"),
- TraceOptions.builder().setIsSampled(true).build(),
- EMPTY_TRACESTATE),
- new Function<Logger, Void>() {
- @Override
- public Void apply(Logger logger) {
- ThreadContext.put(
- OpenCensusTraceContextDataInjector.TRACE_ID_CONTEXT_KEY, "existingTraceId");
- try {
- logger.error("message #5");
- } finally {
- ThreadContext.remove(OpenCensusTraceContextDataInjector.TRACE_ID_CONTEXT_KEY);
- }
- return null;
- }
- });
- assertThat(log)
- .isEqualTo(
- "traceId=18e4ae44273a0c44e0c9ea4380792c66 spanId=199a7e16daa000a7 "
- + "sampled=true ERROR - message #5");
- }
-}
diff --git a/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusLog4jLogCorrelationNoSpansTest.java b/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusLog4jLogCorrelationNoSpansTest.java
deleted file mode 100644
index 1205924e..00000000
--- a/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusLog4jLogCorrelationNoSpansTest.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2018, OpenCensus Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.opencensus.contrib.logcorrelation.log4j2;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import io.opencensus.common.Function;
-import io.opencensus.contrib.logcorrelation.log4j2.OpenCensusTraceContextDataInjector.SpanSelection;
-import io.opencensus.trace.SpanContext;
-import io.opencensus.trace.SpanId;
-import io.opencensus.trace.TraceId;
-import io.opencensus.trace.TraceOptions;
-import org.apache.logging.log4j.core.Logger;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/**
- * Tests for Log4j log correlation with {@link
- * OpenCensusTraceContextDataInjector#SPAN_SELECTION_PROPERTY_NAME} set to {@link
- * SpanSelection#NO_SPANS}.
- */
-@RunWith(JUnit4.class)
-public final class OpenCensusLog4jLogCorrelationNoSpansTest
- extends AbstractOpenCensusLog4jLogCorrelationTest {
-
- @BeforeClass
- public static void setUp() {
- initializeLog4j(SpanSelection.NO_SPANS);
- }
-
- @Test
- public void doNotAddSampledSpanToLogEntryWithNoSpans() {
- String log =
- logWithSpanAndLog4jConfiguration(
- TEST_PATTERN,
- SpanContext.create(
- TraceId.fromLowerBase16("03d2ada98f6eb8330605a45a88c7e67d"),
- SpanId.fromLowerBase16("ce5b1cf09fe58bcb"),
- TraceOptions.builder().setIsSampled(true).build(),
- EMPTY_TRACESTATE),
- new Function<Logger, Void>() {
- @Override
- public Void apply(Logger logger) {
- logger.trace("message #1");
- return null;
- }
- });
- assertThat(log).isEqualTo("traceId= spanId= sampled= TRACE - message #1");
- }
-
- @Test
- public void doNotAddNonSampledSpanToLogEntryWithNoSpans() {
- String log =
- logWithSpanAndLog4jConfiguration(
- TEST_PATTERN,
- SpanContext.create(
- TraceId.fromLowerBase16("09664283d189791de5218ffe3be88d54"),
- SpanId.fromLowerBase16("a7203a50089a4029"),
- TraceOptions.builder().setIsSampled(false).build(),
- EMPTY_TRACESTATE),
- new Function<Logger, Void>() {
- @Override
- public Void apply(Logger logger) {
- logger.warn("message #2");
- return null;
- }
- });
- assertThat(log).isEqualTo("traceId= spanId= sampled= WARN - message #2");
- }
-}
diff --git a/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusLog4jLogCorrelationSampledSpansTest.java b/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusLog4jLogCorrelationSampledSpansTest.java
deleted file mode 100644
index bbce4135..00000000
--- a/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusLog4jLogCorrelationSampledSpansTest.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2018, OpenCensus Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.opencensus.contrib.logcorrelation.log4j2;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import io.opencensus.common.Function;
-import io.opencensus.contrib.logcorrelation.log4j2.OpenCensusTraceContextDataInjector.SpanSelection;
-import io.opencensus.trace.SpanContext;
-import io.opencensus.trace.SpanId;
-import io.opencensus.trace.TraceId;
-import io.opencensus.trace.TraceOptions;
-import org.apache.logging.log4j.core.Logger;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/**
- * Tests for Log4j log correlation with {@link
- * OpenCensusTraceContextDataInjector#SPAN_SELECTION_PROPERTY_NAME} set to {@link
- * SpanSelection#SAMPLED_SPANS}.
- */
-@RunWith(JUnit4.class)
-public final class OpenCensusLog4jLogCorrelationSampledSpansTest
- extends AbstractOpenCensusLog4jLogCorrelationTest {
-
- @BeforeClass
- public static void setUp() {
- initializeLog4j(SpanSelection.SAMPLED_SPANS);
- }
-
- @Test
- public void addSampledSpanToLogEntryWithSampledSpans() {
- String log =
- logWithSpanAndLog4jConfiguration(
- TEST_PATTERN,
- SpanContext.create(
- TraceId.fromLowerBase16("0af7a7bef890695f1c5e85a8e7290164"),
- SpanId.fromLowerBase16("d3f07c467ec2fbb2"),
- TraceOptions.builder().setIsSampled(true).build(),
- EMPTY_TRACESTATE),
- new Function<Logger, Void>() {
- @Override
- public Void apply(Logger logger) {
- logger.error("message #1");
- return null;
- }
- });
- assertThat(log)
- .isEqualTo(
- "traceId=0af7a7bef890695f1c5e85a8e7290164 spanId=d3f07c467ec2fbb2 sampled=true ERROR "
- + "- message #1");
- }
-
- @Test
- public void doNotAddNonSampledSpanToLogEntryWithSampledSpans() {
- String log =
- logWithSpanAndLog4jConfiguration(
- TEST_PATTERN,
- SpanContext.create(
- TraceId.fromLowerBase16("9e09b559ebb8f7f7ed7451aff68cf441"),
- SpanId.fromLowerBase16("0fc9ef54c50a1816"),
- TraceOptions.builder().setIsSampled(false).build(),
- EMPTY_TRACESTATE),
- new Function<Logger, Void>() {
- @Override
- public Void apply(Logger logger) {
- logger.debug("message #2");
- return null;
- }
- });
- assertThat(log).isEqualTo("traceId= spanId= sampled= DEBUG - message #2");
- }
-}
diff --git a/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusTraceContextDataInjectorTest.java b/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusTraceContextDataInjectorTest.java
deleted file mode 100644
index 3b704058..00000000
--- a/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/OpenCensusTraceContextDataInjectorTest.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright 2018, OpenCensus Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.opencensus.contrib.logcorrelation.log4j2;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import com.google.common.collect.Lists;
-import io.opencensus.common.Scope;
-import io.opencensus.contrib.logcorrelation.log4j2.OpenCensusTraceContextDataInjector.SpanSelection;
-import io.opencensus.trace.SpanContext;
-import io.opencensus.trace.SpanId;
-import io.opencensus.trace.TraceId;
-import io.opencensus.trace.TraceOptions;
-import io.opencensus.trace.Tracer;
-import io.opencensus.trace.Tracestate;
-import io.opencensus.trace.Tracing;
-import java.util.Collections;
-import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.core.config.Property;
-import org.apache.logging.log4j.util.SortedArrayStringMap;
-import org.apache.logging.log4j.util.StringMap;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/** Tests for {@link OpenCensusTraceContextDataInjector}. */
-@RunWith(JUnit4.class)
-public final class OpenCensusTraceContextDataInjectorTest {
- static final Tracestate EMPTY_TRACESTATE = Tracestate.builder().build();
-
- private final Tracer tracer = Tracing.getTracer();
-
- @Test
- @SuppressWarnings("TruthConstantAsserts")
- public void spanSelectionPropertyName() {
- assertThat(OpenCensusTraceContextDataInjector.SPAN_SELECTION_PROPERTY_NAME)
- .isEqualTo(OpenCensusTraceContextDataInjector.class.getName() + ".spanSelection");
- }
-
- @Test
- public void traceIdKey() {
- assertThat(OpenCensusTraceContextDataInjector.TRACE_ID_CONTEXT_KEY)
- .isEqualTo("opencensusTraceId");
- }
-
- @Test
- public void spanIdKey() {
- assertThat(OpenCensusTraceContextDataInjector.SPAN_ID_CONTEXT_KEY)
- .isEqualTo("opencensusSpanId");
- }
-
- @Test
- public void traceSampledKey() {
- assertThat(OpenCensusTraceContextDataInjector.TRACE_SAMPLED_CONTEXT_KEY)
- .isEqualTo("opencensusTraceSampled");
- }
-
- @Test
- public void spanSelectionDefaultIsAllSpans() {
- assertThat(new OpenCensusTraceContextDataInjector().getSpanSelection())
- .isEqualTo(SpanSelection.ALL_SPANS);
- }
-
- @Test
- public void setSpanSelectionWithSystemProperty() {
- try {
- System.setProperty(
- OpenCensusTraceContextDataInjector.SPAN_SELECTION_PROPERTY_NAME, "NO_SPANS");
- assertThat(new OpenCensusTraceContextDataInjector().getSpanSelection())
- .isEqualTo(SpanSelection.NO_SPANS);
- } finally {
- System.clearProperty(OpenCensusTraceContextDataInjector.SPAN_SELECTION_PROPERTY_NAME);
- }
- }
-
- @Test
- public void useDefaultValueForInvalidSpanSelection() {
- try {
- System.setProperty(
- OpenCensusTraceContextDataInjector.SPAN_SELECTION_PROPERTY_NAME,
- "INVALID_SPAN_SELECTION");
- assertThat(new OpenCensusTraceContextDataInjector().getSpanSelection())
- .isEqualTo(SpanSelection.ALL_SPANS);
- } finally {
- System.clearProperty(OpenCensusTraceContextDataInjector.SPAN_SELECTION_PROPERTY_NAME);
- }
- }
-
- @Test
- public void insertConfigurationProperties() {
- assertThat(
- new OpenCensusTraceContextDataInjector(SpanSelection.ALL_SPANS)
- .injectContextData(
- Lists.newArrayList(
- Property.createProperty("property1", "value1"),
- Property.createProperty("property2", "value2")),
- new SortedArrayStringMap())
- .toMap())
- .containsExactly(
- "property1",
- "value1",
- "property2",
- "value2",
- "opencensusTraceId",
- "00000000000000000000000000000000",
- "opencensusSpanId",
- "0000000000000000",
- "opencensusTraceSampled",
- "false");
- }
-
- @Test
- public void handleEmptyConfigurationProperties() {
- assertContainsOnlyDefaultTracingEntries(
- new OpenCensusTraceContextDataInjector(SpanSelection.ALL_SPANS)
- .injectContextData(Collections.<Property>emptyList(), new SortedArrayStringMap()));
- }
-
- @Test
- public void handleNullConfigurationProperties() {
- assertContainsOnlyDefaultTracingEntries(
- new OpenCensusTraceContextDataInjector(SpanSelection.ALL_SPANS)
- .injectContextData(null, new SortedArrayStringMap()));
- }
-
- private static void assertContainsOnlyDefaultTracingEntries(StringMap stringMap) {
- assertThat(stringMap.toMap())
- .containsExactly(
- "opencensusTraceId",
- "00000000000000000000000000000000",
- "opencensusSpanId",
- "0000000000000000",
- "opencensusTraceSampled",
- "false");
- }
-
- @Test
- public void rawContextDataWithTracingData() {
- OpenCensusTraceContextDataInjector plugin =
- new OpenCensusTraceContextDataInjector(SpanSelection.ALL_SPANS);
- SpanContext spanContext =
- SpanContext.create(
- TraceId.fromLowerBase16("e17944156660f55b8cae5ce3f45d4a40"),
- SpanId.fromLowerBase16("fc3d2ba0d283b66a"),
- TraceOptions.builder().setIsSampled(true).build(),
- EMPTY_TRACESTATE);
- Scope scope = tracer.withSpan(new TestSpan(spanContext));
- try {
- String key = "myTestKey";
- ThreadContext.put(key, "myTestValue");
- try {
- assertThat(plugin.rawContextData().toMap())
- .containsExactly(
- "myTestKey",
- "myTestValue",
- "opencensusTraceId",
- "e17944156660f55b8cae5ce3f45d4a40",
- "opencensusSpanId",
- "fc3d2ba0d283b66a",
- "opencensusTraceSampled",
- "true");
- } finally {
- ThreadContext.remove(key);
- }
- } finally {
- scope.close();
- }
- }
-
- @Test
- public void rawContextDataWithoutTracingData() {
- OpenCensusTraceContextDataInjector plugin =
- new OpenCensusTraceContextDataInjector(SpanSelection.NO_SPANS);
- SpanContext spanContext =
- SpanContext.create(
- TraceId.fromLowerBase16("ea236000f6d387fe7c06c5a6d6458b53"),
- SpanId.fromLowerBase16("f3b39dbbadb73074"),
- TraceOptions.builder().setIsSampled(true).build(),
- EMPTY_TRACESTATE);
- Scope scope = tracer.withSpan(new TestSpan(spanContext));
- try {
- String key = "myTestKey";
- ThreadContext.put(key, "myTestValue");
- try {
- assertThat(plugin.rawContextData().toMap()).containsExactly("myTestKey", "myTestValue");
- } finally {
- ThreadContext.remove(key);
- }
- } finally {
- scope.close();
- }
- }
-}
diff --git a/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/TestSpan.java b/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/TestSpan.java
deleted file mode 100644
index 7af46064..00000000
--- a/contrib/log_correlation/log4j2/src/test/java/io/opencensus/contrib/logcorrelation/log4j2/TestSpan.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2018, OpenCensus Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.opencensus.contrib.logcorrelation.log4j2;
-
-import io.opencensus.trace.Annotation;
-import io.opencensus.trace.AttributeValue;
-import io.opencensus.trace.EndSpanOptions;
-import io.opencensus.trace.Link;
-import io.opencensus.trace.Span;
-import io.opencensus.trace.SpanContext;
-import java.util.EnumSet;
-import java.util.Map;
-
-// Simple test Span that holds a SpanContext. The tests cannot use Span directly, since it is
-// abstract.
-final class TestSpan extends Span {
- TestSpan(SpanContext context) {
- super(context, EnumSet.of(Options.RECORD_EVENTS));
- }
-
- @Override
- public void end(EndSpanOptions options) {}
-
- @Override
- public void addLink(Link link) {}
-
- @Override
- public void addAnnotation(Annotation annotation) {}
-
- @Override
- public void addAnnotation(String description, Map<String, AttributeValue> attributes) {}
-}
diff --git a/settings.gradle b/settings.gradle
index 7c224edf..75060d26 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -21,7 +21,6 @@ include ":opencensus-contrib-exemplar-util"
include ":opencensus-contrib-grpc-metrics"
include ":opencensus-contrib-grpc-util"
include ":opencensus-contrib-http-util"
-include ":opencensus-contrib-log-correlation-log4j2"
include ":opencensus-contrib-log-correlation-stackdriver"
include ":opencensus-contrib-monitored-resource-util"
include ":opencensus-contrib-spring"
@@ -40,8 +39,6 @@ project(':opencensus-contrib-exemplar-util').projectDir = "$rootDir/contrib/exem
project(':opencensus-contrib-grpc-metrics').projectDir = "$rootDir/contrib/grpc_metrics" as File
project(':opencensus-contrib-grpc-util').projectDir = "$rootDir/contrib/grpc_util" as File
project(':opencensus-contrib-http-util').projectDir = "$rootDir/contrib/http_util" as File
-project(':opencensus-contrib-log-correlation-log4j2').projectDir =
- "$rootDir/contrib/log_correlation/log4j2" as File
project(':opencensus-contrib-log-correlation-stackdriver').projectDir =
"$rootDir/contrib/log_correlation/stackdriver" as File
project(':opencensus-contrib-monitored-resource-util').projectDir =