From 7e59bf3c3676ebc6bfcdf6e951d3d8f0b6c1589f Mon Sep 17 00:00:00 2001
From: Mridula <66699525+mpeddada1@users.noreply.github.com>
Date: Tue, 8 Mar 2022 16:31:24 -0500
Subject: [PATCH] docs(sample): Add sample for Native Image support in Logging
(#880)
* docs(sample): Add sample for Native Image support
---
README.md | 1 +
samples/native-image-sample/README.md | 71 ++++++++
samples/native-image-sample/pom.xml | 170 ++++++++++++++++++
.../logging/NativeImageLoggingSample.java | 64 +++++++
.../logging/ITNativeImageLoggingSample.java | 35 ++++
samples/pom.xml | 1 +
6 files changed, 342 insertions(+)
create mode 100644 samples/native-image-sample/README.md
create mode 100644 samples/native-image-sample/pom.xml
create mode 100644 samples/native-image-sample/src/main/java/com/example/logging/NativeImageLoggingSample.java
create mode 100644 samples/native-image-sample/src/test/java/com/example/logging/ITNativeImageLoggingSample.java
diff --git a/README.md b/README.md
index c343b944a..1438e1d24 100644
--- a/README.md
+++ b/README.md
@@ -302,6 +302,7 @@ Samples are in the [`samples/`](https://github.com/googleapis/java-logging/tree/
| Sample | Source Code | Try it |
| --------------------------- | --------------------------------- | ------ |
+| Native Image Logging Sample | [source code](https://github.com/googleapis/java-logging/blob/main/samples/native-image-sample/src/main/java/com/example/logging/NativeImageLoggingSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-logging&page=editor&open_in_editor=samples/native-image-sample/src/main/java/com/example/logging/NativeImageLoggingSample.java) |
| Get Sink Metadata | [source code](https://github.com/googleapis/java-logging/blob/main/samples/snippets/src/main/java/com/example/logging/GetSinkMetadata.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-logging&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/logging/GetSinkMetadata.java) |
| List Log Entries | [source code](https://github.com/googleapis/java-logging/blob/main/samples/snippets/src/main/java/com/example/logging/ListLogEntries.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-logging&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/logging/ListLogEntries.java) |
| List Logs | [source code](https://github.com/googleapis/java-logging/blob/main/samples/snippets/src/main/java/com/example/logging/ListLogs.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-logging&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/logging/ListLogs.java) |
diff --git a/samples/native-image-sample/README.md b/samples/native-image-sample/README.md
new file mode 100644
index 000000000..398a55e83
--- /dev/null
+++ b/samples/native-image-sample/README.md
@@ -0,0 +1,71 @@
+# Cloud Logging Client Libraries with Native Image
+
+This application uses the Google Cloud [Logging Client Libraries](https://github.com/googleapis/java-logging) and can be compiled with Native Image Native Image.
+
+## Setup Instructions
+
+You will need to follow these prerequisite steps in order to run the samples:
+
+1. If you have not already, [create a Google Cloud Platform Project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#creating_a_project).
+
+2. Install the [Google Cloud SDK](https://cloud.google.com/sdk/) which will allow you to run the sample with your project's credentials.
+
+ Once installed, log in with Application Default Credentials using the following command:
+
+ ```
+ gcloud auth application-default login
+ ```
+
+ **Note:** Authenticating with Application Default Credentials is convenient to use during development, but we recommend [alternate methods of authentication](https://cloud.google.com/docs/authentication/production) during production use.
+
+3. Install the GraalVM compiler.
+
+ You can follow the [official installation instructions](https://www.graalvm.org/docs/getting-started/#install-graalvm) from the GraalVM website.
+ After following the instructions, ensure that you install the native image extension installed by running:
+
+ ```
+ gu install native-image
+ ```
+
+ Once you finish following the instructions, verify that the default version of Java is set to the GraalVM version by running `java -version` in a terminal.
+
+ You will see something similar to the below output:
+
+ ```
+ $ java -version
+
+ openjdk version "11.0.7" 2020-04-14
+ OpenJDK Runtime Environment GraalVM CE 20.1.0 (build 11.0.7+10-jvmci-20.1-b02)
+ OpenJDK 64-Bit Server VM GraalVM CE 20.1.0 (build 11.0.7+10-jvmci-20.1-b02, mixed mode, sharing)
+ ```
+
+4. Enable the [Logging APIs](https://console.cloud.google.com/flows/enableapi?apiid=logging.googleapis.com).
+
+## Sample
+
+Navigate to this directory in a new terminal.
+
+1. Compile the application using the Native Image Compiler. This step may take a few minutes.
+
+ ```
+ mvn package -P native -DskipTests
+ ```
+
+2. Run the application:
+
+ ```
+ ./target/native-image-sample
+ ```
+
+3. The application will log a message to your local terminal and to Google Cloud Console.
+
+ Navigate to the [Cloud Console Logs Viewer](https://console.cloud.google.com/logs/viewer) to view you logs and find the newly generated log entry in Cloud Console:
+ ```
+ This is a log produced by Native Image.
+ ```
+### Sample Integration test with Native Image Support
+In order to run the sample integration test as a native image, call the following command:
+
+ ```
+ mvn test -Pnative
+ ```
\ No newline at end of file
diff --git a/samples/native-image-sample/pom.xml b/samples/native-image-sample/pom.xml
new file mode 100644
index 000000000..afc30a7ec
--- /dev/null
+++ b/samples/native-image-sample/pom.xml
@@ -0,0 +1,170 @@
+
+
+
+ 4.0.0
+ com.example.logging
+ native-image-sample
+ Native Image Sample
+ https://github.com/googleapis/java-logging
+
+
+
+ com.google.cloud.samples
+ shared-configuration
+ 1.2.0
+
+
+
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+
+
+ com.google.cloud
+ libraries-bom
+ 24.3.0
+ pom
+ import
+
+
+
+
+
+
+ com.google.cloud
+ google-cloud-logging
+
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
+ com.google.truth
+ truth
+ 1.1.3
+ test
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.2.2
+
+
+
+ true
+ dependency-jars/
+ com.example.logging.NativeImageLoggingSample
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+ 3.2.0
+
+
+ copy-dependencies
+ package
+
+ copy-dependencies
+
+
+
+ ${project.build.directory}/dependency-jars/
+
+
+
+
+
+
+
+
+
+
+
+ native
+
+
+
+ com.google.cloud
+ native-image-support
+ 0.12.0
+
+
+ org.junit.vintage
+ junit-vintage-engine
+ 5.8.2
+ test
+
+
+ org.graalvm.buildtools
+ junit-platform-native
+ 0.9.9
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ 2.22.2
+
+
+ **/IT*
+
+
+
+
+ org.graalvm.buildtools
+ native-maven-plugin
+ 0.9.9
+ true
+
+ com.example.logging.NativeImageLoggingSample
+
+ --no-fallback
+ --no-server
+
+
+
+
+ build-native
+
+ build
+ test
+
+ package
+
+
+ test-native
+
+ test
+
+ test
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/native-image-sample/src/main/java/com/example/logging/NativeImageLoggingSample.java b/samples/native-image-sample/src/main/java/com/example/logging/NativeImageLoggingSample.java
new file mode 100644
index 000000000..6fa688060
--- /dev/null
+++ b/samples/native-image-sample/src/main/java/com/example/logging/NativeImageLoggingSample.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * 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
+ *
+ * https://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 com.example.logging;
+
+import com.google.cloud.MonitoredResource;
+import com.google.cloud.logging.LogEntry;
+import com.google.cloud.logging.Logging;
+import com.google.cloud.logging.LoggingOptions;
+import com.google.cloud.logging.Payload.StringPayload;
+import com.google.cloud.logging.Severity;
+import java.time.Duration;
+import java.time.Instant;
+import java.util.Collections;
+
+/** Basic sample application which writes a log message to Cloud Logging. */
+public class NativeImageLoggingSample {
+
+ /** Runs the Logging Sample Application. */
+ public static void main(String[] args) throws Exception {
+ Instant startTime = Instant.now();
+ // Instantiates a client
+ Logging client = LoggingOptions.getDefaultInstance().getService();
+
+ // The name of the log to write to
+ String logName = "nativeimage_logging_sample.log";
+
+ // The data to write to the log
+ String text = "This is a log produced by Native Image.";
+
+ LogEntry entry =
+ LogEntry.newBuilder(StringPayload.of(text))
+ .setSeverity(Severity.INFO)
+ .setLogName(logName)
+ .setResource(MonitoredResource.newBuilder("global").build())
+ .build();
+
+ client.write(Collections.singleton(entry));
+ client.flush();
+ client.close();
+
+ System.out.println(String.format("Logged: %s", text));
+ System.out.println("Log message written to Cloud Logging.");
+ System.out.println(
+ "See your logs in the Cloud Console: https://console.cloud.google.com/logs/viewer "
+ + "(Might take a few seconds to load.)");
+ Instant endTime = Instant.now();
+ Duration duration = Duration.between(startTime, endTime);
+ System.out.println("Duration: " + duration.toString());
+ }
+}
diff --git a/samples/native-image-sample/src/test/java/com/example/logging/ITNativeImageLoggingSample.java b/samples/native-image-sample/src/test/java/com/example/logging/ITNativeImageLoggingSample.java
new file mode 100644
index 000000000..6a4ba67ca
--- /dev/null
+++ b/samples/native-image-sample/src/test/java/com/example/logging/ITNativeImageLoggingSample.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * 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
+ *
+ * https://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 com.example.logging;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.cloud.testing.junit4.StdOutCaptureRule;
+import org.junit.Rule;
+import org.junit.Test;
+
+public class ITNativeImageLoggingSample {
+
+ @Rule public StdOutCaptureRule stdOut = new StdOutCaptureRule();
+
+ @Test
+ public void testLogging() throws Exception {
+ NativeImageLoggingSample.main(new String[] {});
+ assertThat(stdOut.getCapturedOutputAsUtf8String())
+ .contains("Logged: This is a log produced by Native Image.");
+ }
+}
diff --git a/samples/pom.xml b/samples/pom.xml
index b086c0e56..72d7759f9 100644
--- a/samples/pom.xml
+++ b/samples/pom.xml
@@ -31,6 +31,7 @@
snapshot
install-without-bom
snippets
+ native-image-sample