diff --git a/run/logging-manual/pom.xml b/run/logging-manual/pom.xml index 913a536b45c..3427f9c4a94 100644 --- a/run/logging-manual/pom.xml +++ b/run/logging-manual/pom.xml @@ -28,6 +28,18 @@ limitations under the License. 17 + + + + com.google.cloud + libraries-bom + 26.32.0 + pom + import + + + + com.sparkjava @@ -40,9 +52,13 @@ limitations under the License. 2.0.12 - net.logstash.logback - logstash-logback-encoder - 7.4 + com.google.cloud + google-cloud-logging-logback + + + ch.qos.logback + logback-core + 1.4.14 ch.qos.logback diff --git a/run/logging-manual/src/main/java/com/example/cloudrun/App.java b/run/logging-manual/src/main/java/com/example/cloudrun/App.java index df04d15df67..3f5372f2150 100644 --- a/run/logging-manual/src/main/java/com/example/cloudrun/App.java +++ b/run/logging-manual/src/main/java/com/example/cloudrun/App.java @@ -16,7 +16,6 @@ package com.example.cloudrun; -import static net.logstash.logback.argument.StructuredArguments.kv; import static spark.Spark.get; import static spark.Spark.port; @@ -27,6 +26,7 @@ import okhttp3.Response; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.MDC; public class App { @@ -41,30 +41,27 @@ public static void main(String[] args) { "/", (req, res) -> { // [START cloudrun_manual_logging] - // Build structured log messages as an object. - Object globalLogFields = null; - // Add log correlation to nest all log messages beneath request log in Log Viewer. // TODO(developer): delete this code if you're creating a Cloud // Function and it is *NOT* triggered by HTTP. String traceHeader = req.headers("x-cloud-trace-context"); if (traceHeader != null && project != null) { String trace = traceHeader.split("/")[0]; - globalLogFields = - kv( - "logging.googleapis.com/trace", - String.format("projects/%s/traces/%s", project, trace)); + MDC.put( + "logging.googleapis.com/trace", + String.format("projects/%s/traces/%s", project, trace)); } // -- End log correlation code -- - // Create a structured log entry using key value pairs. + // Create a structured log entry using MDC (Mapped Diagnostic Context) keys. // For instantiating the "logger" variable, see // https://cloud.google.com/run/docs/logging#run_manual_logging-java - logger.error( - "This is the default display field.", - kv("component", "arbitrary-property"), - kv("severity", "NOTICE"), - globalLogFields); + MDC.put("component", "arbitrary-property"); + + logger.info("This is the default display field."); + + // Clear MDC at the end of the request to avoid resource leaks + MDC.clear(); // [END cloudrun_manual_logging] res.status(200); return "Hello Logger!"; diff --git a/run/logging-manual/src/main/resources/logback.xml b/run/logging-manual/src/main/resources/logback.xml index e7dcb0430ec..11499e3388b 100644 --- a/run/logging-manual/src/main/resources/logback.xml +++ b/run/logging-manual/src/main/resources/logback.xml @@ -1,21 +1,12 @@ - - - - - [ignore] - [ignore] - [ignore] - [ignore] - [ignore] - [ignore] - - + + + true - + diff --git a/run/logging-manual/src/test/java/com/example/cloudrun/AppTest.java b/run/logging-manual/src/test/java/com/example/cloudrun/AppTest.java index e56027b7184..c4fc70a66fa 100644 --- a/run/logging-manual/src/test/java/com/example/cloudrun/AppTest.java +++ b/run/logging-manual/src/test/java/com/example/cloudrun/AppTest.java @@ -34,11 +34,17 @@ public class AppTest { - private ByteArrayOutputStream bout; - private PrintStream out; + private static ByteArrayOutputStream bout; + private static PrintStream out; + private static PrintStream originalOut; @BeforeClass public static void beforeClass() { + originalOut = System.out; + bout = new ByteArrayOutputStream(); + out = new PrintStream(bout); + System.setOut(out); + App app = new App(); app.main(new String[] {}); awaitInitialization(); @@ -46,14 +52,13 @@ public static void beforeClass() { @AfterClass public static void afterClass() { + System.setOut(originalOut); stop(); } @Before public void setUp() { - bout = new ByteArrayOutputStream(); - out = new PrintStream(bout); - System.setOut(out); + bout.reset(); } @Test @@ -63,7 +68,7 @@ public void shouldSucceed() throws IOException { assertEquals("Hello Logger!", response.body); String output = bout.toString(); assertTrue(output.toString().contains("This is the default display field.")); - assertTrue(output.toString().contains("NOTICE")); + assertTrue(output.toString().contains("INFO")); assertTrue(output.toString().contains("arbitrary-property")); }