Skip to content

Commit 8d72c8a

Browse files
committed
chore: add gpc logging handler
1 parent e0dd660 commit 8d72c8a

2 files changed

Lines changed: 50 additions & 1 deletion

File tree

java-bigquery/google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/OpenTelemetryJulHandler.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616

1717
package com.google.cloud.bigquery.jdbc;
1818

19+
import com.google.cloud.logging.LogEntry;
1920
import com.google.cloud.logging.Logging;
21+
import com.google.cloud.logging.Payload;
2022
import io.opentelemetry.api.OpenTelemetry;
2123
import io.opentelemetry.api.baggage.Baggage;
2224
import io.opentelemetry.api.common.AttributeKey;
@@ -26,6 +28,7 @@
2628
import io.opentelemetry.api.trace.SpanContext;
2729
import io.opentelemetry.context.Context;
2830
import java.time.Instant;
31+
import java.util.Collections;
2932
import java.util.logging.Handler;
3033
import java.util.logging.Level;
3134
import java.util.logging.LogRecord;
@@ -84,7 +87,35 @@ public void publish(LogRecord record) {
8487
}
8588

8689
private void publishToGcp(LogRecord record, String traceId, String spanId, String connectionId) {
87-
// TODO(b/491238299)
90+
if (loggingClient == null) {
91+
return;
92+
}
93+
94+
LogEntry.Builder builder =
95+
LogEntry.newBuilder(Payload.StringPayload.of(record.getMessage()))
96+
.setSeverity(mapGcpSeverity(record.getLevel()))
97+
.setTimestamp(record.getMillis());
98+
99+
if (traceId != null) {
100+
builder.setTrace(traceId);
101+
}
102+
if (spanId != null) {
103+
builder.setSpanId(spanId);
104+
}
105+
if (connectionId != null) {
106+
builder.addLabel("jdbc.connection_id", connectionId);
107+
}
108+
109+
loggingClient.write(Collections.singleton(builder.build()));
110+
}
111+
112+
private com.google.cloud.logging.Severity mapGcpSeverity(Level level) {
113+
if (level == Level.SEVERE) return com.google.cloud.logging.Severity.ERROR;
114+
if (level == Level.WARNING) return com.google.cloud.logging.Severity.WARNING;
115+
if (level == Level.INFO) return com.google.cloud.logging.Severity.INFO;
116+
if (level == Level.CONFIG) return com.google.cloud.logging.Severity.INFO;
117+
if (level == Level.FINE) return com.google.cloud.logging.Severity.DEBUG;
118+
return com.google.cloud.logging.Severity.DEBUG;
88119
}
89120

90121
private void publishToOTel(LogRecord record, String traceId, String spanId, String connectionId) {

java-bigquery/google-cloud-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/OpenTelemetryJulHandlerTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@
1818

1919
import static org.junit.jupiter.api.Assertions.assertEquals;
2020
import static org.junit.jupiter.api.Assertions.assertTrue;
21+
import static org.mockito.Mockito.mock;
22+
import static org.mockito.Mockito.verify;
2123

24+
import com.google.cloud.logging.Logging;
2225
import io.opentelemetry.api.baggage.Baggage;
2326
import io.opentelemetry.api.common.AttributeKey;
2427
import io.opentelemetry.api.logs.Severity;
@@ -89,4 +92,19 @@ public void testPublishToOTelWithBaggage() {
8992
"test-uuid", log.getAttributes().get(AttributeKey.stringKey("jdbc.connection_id")));
9093
}
9194
}
95+
96+
@Test
97+
public void testPublishToGcp() {
98+
Logging loggingClient = mock(Logging.class);
99+
OpenTelemetryJulHandler handler =
100+
new OpenTelemetryJulHandler(loggingClient, otelTesting.getOpenTelemetry(), true, null);
101+
102+
LogRecord record = new LogRecord(Level.INFO, "Test message");
103+
record.setLoggerName("test.logger");
104+
record.setMillis(System.currentTimeMillis());
105+
106+
handler.publish(record);
107+
108+
verify(loggingClient).write(org.mockito.ArgumentMatchers.any(Iterable.class));
109+
}
92110
}

0 commit comments

Comments
 (0)