diff --git a/.github/workflows/java-logging-logback-ci.yaml b/.github/workflows/java-logging-logback-ci.yaml new file mode 100644 index 000000000000..c8fbb660b6b7 --- /dev/null +++ b/.github/workflows/java-logging-logback-ci.yaml @@ -0,0 +1,138 @@ +# 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 +# +# 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. +# Github action job to test core java library features on +# downstream client libraries before they are released. +on: + push: + branches: + - main + pull_request: +name: java-logging-logback ci +defaults: + run: + working-directory: java-logging-logback +jobs: + filter: + runs-on: ubuntu-latest + outputs: + library: ${{ steps.filter.outputs.library }} + steps: + - uses: actions/checkout@v4 + - uses: dorny/paths-filter@v3 + id: filter + with: + filters: | + library: + - 'java-logging-logback/**' + units: + needs: filter + if: ${{ needs.filter.outputs.library == 'true' }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + java: [11, 17, 21, 25] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: ${{matrix.java}} + - run: java -version + - run: .kokoro/build.sh + env: + JOB_TYPE: test + units-java8: + needs: filter + if: ${{ needs.filter.outputs.library == 'true' }} + # Building using Java 17 and run the tests with Java 8 runtime + name: "units (8)" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + java-version: 8 + distribution: temurin + - name: "Set jvm system property environment variable for surefire plugin (unit tests)" + # Maven surefire plugin (unit tests) allows us to specify JVM to run the tests. + # https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#jvm + run: echo "SUREFIRE_JVM_OPT=-Djvm=${JAVA_HOME}/bin/java" >> $GITHUB_ENV + shell: bash + - uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + - run: .kokoro/build.sh + env: + JOB_TYPE: test + windows: + needs: filter + if: ${{ needs.filter.outputs.library == 'true' }} + runs-on: windows-latest + steps: + - name: Support longpaths + run: git config --system core.longpaths true + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 8 + - run: java -version + - run: .kokoro/build.bat + env: + JOB_TYPE: test + dependencies: + needs: filter + if: ${{ needs.filter.outputs.library == 'true' }} + runs-on: ubuntu-latest + strategy: + matrix: + java: [17] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: ${{matrix.java}} + - run: java -version + - run: .kokoro/dependencies.sh + javadoc: + needs: filter + if: ${{ needs.filter.outputs.library == 'true' }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + - run: java -version + - run: .kokoro/build.sh + env: + JOB_TYPE: javadoc + lint: + needs: filter + if: ${{ needs.filter.outputs.library == 'true' }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + - run: java -version + - run: .kokoro/build.sh + env: + JOB_TYPE: lint diff --git a/java-logging-logback/.gitignore b/java-logging-logback/.gitignore new file mode 100644 index 000000000000..285bc965091f --- /dev/null +++ b/java-logging-logback/.gitignore @@ -0,0 +1,47 @@ +.gitignore + +# Packages +dist +bin +var +sdist +target + +# Unit test / coverage reports +.coverage +.tox +nosetests.xml + +# Translations +*.mo + +# Mr Developer +.mr.developer.cfg + +.metadata +.project +.pydevproject +*.iml +.idea +.settings +.DS_Store +.classpath + +# Built documentation +docs/ + + +# Wheel directory used in Travis builds. +gcloud-java-wheels/ +src/test/resources/gcd-head.zip +src/test/resources/gcd-v1beta2-rev1-2.1.1.zip + +# API key file containing value of GOOGLE_API_KEY for integration tests +api_key + +# Python utilities +*.pyc +artman-genfiles +venv + +.flattened-pom.xml \ No newline at end of file diff --git a/java-logging-logback/.kokoro/build.bat b/java-logging-logback/.kokoro/build.bat new file mode 100644 index 000000000000..067cf4a4c489 --- /dev/null +++ b/java-logging-logback/.kokoro/build.bat @@ -0,0 +1,18 @@ +:: 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 +:: +:: 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. +:: Github action job to test core java library features on +:: downstream client libraries before they are released. +:: See documentation in type-shell-output.bat + +"C:\Program Files\Git\bin\bash.exe" %~dp0build.sh diff --git a/java-logging-logback/.kokoro/build.sh b/java-logging-logback/.kokoro/build.sh new file mode 100755 index 000000000000..33ce37cb8582 --- /dev/null +++ b/java-logging-logback/.kokoro/build.sh @@ -0,0 +1,130 @@ +#!/bin/bash +# Copyright 2019 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 +# +# 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. + +set -eo pipefail + +## Get the directory of the build script +scriptDir=$(realpath $(dirname "${BASH_SOURCE[0]}")) +## cd to the parent directory, i.e. the root of the git repo +cd ${scriptDir}/.. + +# include common functions +source ${scriptDir}/common.sh + +# Print out Maven & Java version +mvn -version +echo ${JOB_TYPE} + +# attempt to install 3 times with exponential backoff (starting with 10 seconds) +retry_with_backoff 3 10 \ + mvn install -B -V -ntp \ + -DskipTests=true \ + -Dclirr.skip=true \ + -Denforcer.skip=true \ + -Dmaven.javadoc.skip=true \ + -Dgcloud.download.skip=true \ + -T 1C + +# if GOOGLE_APPLICATION_CREDENTIALS is specified as a relative path, prepend Kokoro root directory onto it +if [[ ! -z "${GOOGLE_APPLICATION_CREDENTIALS}" && "${GOOGLE_APPLICATION_CREDENTIALS}" != /* ]]; then + export GOOGLE_APPLICATION_CREDENTIALS=$(realpath ${KOKORO_GFILE_DIR}/${GOOGLE_APPLICATION_CREDENTIALS}) +fi + +RETURN_CODE=0 +set +e + +case ${JOB_TYPE} in +test) + echo "SUREFIRE_JVM_OPT: ${SUREFIRE_JVM_OPT}" + mvn test -B -ntp -Dclirr.skip=true -Denforcer.skip=true ${SUREFIRE_JVM_OPT} + RETURN_CODE=$? + ;; +lint) + mvn com.spotify.fmt:fmt-maven-plugin:check -B -ntp + RETURN_CODE=$? + ;; +javadoc) + mvn javadoc:javadoc javadoc:test-javadoc -B -ntp + RETURN_CODE=$? + ;; +integration) + mvn -B ${INTEGRATION_TEST_ARGS} \ + -ntp \ + -Penable-integration-tests \ + -DtrimStackTrace=false \ + -Dclirr.skip=true \ + -Denforcer.skip=true \ + -fae \ + verify + RETURN_CODE=$? + ;; +graalvm) + # Run Unit and Integration Tests with Native Image + mvn -B ${INTEGRATION_TEST_ARGS} -ntp -Pnative test + RETURN_CODE=$? + ;; +samples) + SAMPLES_DIR=samples + # only run ITs in snapshot/ on presubmit PRs. run ITs in all 3 samples/ subdirectories otherwise. + if [[ ! -z ${KOKORO_GITHUB_PULL_REQUEST_NUMBER} ]] + then + SAMPLES_DIR=samples/snapshot + fi + + if [[ -f ${SAMPLES_DIR}/pom.xml ]] + then + for FILE in ${KOKORO_GFILE_DIR}/secret_manager/*-samples-secrets; do + [[ -f "$FILE" ]] || continue + source "$FILE" + done + + pushd ${SAMPLES_DIR} + mvn -B \ + -ntp \ + -DtrimStackTrace=false \ + -Dclirr.skip=true \ + -Denforcer.skip=true \ + -fae \ + verify + RETURN_CODE=$? + popd + else + echo "no sample pom.xml found - skipping sample tests" + fi + ;; +clirr) + mvn -B -ntp -Denforcer.skip=true clirr:check + RETURN_CODE=$? + ;; +*) + ;; +esac + +if [ "${REPORT_COVERAGE}" == "true" ] +then + bash ${KOKORO_GFILE_DIR}/codecov.sh +fi + +# fix output location of logs +bash .kokoro/coerce_logs.sh + +if [[ "${ENABLE_FLAKYBOT}" == "true" ]] +then + chmod +x ${KOKORO_GFILE_DIR}/linux_amd64/flakybot + ${KOKORO_GFILE_DIR}/linux_amd64/flakybot -repo=googleapis/java-logging-logback +fi + +echo "exiting with ${RETURN_CODE}" +exit ${RETURN_CODE} diff --git a/java-logging-logback/.kokoro/coerce_logs.sh b/java-logging-logback/.kokoro/coerce_logs.sh new file mode 100755 index 000000000000..46edbf7f2fcd --- /dev/null +++ b/java-logging-logback/.kokoro/coerce_logs.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# Copyright 2019 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 +# +# 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. + +# This script finds and moves sponge logs so that they can be found by placer +# and are not flagged as flaky by sponge. + +set -eo pipefail + +## Get the directory of the build script +scriptDir=$(realpath $(dirname "${BASH_SOURCE[0]}")) +## cd to the parent directory, i.e. the root of the git repo +cd ${scriptDir}/.. + +job=$(basename ${KOKORO_JOB_NAME}) + +echo "coercing sponge logs..." +for xml in `find . -name *-sponge_log.xml` +do + class=$(basename ${xml} | cut -d- -f2) + dir=$(dirname ${xml})/${job}/${class} + text=$(dirname ${xml})/${class}-sponge_log.txt + mkdir -p ${dir} + mv ${xml} ${dir}/sponge_log.xml + mv ${text} ${dir}/sponge_log.txt +done diff --git a/java-logging-logback/.kokoro/common.cfg b/java-logging-logback/.kokoro/common.cfg new file mode 100644 index 000000000000..a9aec8e3994e --- /dev/null +++ b/java-logging-logback/.kokoro/common.cfg @@ -0,0 +1,33 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Download trampoline resources. These will be in ${KOKORO_GFILE_DIR} +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# All builds use the trampoline script to run in docker. +build_file: "java-logging-logback/.kokoro/trampoline.sh" + +# Tell the trampoline which build file to use. +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/java-logging-logback/.kokoro/build.sh" +} + + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "logging" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "java" +} + +################################################### + diff --git a/java-logging-logback/.kokoro/common.sh b/java-logging-logback/.kokoro/common.sh new file mode 100644 index 000000000000..f8f957af1112 --- /dev/null +++ b/java-logging-logback/.kokoro/common.sh @@ -0,0 +1,60 @@ +#!/bin/bash +# Copyright 2020 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 +# +# 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. + +function retry_with_backoff { + attempts_left=$1 + sleep_seconds=$2 + shift 2 + command=$@ + + + # store current flag state + flags=$- + + # allow a failures to continue + set +e + ${command} + exit_code=$? + + # restore "e" flag + if [[ ${flags} =~ e ]] + then set -e + else set +e + fi + + if [[ $exit_code == 0 ]] + then + return 0 + fi + + # failure + if [[ ${attempts_left} > 0 ]] + then + echo "failure (${exit_code}), sleeping ${sleep_seconds}..." + sleep ${sleep_seconds} + new_attempts=$((${attempts_left} - 1)) + new_sleep=$((${sleep_seconds} * 2)) + retry_with_backoff ${new_attempts} ${new_sleep} ${command} + fi + + return $exit_code +} + +## Helper functionss +function now() { date +"%Y-%m-%d %H:%M:%S" | tr -d '\n'; } +function msg() { println "$*" >&2; } +function println() { printf '%s\n' "$(now) $*"; } + +## Helper comment to trigger updated repo dependency release \ No newline at end of file diff --git a/java-logging-logback/.kokoro/common_env_vars.cfg b/java-logging-logback/.kokoro/common_env_vars.cfg new file mode 100644 index 000000000000..fd34bc54d39b --- /dev/null +++ b/java-logging-logback/.kokoro/common_env_vars.cfg @@ -0,0 +1,19 @@ + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "logging" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "java" +} + +################################################### + diff --git a/java-logging-logback/.kokoro/continuous/common.cfg b/java-logging-logback/.kokoro/continuous/common.cfg new file mode 100644 index 000000000000..68eb7129dad1 --- /dev/null +++ b/java-logging-logback/.kokoro/continuous/common.cfg @@ -0,0 +1,45 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + regex: "**/*sponge_log.txt" + } +} + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "java-logging-logback/.kokoro/trampoline.sh" + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/java-logging-logback/.kokoro/build.sh" +} + +env_vars: { + key: "JOB_TYPE" + value: "test" +} + + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "logging" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "java" +} + +################################################### + diff --git a/java-logging-logback/.kokoro/continuous/java8.cfg b/java-logging-logback/.kokoro/continuous/java8.cfg new file mode 100644 index 000000000000..495cc7bacd63 --- /dev/null +++ b/java-logging-logback/.kokoro/continuous/java8.cfg @@ -0,0 +1,12 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java8" +} + +env_vars: { + key: "REPORT_COVERAGE" + value: "true" +} diff --git a/java-logging-logback/.kokoro/continuous/propose_release.sh b/java-logging-logback/.kokoro/continuous/propose_release.sh new file mode 100755 index 000000000000..372054a17009 --- /dev/null +++ b/java-logging-logback/.kokoro/continuous/propose_release.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Copyright 2019 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. + +set -eo pipefail + +export NPM_CONFIG_PREFIX=/home/node/.npm-global + +if [ -f ${KOKORO_KEYSTORE_DIR}/73713_github-magic-proxy-url-release-please ]; then + # Groom the release PR as new commits are merged. + npx release-please release-pr --token=${KOKORO_KEYSTORE_DIR}/73713_github-magic-proxy-token-release-please \ + --repo-url=googleapis/java-logging-logback \ + --package-name="logging-logback" \ + --api-url=${KOKORO_KEYSTORE_DIR}/73713_github-magic-proxy-url-release-please \ + --proxy-key=${KOKORO_KEYSTORE_DIR}/73713_github-magic-proxy-key-release-please \ + --release-type=java-yoshi +fi diff --git a/java-logging-logback/.kokoro/dependencies.sh b/java-logging-logback/.kokoro/dependencies.sh new file mode 100755 index 000000000000..bd8960246f66 --- /dev/null +++ b/java-logging-logback/.kokoro/dependencies.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# Copyright 2019 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 +# +# 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. + +set -eo pipefail +shopt -s nullglob + +## Get the directory of the build script +scriptDir=$(realpath $(dirname "${BASH_SOURCE[0]}")) +## cd to the parent directory, i.e. the root of the git repo +cd ${scriptDir}/.. + +# include common functions +source ${scriptDir}/common.sh + +# Print out Java +java -version +echo $JOB_TYPE + +function determineMavenOpts() { + local javaVersion=$( + # filter down to the version line, then pull out the version between quotes, + # then trim the version number down to its minimal number (removing any + # update or suffix number). + java -version 2>&1 | grep "version" \ + | sed -E 's/^.*"(.*?)".*$/\1/g' \ + | sed -E 's/^(1\.[0-9]\.0).*$/\1/g' + ) + + if [[ $javaVersion == 17* ]] + then + # MaxPermSize is no longer supported as of jdk 17 + echo -n "-Xmx1024m" + else + echo -n "-Xmx1024m -XX:MaxPermSize=128m" + fi +} + +export MAVEN_OPTS=$(determineMavenOpts) + +# this should run maven enforcer +retry_with_backoff 3 10 \ + mvn install -B -V -ntp \ + -DskipTests=true \ + -Dmaven.javadoc.skip=true \ + -Dclirr.skip=true + +mvn -B dependency:analyze -DfailOnWarning=true diff --git a/java-logging-logback/.kokoro/nightly/common.cfg b/java-logging-logback/.kokoro/nightly/common.cfg new file mode 100644 index 000000000000..68eb7129dad1 --- /dev/null +++ b/java-logging-logback/.kokoro/nightly/common.cfg @@ -0,0 +1,45 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + regex: "**/*sponge_log.txt" + } +} + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "java-logging-logback/.kokoro/trampoline.sh" + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/java-logging-logback/.kokoro/build.sh" +} + +env_vars: { + key: "JOB_TYPE" + value: "test" +} + + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "logging" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "java" +} + +################################################### + diff --git a/java-logging-logback/.kokoro/nightly/integration.cfg b/java-logging-logback/.kokoro/nightly/integration.cfg new file mode 100644 index 000000000000..5a95c68284c4 --- /dev/null +++ b/java-logging-logback/.kokoro/nightly/integration.cfg @@ -0,0 +1,38 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java8" +} + +env_vars: { + key: "JOB_TYPE" + value: "integration" +} +# TODO: remove this after we've migrated all tests and scripts +env_vars: { + key: "GCLOUD_PROJECT" + value: "java-docs-samples-testing" +} + +env_vars: { + key: "GOOGLE_CLOUD_PROJECT" + value: "java-docs-samples-testing" +} + +env_vars: { + key: "ENABLE_FLAKYBOT" + value: "true" +} + +env_vars: { + key: "GOOGLE_APPLICATION_CREDENTIALS" + value: "secret_manager/java-it-service-account" +} + +env_vars: { + key: "SECRET_MANAGER_KEYS" + value: "java-it-service-account" +} + diff --git a/java-logging-logback/.kokoro/nightly/java11-integration.cfg b/java-logging-logback/.kokoro/nightly/java11-integration.cfg new file mode 100644 index 000000000000..6a6ef94eff28 --- /dev/null +++ b/java-logging-logback/.kokoro/nightly/java11-integration.cfg @@ -0,0 +1,38 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-public-resources/java11014" +} + +env_vars: { + key: "JOB_TYPE" + value: "integration" +} +# TODO: remove this after we've migrated all tests and scripts +env_vars: { + key: "GCLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "GOOGLE_CLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "ENABLE_FLAKYBOT" + value: "true" +} + +env_vars: { + key: "GOOGLE_APPLICATION_CREDENTIALS" + value: "secret_manager/java-it-service-account" +} + +env_vars: { + key: "SECRET_MANAGER_KEYS" + value: "java-it-service-account" +} + diff --git a/java-logging-logback/.kokoro/nightly/java11.cfg b/java-logging-logback/.kokoro/nightly/java11.cfg new file mode 100644 index 000000000000..709f2b4c73db --- /dev/null +++ b/java-logging-logback/.kokoro/nightly/java11.cfg @@ -0,0 +1,7 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java11" +} diff --git a/java-logging-logback/.kokoro/nightly/java7.cfg b/java-logging-logback/.kokoro/nightly/java7.cfg new file mode 100644 index 000000000000..cb24f44eea3b --- /dev/null +++ b/java-logging-logback/.kokoro/nightly/java7.cfg @@ -0,0 +1,7 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java7" +} diff --git a/java-logging-logback/.kokoro/nightly/java8-osx.cfg b/java-logging-logback/.kokoro/nightly/java8-osx.cfg new file mode 100644 index 000000000000..205afdcd1181 --- /dev/null +++ b/java-logging-logback/.kokoro/nightly/java8-osx.cfg @@ -0,0 +1,3 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +build_file: "java-logging-logback/.kokoro/build.sh" diff --git a/java-logging-logback/.kokoro/nightly/java8-win.cfg b/java-logging-logback/.kokoro/nightly/java8-win.cfg new file mode 100644 index 000000000000..26210fe6b265 --- /dev/null +++ b/java-logging-logback/.kokoro/nightly/java8-win.cfg @@ -0,0 +1,3 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +build_file: "java-logging-logback/.kokoro/build.bat" diff --git a/java-logging-logback/.kokoro/nightly/java8.cfg b/java-logging-logback/.kokoro/nightly/java8.cfg new file mode 100644 index 000000000000..495cc7bacd63 --- /dev/null +++ b/java-logging-logback/.kokoro/nightly/java8.cfg @@ -0,0 +1,12 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java8" +} + +env_vars: { + key: "REPORT_COVERAGE" + value: "true" +} diff --git a/java-logging-logback/.kokoro/nightly/samples.cfg b/java-logging-logback/.kokoro/nightly/samples.cfg new file mode 100644 index 000000000000..9761fd8648cb --- /dev/null +++ b/java-logging-logback/.kokoro/nightly/samples.cfg @@ -0,0 +1,38 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java8" +} + +env_vars: { + key: "JOB_TYPE" + value: "samples" +} + +# TODO: remove this after we've migrated all tests and scripts +env_vars: { + key: "GCLOUD_PROJECT" + value: "java-docs-samples-testing" +} + +env_vars: { + key: "GOOGLE_CLOUD_PROJECT" + value: "java-docs-samples-testing" +} + +env_vars: { + key: "GOOGLE_APPLICATION_CREDENTIALS" + value: "secret_manager/java-docs-samples-service-account" +} + +env_vars: { + key: "SECRET_MANAGER_KEYS" + value: "java-docs-samples-service-account" +} + +env_vars: { + key: "ENABLE_FLAKYBOT" + value: "true" +} diff --git a/java-logging-logback/.kokoro/populate-secrets.sh b/java-logging-logback/.kokoro/populate-secrets.sh new file mode 100755 index 000000000000..f52514257ef0 --- /dev/null +++ b/java-logging-logback/.kokoro/populate-secrets.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# Copyright 2020 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 +# +# 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. + +set -eo pipefail + +function now { date +"%Y-%m-%d %H:%M:%S" | tr -d '\n' ;} +function msg { println "$*" >&2 ;} +function println { printf '%s\n' "$(now) $*" ;} + + +# Populates requested secrets set in SECRET_MANAGER_KEYS from service account: +# kokoro-trampoline@cloud-devrel-kokoro-resources.iam.gserviceaccount.com +SECRET_LOCATION="${KOKORO_GFILE_DIR}/secret_manager" +msg "Creating folder on disk for secrets: ${SECRET_LOCATION}" +mkdir -p ${SECRET_LOCATION} +for key in $(echo ${SECRET_MANAGER_KEYS} | sed "s/,/ /g") +do + msg "Retrieving secret ${key}" + docker run --entrypoint=gcloud \ + --volume=${KOKORO_GFILE_DIR}:${KOKORO_GFILE_DIR} \ + gcr.io/google.com/cloudsdktool/cloud-sdk \ + secrets versions access latest \ + --project cloud-devrel-kokoro-resources \ + --secret ${key} > \ + "${SECRET_LOCATION}/${key}" + if [[ $? == 0 ]]; then + msg "Secret written to ${SECRET_LOCATION}/${key}" + else + msg "Error retrieving secret ${key}" + fi +done diff --git a/java-logging-logback/.kokoro/presubmit/clirr.cfg b/java-logging-logback/.kokoro/presubmit/clirr.cfg new file mode 100644 index 000000000000..ec572442e2e7 --- /dev/null +++ b/java-logging-logback/.kokoro/presubmit/clirr.cfg @@ -0,0 +1,13 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. + +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java8" +} + +env_vars: { + key: "JOB_TYPE" + value: "clirr" +} \ No newline at end of file diff --git a/java-logging-logback/.kokoro/presubmit/common.cfg b/java-logging-logback/.kokoro/presubmit/common.cfg new file mode 100644 index 000000000000..68822aaf6d18 --- /dev/null +++ b/java-logging-logback/.kokoro/presubmit/common.cfg @@ -0,0 +1,54 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + regex: "**/*sponge_log.txt" + } +} + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "java-logging-logback/.kokoro/trampoline.sh" + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/java-logging-logback/.kokoro/build.sh" +} + +env_vars: { + key: "JOB_TYPE" + value: "test" +} + +before_action { + fetch_keystore { + keystore_resource { + keystore_config_id: 73713 + keyname: "dpebot_codecov_token" + } + } +} + + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "logging" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "java" +} + +################################################### + diff --git a/java-logging-logback/.kokoro/presubmit/dependencies.cfg b/java-logging-logback/.kokoro/presubmit/dependencies.cfg new file mode 100644 index 000000000000..33ad8901962f --- /dev/null +++ b/java-logging-logback/.kokoro/presubmit/dependencies.cfg @@ -0,0 +1,12 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java8" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/java-logging-logback/.kokoro/dependencies.sh" +} diff --git a/java-logging-logback/.kokoro/presubmit/graalvm-native-a.cfg b/java-logging-logback/.kokoro/presubmit/graalvm-native-a.cfg new file mode 100644 index 000000000000..71bb38feee23 --- /dev/null +++ b/java-logging-logback/.kokoro/presubmit/graalvm-native-a.cfg @@ -0,0 +1,33 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.54.2" +} + +env_vars: { + key: "JOB_TYPE" + value: "graalvm" +} + +# TODO: remove this after we've migrated all tests and scripts +env_vars: { + key: "GCLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "GOOGLE_CLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "GOOGLE_APPLICATION_CREDENTIALS" + value: "secret_manager/java-it-service-account" +} + +env_vars: { + key: "SECRET_MANAGER_KEYS" + value: "java-it-service-account" +} diff --git a/java-logging-logback/.kokoro/presubmit/graalvm-native-b.cfg b/java-logging-logback/.kokoro/presubmit/graalvm-native-b.cfg new file mode 100644 index 000000000000..952e958134e8 --- /dev/null +++ b/java-logging-logback/.kokoro/presubmit/graalvm-native-b.cfg @@ -0,0 +1,33 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.54.2" +} + +env_vars: { + key: "JOB_TYPE" + value: "graalvm" +} + +# TODO: remove this after we've migrated all tests and scripts +env_vars: { + key: "GCLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "GOOGLE_CLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "GOOGLE_APPLICATION_CREDENTIALS" + value: "secret_manager/java-it-service-account" +} + +env_vars: { + key: "SECRET_MANAGER_KEYS" + value: "java-it-service-account" +} \ No newline at end of file diff --git a/java-logging-logback/.kokoro/presubmit/graalvm-native-c.cfg b/java-logging-logback/.kokoro/presubmit/graalvm-native-c.cfg new file mode 100644 index 000000000000..6da1bee3ac6b --- /dev/null +++ b/java-logging-logback/.kokoro/presubmit/graalvm-native-c.cfg @@ -0,0 +1,33 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_c:3.54.2" +} + +env_vars: { + key: "JOB_TYPE" + value: "graalvm17" +} + +# TODO: remove this after we've migrated all tests and scripts +env_vars: { + key: "GCLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "GOOGLE_CLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "GOOGLE_APPLICATION_CREDENTIALS" + value: "secret_manager/java-it-service-account" +} + +env_vars: { + key: "SECRET_MANAGER_KEYS" + value: "java-it-service-account" +} \ No newline at end of file diff --git a/java-logging-logback/.kokoro/presubmit/integration.cfg b/java-logging-logback/.kokoro/presubmit/integration.cfg new file mode 100644 index 000000000000..5864c603e5ad --- /dev/null +++ b/java-logging-logback/.kokoro/presubmit/integration.cfg @@ -0,0 +1,34 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java8" +} + +env_vars: { + key: "JOB_TYPE" + value: "integration" +} + +# TODO: remove this after we've migrated all tests and scripts +env_vars: { + key: "GCLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "GOOGLE_CLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "GOOGLE_APPLICATION_CREDENTIALS" + value: "secret_manager/java-it-service-account" +} + +env_vars: { + key: "SECRET_MANAGER_KEYS" + value: "java-it-service-account" +} + diff --git a/java-logging-logback/.kokoro/presubmit/java11.cfg b/java-logging-logback/.kokoro/presubmit/java11.cfg new file mode 100644 index 000000000000..709f2b4c73db --- /dev/null +++ b/java-logging-logback/.kokoro/presubmit/java11.cfg @@ -0,0 +1,7 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java11" +} diff --git a/java-logging-logback/.kokoro/presubmit/java7.cfg b/java-logging-logback/.kokoro/presubmit/java7.cfg new file mode 100644 index 000000000000..cb24f44eea3b --- /dev/null +++ b/java-logging-logback/.kokoro/presubmit/java7.cfg @@ -0,0 +1,7 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java7" +} diff --git a/java-logging-logback/.kokoro/presubmit/java8-osx.cfg b/java-logging-logback/.kokoro/presubmit/java8-osx.cfg new file mode 100644 index 000000000000..205afdcd1181 --- /dev/null +++ b/java-logging-logback/.kokoro/presubmit/java8-osx.cfg @@ -0,0 +1,3 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +build_file: "java-logging-logback/.kokoro/build.sh" diff --git a/java-logging-logback/.kokoro/presubmit/java8-win.cfg b/java-logging-logback/.kokoro/presubmit/java8-win.cfg new file mode 100644 index 000000000000..26210fe6b265 --- /dev/null +++ b/java-logging-logback/.kokoro/presubmit/java8-win.cfg @@ -0,0 +1,3 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +build_file: "java-logging-logback/.kokoro/build.bat" diff --git a/java-logging-logback/.kokoro/presubmit/java8.cfg b/java-logging-logback/.kokoro/presubmit/java8.cfg new file mode 100644 index 000000000000..495cc7bacd63 --- /dev/null +++ b/java-logging-logback/.kokoro/presubmit/java8.cfg @@ -0,0 +1,12 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java8" +} + +env_vars: { + key: "REPORT_COVERAGE" + value: "true" +} diff --git a/java-logging-logback/.kokoro/presubmit/linkage-monitor.cfg b/java-logging-logback/.kokoro/presubmit/linkage-monitor.cfg new file mode 100644 index 000000000000..28cf064a9e5d --- /dev/null +++ b/java-logging-logback/.kokoro/presubmit/linkage-monitor.cfg @@ -0,0 +1,12 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java8" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/java-logging-logback/.kokoro/linkage-monitor.sh" +} \ No newline at end of file diff --git a/java-logging-logback/.kokoro/presubmit/lint.cfg b/java-logging-logback/.kokoro/presubmit/lint.cfg new file mode 100644 index 000000000000..6d323c8ae768 --- /dev/null +++ b/java-logging-logback/.kokoro/presubmit/lint.cfg @@ -0,0 +1,13 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. + +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java8" +} + +env_vars: { + key: "JOB_TYPE" + value: "lint" +} \ No newline at end of file diff --git a/java-logging-logback/.kokoro/presubmit/samples.cfg b/java-logging-logback/.kokoro/presubmit/samples.cfg new file mode 100644 index 000000000000..01e0960047b8 --- /dev/null +++ b/java-logging-logback/.kokoro/presubmit/samples.cfg @@ -0,0 +1,33 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java8" +} + +env_vars: { + key: "JOB_TYPE" + value: "samples" +} + +# TODO: remove this after we've migrated all tests and scripts +env_vars: { + key: "GCLOUD_PROJECT" + value: "java-docs-samples-testing" +} + +env_vars: { + key: "GOOGLE_CLOUD_PROJECT" + value: "java-docs-samples-testing" +} + +env_vars: { + key: "GOOGLE_APPLICATION_CREDENTIALS" + value: "secret_manager/java-docs-samples-service-account" +} + +env_vars: { + key: "SECRET_MANAGER_KEYS" + value: "java-docs-samples-service-account" +} \ No newline at end of file diff --git a/java-logging-logback/.kokoro/readme.sh b/java-logging-logback/.kokoro/readme.sh new file mode 100755 index 000000000000..0666a42dd012 --- /dev/null +++ b/java-logging-logback/.kokoro/readme.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# Copyright 2020 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 +# +# 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. + +set -eo pipefail + +cd ${KOKORO_ARTIFACTS_DIR}/github/java-logging-logback + +# Disable buffering, so that the logs stream through. +export PYTHONUNBUFFERED=1 + +# Kokoro exposes this as a file, but the scripts expect just a plain variable. +export GITHUB_TOKEN=$(cat ${KOKORO_KEYSTORE_DIR}/73713_yoshi-automation-github-key) + +# Setup git credentials +echo "https://${GITHUB_TOKEN}:@github.com" >> ~/.git-credentials +git config --global credential.helper 'store --file ~/.git-credentials' + +python3.6 -m pip install git+https://github.com/googleapis/synthtool.git#egg=gcp-synthtool + +set +e +python3.6 -m autosynth.synth \ + --repository=googleapis/java-logging-logback \ + --synth-file-name=.github/readme/synth.py \ + --metadata-path=.github/readme/synth.metadata \ + --pr-title="chore: regenerate README" \ + --branch-suffix="readme" + +# autosynth returns 28 to signal there are no changes +RETURN_CODE=$? +if [[ ${RETURN_CODE} -ne 0 && ${RETURN_CODE} -ne 28 ]] +then + exit ${RETURN_CODE} +fi diff --git a/java-logging-logback/.kokoro/requirements.in b/java-logging-logback/.kokoro/requirements.in new file mode 100644 index 000000000000..2092cc741d9c --- /dev/null +++ b/java-logging-logback/.kokoro/requirements.in @@ -0,0 +1,6 @@ +gcp-docuploader +gcp-releasetool>=1.10.5 # required for compatibility with cryptography>=39.x +wheel +setuptools +typing-extensions +click<8.1.0 \ No newline at end of file diff --git a/java-logging-logback/.kokoro/trampoline.sh b/java-logging-logback/.kokoro/trampoline.sh new file mode 100644 index 000000000000..8b69b793c9ec --- /dev/null +++ b/java-logging-logback/.kokoro/trampoline.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# Copyright 2018 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 +# +# 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. +set -eo pipefail +# Always run the cleanup script, regardless of the success of bouncing into +# the container. +function cleanup() { + chmod +x ${KOKORO_GFILE_DIR}/trampoline_cleanup.sh + ${KOKORO_GFILE_DIR}/trampoline_cleanup.sh + echo "cleanup"; +} +trap cleanup EXIT + +$(dirname $0)/populate-secrets.sh # Secret Manager secrets. +python3 "${KOKORO_GFILE_DIR}/trampoline_v1.py" diff --git a/java-logging-logback/.repo-metadata.json b/java-logging-logback/.repo-metadata.json new file mode 100644 index 000000000000..fdf4fd309191 --- /dev/null +++ b/java-logging-logback/.repo-metadata.json @@ -0,0 +1,15 @@ +{ + "api_shortname": "logging-logback", + "name_pretty": "Cloud Logging Logback Appender", + "product_documentation": "https://cloud.google.com/logging/docs/setup/java#logback_appender_for", + "client_documentation": "https://cloud.google.com/java/docs/reference/google-cloud-logging-logback/latest/history", + "issue_tracker": "https://issuetracker.google.com/savedsearches/559764", + "release_level": "preview", + "language": "java", + "repo": "googleapis/java-logging-logback", + "repo_short": "java-logging-logback", + "distribution_name": "com.google.cloud:google-cloud-logging-logback", + "codeowner_team": "@googleapis/yoshi-java @googleapis/api-logging @googleapis/api-logging-partners", + "library_type": "OTHER", + "api_id": "logging.googleapis.com" +} diff --git a/java-logging-logback/CHANGELOG.md b/java-logging-logback/CHANGELOG.md new file mode 100644 index 000000000000..2c2409c71f84 --- /dev/null +++ b/java-logging-logback/CHANGELOG.md @@ -0,0 +1,1490 @@ +# Changelog + + +## [0.132.20-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.19-alpha...v0.132.20-alpha) (2025-12-12) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.23.9 ([#1577](https://github.com/googleapis/java-logging-logback/issues/1577)) ([1ff07ce](https://github.com/googleapis/java-logging-logback/commit/1ff07cec29c542965f955be4e28d99a62c555a9c)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.54.2 ([#1575](https://github.com/googleapis/java-logging-logback/issues/1575)) ([40e5544](https://github.com/googleapis/java-logging-logback/commit/40e5544a9b072f15d18401ebdf4af377b9008e6b)) + +## [0.132.19-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.18-alpha...v0.132.19-alpha) (2025-11-14) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.23.8 ([#1539](https://github.com/googleapis/java-logging-logback/issues/1539)) ([a1a89c3](https://github.com/googleapis/java-logging-logback/commit/a1a89c3ece276fb48c9d6da33a0bbb4847fa22ee)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.54.1 ([#1537](https://github.com/googleapis/java-logging-logback/issues/1537)) ([e58b11c](https://github.com/googleapis/java-logging-logback/commit/e58b11c7f12dcda0107adccfde50e7e5d1859b9a)) + +## [0.132.18-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.17-alpha...v0.132.18-alpha) (2025-10-21) + + +### Bug Fixes + +* Add setCredentials method as alternative for setCredentialsFile in LoggingAppender ([#1530](https://github.com/googleapis/java-logging-logback/issues/1530)) ([419a943](https://github.com/googleapis/java-logging-logback/commit/419a9438193586afb7986ccee59d19e9e364ec98)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.23.7 ([#1535](https://github.com/googleapis/java-logging-logback/issues/1535)) ([0779cae](https://github.com/googleapis/java-logging-logback/commit/0779caec8b3707d97b96070364886b7b1b3fdde3)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.53.0 ([#1533](https://github.com/googleapis/java-logging-logback/issues/1533)) ([dd0f734](https://github.com/googleapis/java-logging-logback/commit/dd0f7344259c94e50fd93a9a83f33b1cb4e55548)) + +## [0.132.17-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.16-alpha...v0.132.17-alpha) (2025-10-08) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.23.6 ([#1531](https://github.com/googleapis/java-logging-logback/issues/1531)) ([fa24bc6](https://github.com/googleapis/java-logging-logback/commit/fa24bc69a1083118d3da284be1ceb4d543bafa27)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.3 ([#1527](https://github.com/googleapis/java-logging-logback/issues/1527)) ([38f1dc8](https://github.com/googleapis/java-logging-logback/commit/38f1dc898775af937efef567c626e837b0fedb7c)) + +## [0.132.16-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.15-alpha...v0.132.16-alpha) (2025-09-25) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.23.5 ([#1523](https://github.com/googleapis/java-logging-logback/issues/1523)) ([db8aab7](https://github.com/googleapis/java-logging-logback/commit/db8aab7160f050e158ef143452d60d759ecc3919)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.2 ([#1519](https://github.com/googleapis/java-logging-logback/issues/1519)) ([e3caf33](https://github.com/googleapis/java-logging-logback/commit/e3caf33b4d66dd678cc3af13da5e98dcc8deacb9)) + +## [0.132.15-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.14-alpha...v0.132.15-alpha) (2025-09-11) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.23.4 deps: update dependency com.google.cloud:sdk-platform-java-config to v3.52.1 ([1e32d31](https://github.com/googleapis/java-logging-logback/commit/1e32d312310db90a5158159d659befafc0c8a387)) + +## [0.132.14-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.13-alpha...v0.132.14-alpha) (2025-08-20) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.23.3 ([93355ed](https://github.com/googleapis/java-logging-logback/commit/93355ed5b7ef4c3a91e7653e2cb06ea5d742664b)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.0 ([93355ed](https://github.com/googleapis/java-logging-logback/commit/93355ed5b7ef4c3a91e7653e2cb06ea5d742664b)) + +## [0.132.13-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.12-alpha...v0.132.13-alpha) (2025-08-07) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.23.2 ([#1503](https://github.com/googleapis/java-logging-logback/issues/1503)) ([72df348](https://github.com/googleapis/java-logging-logback/commit/72df3485159c654e5cf72c141574816334183d6e)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.51.0 ([#1502](https://github.com/googleapis/java-logging-logback/issues/1502)) ([e127422](https://github.com/googleapis/java-logging-logback/commit/e127422cc5c837240fa37004f6ba75bc9142ce1b)) + +## [0.132.12-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.11-alpha...v0.132.12-alpha) (2025-07-29) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.23.1 ([#1499](https://github.com/googleapis/java-logging-logback/issues/1499)) ([a186531](https://github.com/googleapis/java-logging-logback/commit/a1865313956b10cd5c3dc5e6d383ec225f86799d)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.50.2 ([#1497](https://github.com/googleapis/java-logging-logback/issues/1497)) ([d1cc1da](https://github.com/googleapis/java-logging-logback/commit/d1cc1dafc955de3a54f95ff58fb9a53c9306fc2b)) + +## [0.132.11-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.10-alpha...v0.132.11-alpha) (2025-07-11) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.23.0 ([#1495](https://github.com/googleapis/java-logging-logback/issues/1495)) ([91f4721](https://github.com/googleapis/java-logging-logback/commit/91f47213672aa3f8e45612019347d78437f5a7db)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.50.1 ([#1493](https://github.com/googleapis/java-logging-logback/issues/1493)) ([18ba871](https://github.com/googleapis/java-logging-logback/commit/18ba871695078cd3dad126690e3b2d5551107665)) + +## [0.132.10-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.9-alpha...v0.132.10-alpha) (2025-06-25) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.22.6 ([#1490](https://github.com/googleapis/java-logging-logback/issues/1490)) ([477f373](https://github.com/googleapis/java-logging-logback/commit/477f3735656c57d5ae9c0a13f0b68f211f02759c)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.50.0 ([#1486](https://github.com/googleapis/java-logging-logback/issues/1486)) ([ae2fe85](https://github.com/googleapis/java-logging-logback/commit/ae2fe85c114b5e0e194f16b9da98ba80247b9c7a)) + +## [0.132.9-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.8-alpha...v0.132.9-alpha) (2025-06-06) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.22.5 ([#1482](https://github.com/googleapis/java-logging-logback/issues/1482)) ([8f7ecbb](https://github.com/googleapis/java-logging-logback/commit/8f7ecbb64a8e338e822185acb46846ab7d25ee48)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.49.0 ([#1480](https://github.com/googleapis/java-logging-logback/issues/1480)) ([9377c3c](https://github.com/googleapis/java-logging-logback/commit/9377c3c51e25328a609934973a5922fba6eef160)) + +## [0.132.8-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.7-alpha...v0.132.8-alpha) (2025-05-20) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.22.4 ([#1477](https://github.com/googleapis/java-logging-logback/issues/1477)) ([d1852aa](https://github.com/googleapis/java-logging-logback/commit/d1852aa2ff5af397c52e9950a0fbcae3e6575122)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.48.0 ([#1474](https://github.com/googleapis/java-logging-logback/issues/1474)) ([ce8b356](https://github.com/googleapis/java-logging-logback/commit/ce8b3560c963dc5b96bd76ff0f86175b794b4332)) +* Update dependency org.easymock:easymock to v5.6.0 ([#1475](https://github.com/googleapis/java-logging-logback/issues/1475)) ([84827c3](https://github.com/googleapis/java-logging-logback/commit/84827c34e35a9e14b04e5c7223bd8bca5070893d)) + +## [0.132.7-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.6-alpha...v0.132.7-alpha) (2025-05-06) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.22.3 ([#1470](https://github.com/googleapis/java-logging-logback/issues/1470)) ([423cb11](https://github.com/googleapis/java-logging-logback/commit/423cb1133b130ba0ca3c420b873e369bc132abaa)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.46.3 ([#1467](https://github.com/googleapis/java-logging-logback/issues/1467)) ([386f258](https://github.com/googleapis/java-logging-logback/commit/386f2588cf8757a050acd348b8dc3cbdd32d8673)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.47.0 ([#1469](https://github.com/googleapis/java-logging-logback/issues/1469)) ([aa03bc1](https://github.com/googleapis/java-logging-logback/commit/aa03bc1b32976d33bdebf31c65615139b40dba39)) + +## [0.132.6-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.5-alpha...v0.132.6-alpha) (2025-04-26) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.22.1 ([#1462](https://github.com/googleapis/java-logging-logback/issues/1462)) ([1b8419b](https://github.com/googleapis/java-logging-logback/commit/1b8419bd22ad31c20b564a29210c9522162a21b3)) +* Update dependency com.google.cloud:google-cloud-logging to v3.22.2 ([#1463](https://github.com/googleapis/java-logging-logback/issues/1463)) ([8b6ea8c](https://github.com/googleapis/java-logging-logback/commit/8b6ea8c736aeb2454cb95787651862da1364b3b5)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.46.2 ([#1461](https://github.com/googleapis/java-logging-logback/issues/1461)) ([d88928c](https://github.com/googleapis/java-logging-logback/commit/d88928cad267eaaea5e8e6009375deb8c9534bdd)) + +## [0.132.5-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.4-alpha...v0.132.5-alpha) (2025-03-20) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.22.0 ([#1456](https://github.com/googleapis/java-logging-logback/issues/1456)) ([53bdf57](https://github.com/googleapis/java-logging-logback/commit/53bdf575f5a07aed814c00a34f1ea89ae2505661)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.45.1 ([#1454](https://github.com/googleapis/java-logging-logback/issues/1454)) ([ad3bd57](https://github.com/googleapis/java-logging-logback/commit/ad3bd5765dd0b92b039c4d78826f75f78dfb1a50)) + +## [0.132.4-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.3-alpha...v0.132.4-alpha) (2025-02-26) + + +### Bug Fixes + +* Fix Appender default flushlevel to be consistent with java-logging ([#1441](https://github.com/googleapis/java-logging-logback/issues/1441)) ([34a9539](https://github.com/googleapis/java-logging-logback/commit/34a95398682235d87145280cd255498baacfd24b)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.21.4 ([#1445](https://github.com/googleapis/java-logging-logback/issues/1445)) ([2f32d9b](https://github.com/googleapis/java-logging-logback/commit/2f32d9bb814a8b648233ca091cd872f935b5dc6a)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.44.0 ([#1444](https://github.com/googleapis/java-logging-logback/issues/1444)) ([fd5204a](https://github.com/googleapis/java-logging-logback/commit/fd5204a32cc85b5513641f627d17c4a0b2fbd177)) + +## [0.132.3-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.2-alpha...v0.132.3-alpha) (2025-02-13) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.21.3 ([#1437](https://github.com/googleapis/java-logging-logback/issues/1437)) ([254f896](https://github.com/googleapis/java-logging-logback/commit/254f896906892bbc30194735f161862ea0048915)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.43.0 ([#1435](https://github.com/googleapis/java-logging-logback/issues/1435)) ([d0e0366](https://github.com/googleapis/java-logging-logback/commit/d0e0366f958e24b69674ceef12826f049b1e3a14)) +* Update dependency io.opentelemetry:opentelemetry-api to v1.47.0 ([#1432](https://github.com/googleapis/java-logging-logback/issues/1432)) ([4041f04](https://github.com/googleapis/java-logging-logback/commit/4041f04b1ee7e2854d0a0babc6363501c97cbef5)) +* Update dependency io.opentelemetry:opentelemetry-context to v1.47.0 ([#1433](https://github.com/googleapis/java-logging-logback/issues/1433)) ([40e073a](https://github.com/googleapis/java-logging-logback/commit/40e073aaf21cea3fe82e74cb1cc8e80c060be610)) + +## [0.132.2-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.1-alpha...v0.132.2-alpha) (2025-01-30) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.21.2 ([#1427](https://github.com/googleapis/java-logging-logback/issues/1427)) ([b5bba85](https://github.com/googleapis/java-logging-logback/commit/b5bba8556e4dbe66ad3982278fa940d31dbb2586)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.42.0 ([#1426](https://github.com/googleapis/java-logging-logback/issues/1426)) ([23b8220](https://github.com/googleapis/java-logging-logback/commit/23b8220fdd62c4450c8f50d57289e36725335b5f)) +* Update dependency org.easymock:easymock to v5.5.0 ([#1406](https://github.com/googleapis/java-logging-logback/issues/1406)) ([1bc21d7](https://github.com/googleapis/java-logging-logback/commit/1bc21d72cf376cbada8cf0e44f285db9b282db18)) + +## [0.132.1-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.132.0-alpha...v0.132.1-alpha) (2025-01-13) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.21.1 ([#1422](https://github.com/googleapis/java-logging-logback/issues/1422)) ([667fc03](https://github.com/googleapis/java-logging-logback/commit/667fc0333eebd83d5039ece261cdc87be7b10ae9)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.41.1 ([#1420](https://github.com/googleapis/java-logging-logback/issues/1420)) ([712b9c4](https://github.com/googleapis/java-logging-logback/commit/712b9c41979606f2445b26ce52a6fd3b34121dc8)) + +## [0.132.0-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.17-alpha...v0.132.0-alpha) (2024-12-13) + + +### Features + +* Introduce `java.time` ([#1410](https://github.com/googleapis/java-logging-logback/issues/1410)) ([05b12ae](https://github.com/googleapis/java-logging-logback/commit/05b12ae67795a842dcc39394592c274e5bef1b9d)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.21.0 ([#1409](https://github.com/googleapis/java-logging-logback/issues/1409)) ([16bf603](https://github.com/googleapis/java-logging-logback/commit/16bf603d27bd66f0af97aa3292cf6034a0bd6de3)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.41.0 ([#1414](https://github.com/googleapis/java-logging-logback/issues/1414)) ([1ded46c](https://github.com/googleapis/java-logging-logback/commit/1ded46cc30a8795b3de87449accc4beec869875d)) + +## [0.131.17-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.16-alpha...v0.131.17-alpha) (2024-11-18) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.40.0 ([#1405](https://github.com/googleapis/java-logging-logback/issues/1405)) ([7a5fdf2](https://github.com/googleapis/java-logging-logback/commit/7a5fdf234e922bcf7369f9c1923dfe7e913c1a81)) + +## [0.131.16-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.15-alpha...v0.131.16-alpha) (2024-10-27) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.20.6 ([#1398](https://github.com/googleapis/java-logging-logback/issues/1398)) ([b6249d2](https://github.com/googleapis/java-logging-logback/commit/b6249d2f3aa32665f8f1605156b6733878dcec75)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.39.0 ([#1396](https://github.com/googleapis/java-logging-logback/issues/1396)) ([b89566a](https://github.com/googleapis/java-logging-logback/commit/b89566aef4ddaf9c88ce3c6a99402c703e73bada)) + +## [0.131.15-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.14-alpha...v0.131.15-alpha) (2024-10-24) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.20.5 ([#1393](https://github.com/googleapis/java-logging-logback/issues/1393)) ([cfdb3ce](https://github.com/googleapis/java-logging-logback/commit/cfdb3ce8817d26b5a9af0bbd666f1a2978281708)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.38.0 ([#1391](https://github.com/googleapis/java-logging-logback/issues/1391)) ([bc1a9a5](https://github.com/googleapis/java-logging-logback/commit/bc1a9a56873f05730f3bbdd6c8a1c1319a91a4be)) + +## [0.131.14-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.13-alpha...v0.131.14-alpha) (2024-10-08) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.20.4 ([39f485f](https://github.com/googleapis/java-logging-logback/commit/39f485f209eb418fbd92465844b07ea984d09c05)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.37.0 ([39f485f](https://github.com/googleapis/java-logging-logback/commit/39f485f209eb418fbd92465844b07ea984d09c05)) + +## [0.131.13-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.12-alpha...v0.131.13-alpha) (2024-10-01) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.20.3 ([#1377](https://github.com/googleapis/java-logging-logback/issues/1377)) ([72a49b0](https://github.com/googleapis/java-logging-logback/commit/72a49b03a583490e7dc26e3f8fdfa4321e5d793f)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.36.0 ([#1373](https://github.com/googleapis/java-logging-logback/issues/1373)) ([9ac2116](https://github.com/googleapis/java-logging-logback/commit/9ac211648aabd1c9aedd99c332c8ec565e9e5cf0)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.36.1 ([#1376](https://github.com/googleapis/java-logging-logback/issues/1376)) ([24cf11b](https://github.com/googleapis/java-logging-logback/commit/24cf11b70361752abf5b682332fe2947c76cf8f0)) + +## [0.131.12-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.11-alpha...v0.131.12-alpha) (2024-09-13) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.20.2 ([#1370](https://github.com/googleapis/java-logging-logback/issues/1370)) ([9067a01](https://github.com/googleapis/java-logging-logback/commit/9067a011952ff4d8a61e4c12612f533735e24640)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.35.0 ([#1366](https://github.com/googleapis/java-logging-logback/issues/1366)) ([ae406d3](https://github.com/googleapis/java-logging-logback/commit/ae406d3b8111471374eeecb87d82d5321cb5c3ae)) + +## [0.131.11-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.10-alpha...v0.131.11-alpha) (2024-08-22) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.20.1 ([#1362](https://github.com/googleapis/java-logging-logback/issues/1362)) ([9cf5174](https://github.com/googleapis/java-logging-logback/commit/9cf5174f56923777767a45291e455913aad509c5)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.34.0 ([#1357](https://github.com/googleapis/java-logging-logback/issues/1357)) ([d0e31ce](https://github.com/googleapis/java-logging-logback/commit/d0e31ce98b85c8db624ca944c092ce7d8372a9f2)) + +## [0.131.10-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.9-alpha...v0.131.10-alpha) (2024-08-02) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.20.0 ([#1351](https://github.com/googleapis/java-logging-logback/issues/1351)) ([e3634d7](https://github.com/googleapis/java-logging-logback/commit/e3634d70284d2f80c03072e9aecd93b505f22551)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.33.0 ([#1349](https://github.com/googleapis/java-logging-logback/issues/1349)) ([47fc8f1](https://github.com/googleapis/java-logging-logback/commit/47fc8f1745c5852ad8cff429715d2dbfbd4301ee)) +* Update dependency org.easymock:easymock to v5.4.0 ([#1350](https://github.com/googleapis/java-logging-logback/issues/1350)) ([4c752fc](https://github.com/googleapis/java-logging-logback/commit/4c752fc6fc5d5cb512dc9630b758bb8092baadb6)) + +## [0.131.9-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.8-alpha...v0.131.9-alpha) (2024-06-26) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.19.0 ([#1343](https://github.com/googleapis/java-logging-logback/issues/1343)) ([727a41a](https://github.com/googleapis/java-logging-logback/commit/727a41ad449f38c28c4b6e8b4047929caa6a4f7b)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.32.0 ([#1341](https://github.com/googleapis/java-logging-logback/issues/1341)) ([8e44982](https://github.com/googleapis/java-logging-logback/commit/8e44982d398f7895654b78d57b1279f1100c04a1)) + +## [0.131.8-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.7-alpha...v0.131.8-alpha) (2024-06-12) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.18.0 ([#1330](https://github.com/googleapis/java-logging-logback/issues/1330)) ([17a6999](https://github.com/googleapis/java-logging-logback/commit/17a69990019b29a1b2b5d4ababde0dcc58ddf6e4)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.31.0 ([#1329](https://github.com/googleapis/java-logging-logback/issues/1329)) ([7e46520](https://github.com/googleapis/java-logging-logback/commit/7e465207bc055c589fd8fadf8978dede5cf375e1)) +* Update dependency org.easymock:easymock to v5.3.0 ([#1332](https://github.com/googleapis/java-logging-logback/issues/1332)) ([6a34ad4](https://github.com/googleapis/java-logging-logback/commit/6a34ad4f537d704657372dd2227a650f738ebaff)) + +## [0.131.7-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.6-alpha...v0.131.7-alpha) (2024-05-21) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.17.2 ([#1319](https://github.com/googleapis/java-logging-logback/issues/1319)) ([dac9a65](https://github.com/googleapis/java-logging-logback/commit/dac9a65e63ca389ede0b76101916f51c067bffee)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.30.1 ([#1318](https://github.com/googleapis/java-logging-logback/issues/1318)) ([3cfb237](https://github.com/googleapis/java-logging-logback/commit/3cfb237ecc4a26ca0d0dc787143138491f6eaa30)) + +## [0.131.6-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.5-alpha...v0.131.6-alpha) (2024-05-06) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.17.1 ([#1312](https://github.com/googleapis/java-logging-logback/issues/1312)) ([9b9b940](https://github.com/googleapis/java-logging-logback/commit/9b9b940aabc28fd1925406636e6108791652824c)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.30.0 ([#1311](https://github.com/googleapis/java-logging-logback/issues/1311)) ([d6505b0](https://github.com/googleapis/java-logging-logback/commit/d6505b05f6792033a1b2a290655d76ac678eaf7a)) + +## [0.131.5-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.4-alpha...v0.131.5-alpha) (2024-04-26) + + +### Dependencies + +* Update actions/checkout action to v4 ([#1301](https://github.com/googleapis/java-logging-logback/issues/1301)) ([614fc8f](https://github.com/googleapis/java-logging-logback/commit/614fc8fd1e9358652af91ada9ad49b809ac671c0)) +* Update actions/github-script action to v7 ([#1299](https://github.com/googleapis/java-logging-logback/issues/1299)) ([80d6f4c](https://github.com/googleapis/java-logging-logback/commit/80d6f4c2157be25e0270f6e0d7d6bf4e1f571818)) +* Update actions/setup-java action to v4 ([#1302](https://github.com/googleapis/java-logging-logback/issues/1302)) ([06b124a](https://github.com/googleapis/java-logging-logback/commit/06b124a45c61fb150ca928d698466a5a7d4678d3)) +* Update dependency com.google.cloud:google-cloud-logging to v3.17.0 ([#1303](https://github.com/googleapis/java-logging-logback/issues/1303)) ([7131e07](https://github.com/googleapis/java-logging-logback/commit/7131e07ee3eaef7379b1ddb33fadb9f5d89222de)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.29.0 ([#1304](https://github.com/googleapis/java-logging-logback/issues/1304)) ([2e87cf9](https://github.com/googleapis/java-logging-logback/commit/2e87cf91b170e79731a8318a51bc07f9b2df0d30)) + +## [0.131.4-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.3-alpha...v0.131.4-alpha) (2024-03-21) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.16.2 ([#1292](https://github.com/googleapis/java-logging-logback/issues/1292)) ([8adf74b](https://github.com/googleapis/java-logging-logback/commit/8adf74b7a6235e7a2e872753970461a9bb030ec6)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.28.1 ([#1291](https://github.com/googleapis/java-logging-logback/issues/1291)) ([67d5a93](https://github.com/googleapis/java-logging-logback/commit/67d5a93d4a53aa71d121e99302d364af0cd42488)) + +## [0.131.3-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.2-alpha...v0.131.3-alpha) (2024-03-07) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.16.1 ([#1284](https://github.com/googleapis/java-logging-logback/issues/1284)) ([4238f61](https://github.com/googleapis/java-logging-logback/commit/4238f61915b00fcf795fad9ffe397b75ea9bc8ce)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.27.0 ([#1283](https://github.com/googleapis/java-logging-logback/issues/1283)) ([143b46e](https://github.com/googleapis/java-logging-logback/commit/143b46efe16c841e931eca7bba33dee7b2c5f34d)) + +## [0.131.2-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.1-alpha...v0.131.2-alpha) (2024-02-20) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.16.0 ([#1277](https://github.com/googleapis/java-logging-logback/issues/1277)) ([0d41898](https://github.com/googleapis/java-logging-logback/commit/0d41898589c387534092de130534da9db9855258)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.25.0 ([#1272](https://github.com/googleapis/java-logging-logback/issues/1272)) ([7cddc26](https://github.com/googleapis/java-logging-logback/commit/7cddc263635adf63a1cbd1dc5398550e149dc3db)) + +## [0.131.1-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.131.0-alpha...v0.131.1-alpha) (2024-02-08) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.17 ([#1268](https://github.com/googleapis/java-logging-logback/issues/1268)) ([d591dec](https://github.com/googleapis/java-logging-logback/commit/d591deceefc645cb19e75d7f97eb033ee4fcd50f)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.24.0 ([#1263](https://github.com/googleapis/java-logging-logback/issues/1263)) ([531bead](https://github.com/googleapis/java-logging-logback/commit/531bead08fc57cc5c99d8cbee68e68b80049785c)) + +## [0.131.0-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.30-alpha...v0.131.0-alpha) (2024-01-25) + + +### Features + +* Add graal native image profile for logback library ([#1246](https://github.com/googleapis/java-logging-logback/issues/1246)) ([ab58b88](https://github.com/googleapis/java-logging-logback/commit/ab58b887d041783335d2ab4f04b47651ae91ef77)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.16 ([#1257](https://github.com/googleapis/java-logging-logback/issues/1257)) ([28c23f6](https://github.com/googleapis/java-logging-logback/commit/28c23f67f827c42ad4790fd7f9122d227daa3a8d)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.22.0 ([#1250](https://github.com/googleapis/java-logging-logback/issues/1250)) ([730c46c](https://github.com/googleapis/java-logging-logback/commit/730c46cbd6f59f9d370eb6a10b5dd00d58ca0506)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.23.0 ([#1256](https://github.com/googleapis/java-logging-logback/issues/1256)) ([df7800b](https://github.com/googleapis/java-logging-logback/commit/df7800bb5205ad4cecc0a44ccbde8141174063ad)) + +## [0.130.30-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.29-alpha...v0.130.30-alpha) (2024-01-11) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.15 ([#1242](https://github.com/googleapis/java-logging-logback/issues/1242)) ([fea658a](https://github.com/googleapis/java-logging-logback/commit/fea658ac5116e5e74cb594ac3f8cc5ce215bbd20)) + +## [0.130.29-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.28-alpha...v0.130.29-alpha) (2024-01-10) + + +### Dependencies + +* Update dependency ch.qos.logback:logback-classic to v1.2.13 [security] ([#1216](https://github.com/googleapis/java-logging-logback/issues/1216)) ([024527f](https://github.com/googleapis/java-logging-logback/commit/024527f66b72363f7b49c3037fe7e460008632a9)) +* Update dependency ch.qos.logback:logback-core to v1.2.13 [security] ([#1217](https://github.com/googleapis/java-logging-logback/issues/1217)) ([40bca11](https://github.com/googleapis/java-logging-logback/commit/40bca117740abadcd31726a70be13bdeb7d092df)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.21.0 ([#1236](https://github.com/googleapis/java-logging-logback/issues/1236)) ([b90ef6c](https://github.com/googleapis/java-logging-logback/commit/b90ef6c624cad01bd116cdc2662e98b5a7e9ad47)) + +## [0.130.28-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.27-alpha...v0.130.28-alpha) (2023-12-01) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.14 ([#1219](https://github.com/googleapis/java-logging-logback/issues/1219)) ([97f47d8](https://github.com/googleapis/java-logging-logback/commit/97f47d83b4c0a91e65448bdbe15f1fad4ca1794e)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.20.0 ([#1218](https://github.com/googleapis/java-logging-logback/issues/1218)) ([056479e](https://github.com/googleapis/java-logging-logback/commit/056479e1fcf2876e5f639ea5f470c6ca3bf17041)) + +## [0.130.27-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.26-alpha...v0.130.27-alpha) (2023-11-07) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.13 ([#1206](https://github.com/googleapis/java-logging-logback/issues/1206)) ([6d8c31e](https://github.com/googleapis/java-logging-logback/commit/6d8c31ea6dab2491580cee0eaf2df2d2859fce7d)) + +## [0.130.26-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.25-alpha...v0.130.26-alpha) (2023-11-06) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.19.0 ([#1202](https://github.com/googleapis/java-logging-logback/issues/1202)) ([de74492](https://github.com/googleapis/java-logging-logback/commit/de7449217b8aec171a2816c7c02f952812f28a0b)) + +## [0.130.25-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.24-alpha...v0.130.25-alpha) (2023-10-26) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.12 ([#1194](https://github.com/googleapis/java-logging-logback/issues/1194)) ([146ebf3](https://github.com/googleapis/java-logging-logback/commit/146ebf3e2b192f434d46cee8404e54848761d46a)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.18.0 ([#1192](https://github.com/googleapis/java-logging-logback/issues/1192)) ([f2b8d9c](https://github.com/googleapis/java-logging-logback/commit/f2b8d9cd8666004b3329abcbe322a15927ea1abd)) + +## [0.130.24-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.23-alpha...v0.130.24-alpha) (2023-10-11) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.11 ([#1184](https://github.com/googleapis/java-logging-logback/issues/1184)) ([02501e4](https://github.com/googleapis/java-logging-logback/commit/02501e4f1c0eacb42dedb8d80e2fa3a2d4444ff4)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.17.0 ([#1182](https://github.com/googleapis/java-logging-logback/issues/1182)) ([86d4702](https://github.com/googleapis/java-logging-logback/commit/86d470271639d8151fe94734f2f9da76c8ef0392)) + +## [0.130.23-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.22-alpha...v0.130.23-alpha) (2023-09-28) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.10 ([#1175](https://github.com/googleapis/java-logging-logback/issues/1175)) ([e7a3d1f](https://github.com/googleapis/java-logging-logback/commit/e7a3d1f4df3101193095ff384a1dcdd74fba9edd)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.16.1 ([#1173](https://github.com/googleapis/java-logging-logback/issues/1173)) ([3939e2f](https://github.com/googleapis/java-logging-logback/commit/3939e2fd01b054beac52ec2a95745cf855ac5ae1)) + +## [0.130.22-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.21-alpha...v0.130.22-alpha) (2023-09-12) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.9 ([#1166](https://github.com/googleapis/java-logging-logback/issues/1166)) ([5b48e2b](https://github.com/googleapis/java-logging-logback/commit/5b48e2be9b92ff51b740a44fcea9e0d794401960)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.15.0 ([#1165](https://github.com/googleapis/java-logging-logback/issues/1165)) ([ab8b736](https://github.com/googleapis/java-logging-logback/commit/ab8b7363a7d29d3e6771f18d2d5bf2e0f9723b00)) +* Update dependency org.easymock:easymock to v5.2.0 ([#1162](https://github.com/googleapis/java-logging-logback/issues/1162)) ([e64887e](https://github.com/googleapis/java-logging-logback/commit/e64887eb9cb5adecdaab79ebf0b1fde8c7d3fe1d)) + +## [0.130.21-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.20-alpha...v0.130.21-alpha) (2023-08-08) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.8 ([#1155](https://github.com/googleapis/java-logging-logback/issues/1155)) ([0ea1209](https://github.com/googleapis/java-logging-logback/commit/0ea1209ace869a6bfd1f8dfa177cbd40c1385e66)) + +## [0.130.20-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.19-alpha...v0.130.20-alpha) (2023-08-08) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.14.0 ([#1148](https://github.com/googleapis/java-logging-logback/issues/1148)) ([a51611f](https://github.com/googleapis/java-logging-logback/commit/a51611ff8da09470e7cc013482dcda14b10580d4)) + +## [0.130.19-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.18-alpha...v0.130.19-alpha) (2023-07-25) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.7 ([#1140](https://github.com/googleapis/java-logging-logback/issues/1140)) ([5e6a583](https://github.com/googleapis/java-logging-logback/commit/5e6a5831ce82a18f3622b1535663cab0cde1c754)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.13.1 ([#1138](https://github.com/googleapis/java-logging-logback/issues/1138)) ([8fd63d2](https://github.com/googleapis/java-logging-logback/commit/8fd63d236090bb63f1dabf02f381b831fa27864b)) + +## [0.130.18-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.17-alpha...v0.130.18-alpha) (2023-07-17) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.6 ([#1133](https://github.com/googleapis/java-logging-logback/issues/1133)) ([940c3bb](https://github.com/googleapis/java-logging-logback/commit/940c3bba964cc88925607dba9f6e2435778dad50)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.13.0 ([#1129](https://github.com/googleapis/java-logging-logback/issues/1129)) ([75d23eb](https://github.com/googleapis/java-logging-logback/commit/75d23eb4e1f8ada5366f63c34ea1face963e64e2)) + +## [0.130.17-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.16-alpha...v0.130.17-alpha) (2023-06-23) + + +### Dependencies + +* Update google-cloud-logging to v3.15.5, google-cloud-shared-dependencies to v3.12.0. ([#1122](https://github.com/googleapis/java-logging-logback/issues/1122)) ([840402d](https://github.com/googleapis/java-logging-logback/commit/840402d9c1c32ba775b99cdeb1b1a058c7544232)) + +## [0.130.16-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.15-alpha...v0.130.16-alpha) (2023-06-22) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.4 ([#1115](https://github.com/googleapis/java-logging-logback/issues/1115)) ([7af80f7](https://github.com/googleapis/java-logging-logback/commit/7af80f7786f57cf1a2bd69de2f882db426b36039)) + +## [0.130.15-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.14-alpha...v0.130.15-alpha) (2023-06-09) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.3 ([#1104](https://github.com/googleapis/java-logging-logback/issues/1104)) ([4ae7361](https://github.com/googleapis/java-logging-logback/commit/4ae73611151f5c5158d5c7802f8a54e618eb326f)) + +## [0.130.14-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.13-alpha...v0.130.14-alpha) (2023-06-07) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.11.0 ([#1100](https://github.com/googleapis/java-logging-logback/issues/1100)) ([5401f8a](https://github.com/googleapis/java-logging-logback/commit/5401f8a04e4560369ac731011db8641fa58b9970)) + +## [0.130.13-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.130.12-alpha...v0.130.13-alpha) (2023-05-31) + + +### Bug Fixes + +* Update cloud-java-team as CODEOWNERS for delegated client release ([#1081](https://github.com/googleapis/java-logging-logback/issues/1081)) ([957b2f9](https://github.com/googleapis/java-logging-logback/commit/957b2f991b885f3e6f9a11c067c8b79fa40342bd)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.2 ([#1090](https://github.com/googleapis/java-logging-logback/issues/1090)) ([db41e9d](https://github.com/googleapis/java-logging-logback/commit/db41e9d5f532f8384f69d7489cca55512f642f88)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.10.1 ([#1088](https://github.com/googleapis/java-logging-logback/issues/1088)) ([86c7712](https://github.com/googleapis/java-logging-logback/commit/86c7712a26d95edb365816d0eedd48c5af2d4f75)) + +## [0.130.12-alpha](https://github.com/googleapis/java-logging-logback/compare/v0.129.11...v0.130.12-alpha) (2023-05-15) + + +### Bug Fixes + +* Fix release tag ([2ec09ff](https://github.com/googleapis/java-logging-logback/commit/2ec09fff140570e0fa36f8994172a22590cfc65f)) +* **java:** Add native image configurations for logging-logback ([#1075](https://github.com/googleapis/java-logging-logback/issues/1075)) ([22bf85d](https://github.com/googleapis/java-logging-logback/commit/22bf85df9d2e94c7d0ce4d51061c2e07334b8b8e)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.15.0 ([#1073](https://github.com/googleapis/java-logging-logback/issues/1073)) ([ff1ed3d](https://github.com/googleapis/java-logging-logback/commit/ff1ed3dfcdf38b4523d993a0a36268add21d1449)) +* Update dependency com.google.cloud:google-cloud-logging to v3.15.1 ([#1079](https://github.com/googleapis/java-logging-logback/issues/1079)) ([3a4ffe3](https://github.com/googleapis/java-logging-logback/commit/3a4ffe345161f9f2586b389452992ca4399c59eb)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.9.0 ([#1074](https://github.com/googleapis/java-logging-logback/issues/1074)) ([503679f](https://github.com/googleapis/java-logging-logback/commit/503679fc71f2f5b26b4bc854b7571bda8bc73b88)) + +## [0.129.11](https://github.com/googleapis/java-logging-logback/compare/v0.129.10...v0.129.11) (2023-04-27) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.14.8 ([#1060](https://github.com/googleapis/java-logging-logback/issues/1060)) ([f6b9108](https://github.com/googleapis/java-logging-logback/commit/f6b9108379961c599d18f12a3e80f12ae2aa1195)) +* Update dependency com.google.cloud:google-cloud-logging to v3.14.9 ([#1065](https://github.com/googleapis/java-logging-logback/issues/1065)) ([241f6bf](https://github.com/googleapis/java-logging-logback/commit/241f6bf6e496a99fd6d66574d8a5b6f7b8bafb7d)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.8.0 ([#1064](https://github.com/googleapis/java-logging-logback/issues/1064)) ([dd8888e](https://github.com/googleapis/java-logging-logback/commit/dd8888e81dee19e88c1160691701381fbb3765ee)) + +## [0.129.10](https://github.com/googleapis/java-logging-logback/compare/v0.129.9...v0.129.10) (2023-04-20) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.7.0 ([#1057](https://github.com/googleapis/java-logging-logback/issues/1057)) ([b41cb99](https://github.com/googleapis/java-logging-logback/commit/b41cb99c137ab04d1b0f943d4ef630ebfac4fcc1)) + +## [0.129.9](https://github.com/googleapis/java-logging-logback/compare/v0.129.8...v0.129.9) (2023-03-28) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.6.0 ([#1047](https://github.com/googleapis/java-logging-logback/issues/1047)) ([b63cc05](https://github.com/googleapis/java-logging-logback/commit/b63cc055f2921f58a4b23c1b7544c426b779b529)) + +## [0.129.8](https://github.com/googleapis/java-logging-logback/compare/v0.129.7...v0.129.8) (2023-03-21) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.14.6 ([#1042](https://github.com/googleapis/java-logging-logback/issues/1042)) ([ba54943](https://github.com/googleapis/java-logging-logback/commit/ba5494303b724394930d12f88e8d5c86ce65d96a)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.5.0 ([#1039](https://github.com/googleapis/java-logging-logback/issues/1039)) ([2fe972e](https://github.com/googleapis/java-logging-logback/commit/2fe972eeacb7cebd8c328853e80513a02740ae93)) + +## [0.129.7](https://github.com/googleapis/java-logging-logback/compare/v0.129.6...v0.129.7) (2023-03-02) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.14.5 ([#1028](https://github.com/googleapis/java-logging-logback/issues/1028)) ([db45d90](https://github.com/googleapis/java-logging-logback/commit/db45d906a41ec2da3424b29b023651af180166a3)) + +## [0.129.6](https://github.com/googleapis/java-logging-logback/compare/v0.129.5...v0.129.6) (2023-02-23) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.14.4 ([#1020](https://github.com/googleapis/java-logging-logback/issues/1020)) ([b6e0404](https://github.com/googleapis/java-logging-logback/commit/b6e0404029f1d688303042224ca568355ad9c4b9)) + +## [0.129.5](https://github.com/googleapis/java-logging-logback/compare/v0.129.4...v0.129.5) (2023-02-17) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.3.0 ([#1015](https://github.com/googleapis/java-logging-logback/issues/1015)) ([4c10364](https://github.com/googleapis/java-logging-logback/commit/4c10364e276e9f3a7a2cb16889551fa21e06d00e)) + +## [0.129.4](https://github.com/googleapis/java-logging-logback/compare/v0.129.3...v0.129.4) (2023-02-08) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.14.3 ([#1003](https://github.com/googleapis/java-logging-logback/issues/1003)) ([143eb6a](https://github.com/googleapis/java-logging-logback/commit/143eb6a20b9402b18a214abeecfd43711f941c4c)) + +## [0.129.3](https://github.com/googleapis/java-logging-logback/compare/v0.129.2...v0.129.3) (2023-02-06) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.2.0 ([#1000](https://github.com/googleapis/java-logging-logback/issues/1000)) ([7b7788d](https://github.com/googleapis/java-logging-logback/commit/7b7788dbac34af9bb60e9907651e74d9d66f51d1)) + +## [0.129.2](https://github.com/googleapis/java-logging-logback/compare/v0.129.1...v0.129.2) (2023-01-25) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.14.2 ([#993](https://github.com/googleapis/java-logging-logback/issues/993)) ([8bda6b7](https://github.com/googleapis/java-logging-logback/commit/8bda6b705ac774499558f3f2ceaf954229e1d89d)) + +## [0.129.1](https://github.com/googleapis/java-logging-logback/compare/v0.129.0...v0.129.1) (2023-01-23) + + +### Bug Fixes + +* **java:** Skip fixing poms for special modules ([#1744](https://github.com/googleapis/java-logging-logback/issues/1744)) ([#987](https://github.com/googleapis/java-logging-logback/issues/987)) ([9d5061c](https://github.com/googleapis/java-logging-logback/commit/9d5061cc772694298c8c0b77c7b2c938546b7571)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.1.2 ([#988](https://github.com/googleapis/java-logging-logback/issues/988)) ([b879b0f](https://github.com/googleapis/java-logging-logback/commit/b879b0f16a58d830389610479696ad4d714d2096)) + +## [0.129.0](https://github.com/googleapis/java-logging-logback/compare/v0.128.10...v0.129.0) (2023-01-12) + + +### Features + +* Add support for batching configuration ([#977](https://github.com/googleapis/java-logging-logback/issues/977)) ([afbe09c](https://github.com/googleapis/java-logging-logback/commit/afbe09c62647bca8eb9aa51f5ab63a13396800f7)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.14.1 ([#980](https://github.com/googleapis/java-logging-logback/issues/980)) ([6758979](https://github.com/googleapis/java-logging-logback/commit/6758979c3e3abaf24a8bfd3eb3c6b7cf954b7913)) + +## [0.128.10](https://github.com/googleapis/java-logging-logback/compare/v0.128.9...v0.128.10) (2023-01-09) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.1.1 ([#974](https://github.com/googleapis/java-logging-logback/issues/974)) ([f738117](https://github.com/googleapis/java-logging-logback/commit/f7381170991cdec0fd736cda4cf3c224e5a8aae9)) + +## [0.128.9](https://github.com/googleapis/java-logging-logback/compare/v0.128.8...v0.128.9) (2023-01-05) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.14.0 ([#968](https://github.com/googleapis/java-logging-logback/issues/968)) ([6d41f9a](https://github.com/googleapis/java-logging-logback/commit/6d41f9a3e274d78a9dfdc458feff9644206ee6b9)) + +## [0.128.8](https://github.com/googleapis/java-logging-logback/compare/v0.128.7...v0.128.8) (2022-12-31) + + +### Dependencies + +* Update dependency org.easymock:easymock to v5.1.0 ([#964](https://github.com/googleapis/java-logging-logback/issues/964)) ([9dce372](https://github.com/googleapis/java-logging-logback/commit/9dce37235bb91f3afef7965b93a841c045ef5881)) + +## [0.128.7](https://github.com/googleapis/java-logging-logback/compare/v0.128.6...v0.128.7) (2022-12-27) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.13.7 ([#960](https://github.com/googleapis/java-logging-logback/issues/960)) ([6b81913](https://github.com/googleapis/java-logging-logback/commit/6b81913f3944c03717d4c012b435279aa8fbda96)) + +## [0.128.6](https://github.com/googleapis/java-logging-logback/compare/v0.128.5...v0.128.6) (2022-12-07) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.13.5 ([#952](https://github.com/googleapis/java-logging-logback/issues/952)) ([7a45289](https://github.com/googleapis/java-logging-logback/commit/7a452893e98656ce72498af8de0e20af4f9ef7cf)) +* Update dependency com.google.cloud:google-cloud-logging to v3.13.6 ([#954](https://github.com/googleapis/java-logging-logback/issues/954)) ([b1bc20f](https://github.com/googleapis/java-logging-logback/commit/b1bc20f2449e2532e2d803763eb4e9bf2768af07)) + +## [0.128.5](https://github.com/googleapis/java-logging-logback/compare/v0.128.4...v0.128.5) (2022-12-06) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.13.4 ([#947](https://github.com/googleapis/java-logging-logback/issues/947)) ([8c73b42](https://github.com/googleapis/java-logging-logback/commit/8c73b42d75467eb9e8236f778e1d26be969a84e3)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.1.0 ([#949](https://github.com/googleapis/java-logging-logback/issues/949)) ([43bc0eb](https://github.com/googleapis/java-logging-logback/commit/43bc0eb4a67d2a7f7b68981496069508a6e5849e)) + +## [0.128.4](https://github.com/googleapis/java-logging-logback/compare/v0.128.3...v0.128.4) (2022-12-02) + + +### Bug Fixes + +* Add a partner team as approvers for PRs ([#942](https://github.com/googleapis/java-logging-logback/issues/942)) ([21fdffe](https://github.com/googleapis/java-logging-logback/commit/21fdffe649dfaf91d6a4cec2020b68d5a6fa75ae)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.13.3 ([#944](https://github.com/googleapis/java-logging-logback/issues/944)) ([5eb8498](https://github.com/googleapis/java-logging-logback/commit/5eb8498a78724933e804adab6499100cad07a4d1)) + +## [0.128.3](https://github.com/googleapis/java-logging-logback/compare/v0.128.2...v0.128.3) (2022-11-22) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.13.2 ([#936](https://github.com/googleapis/java-logging-logback/issues/936)) ([9df68d4](https://github.com/googleapis/java-logging-logback/commit/9df68d4126e9739dfd3a8066797494c02c873215)) + +## [0.128.2](https://github.com/googleapis/java-logging-logback/compare/v0.128.1...v0.128.2) (2022-11-17) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.13.1 ([#931](https://github.com/googleapis/java-logging-logback/issues/931)) ([e67043f](https://github.com/googleapis/java-logging-logback/commit/e67043f31e49aab9793de20d38598d174d4afe6c)) + +## [0.128.1](https://github.com/googleapis/java-logging-logback/compare/v0.128.0...v0.128.1) (2022-11-07) + + +### Bug Fixes + +* Switch instrumentation code to return version stored in DEFAULT_INSTRUMENTATION_VERSION ([#918](https://github.com/googleapis/java-logging-logback/issues/918)) ([90b824a](https://github.com/googleapis/java-logging-logback/commit/90b824acee5052d17df8eb1b444044f774359353)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.13.0 ([#920](https://github.com/googleapis/java-logging-logback/issues/920)) ([3a46bf5](https://github.com/googleapis/java-logging-logback/commit/3a46bf542a22359ed04e384714a767dc1b4071cc)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.6 ([#923](https://github.com/googleapis/java-logging-logback/issues/923)) ([31a32db](https://github.com/googleapis/java-logging-logback/commit/31a32db7975f90d526acedd32a710dac6c463292)) + +## [0.128.0](https://github.com/googleapis/java-logging-logback/compare/v0.127.0...v0.128.0) (2022-11-04) + + +### Features + +* Add support for instrumentation version annotations ([#916](https://github.com/googleapis/java-logging-logback/issues/916)) ([c721557](https://github.com/googleapis/java-logging-logback/commit/c721557f0963a487dfc6950241933752ae58e170)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.12.1 ([#913](https://github.com/googleapis/java-logging-logback/issues/913)) ([2281ada](https://github.com/googleapis/java-logging-logback/commit/2281ada7325d866430efcb0c08df014508c8e965)) + +## [0.127.0](https://github.com/googleapis/java-logging-logback/compare/v0.126.17...v0.127.0) (2022-10-31) + + +### Features + +* Add support for partialSuccess ([#908](https://github.com/googleapis/java-logging-logback/issues/908)) ([1699f70](https://github.com/googleapis/java-logging-logback/commit/1699f708994f462f263218ad32ca50654229e89c)) + +## [0.126.17](https://github.com/googleapis/java-logging-logback/compare/v0.126.16...v0.126.17) (2022-10-28) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.11.10 ([#899](https://github.com/googleapis/java-logging-logback/issues/899)) ([70d015a](https://github.com/googleapis/java-logging-logback/commit/70d015a89c275f4c545a78b93aece80bc8e69832)) +* Update dependency com.google.cloud:google-cloud-logging to v3.12.0 ([#902](https://github.com/googleapis/java-logging-logback/issues/902)) ([bea7516](https://github.com/googleapis/java-logging-logback/commit/bea751654410f61a45ca3ee209aaf0474cadc7b6)) + +## [0.126.16](https://github.com/googleapis/java-logging-logback/compare/v0.126.15...v0.126.16) (2022-10-24) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.11.9 ([#893](https://github.com/googleapis/java-logging-logback/issues/893)) ([bad411e](https://github.com/googleapis/java-logging-logback/commit/bad411ed0827dafb988987d1adf5c09426f40a37)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.5 ([#892](https://github.com/googleapis/java-logging-logback/issues/892)) ([caface0](https://github.com/googleapis/java-logging-logback/commit/caface0dc2a4f5bcd99ca2206599406d1bb40b98)) +* Update dependency org.easymock:easymock to v5.0.1 ([#896](https://github.com/googleapis/java-logging-logback/issues/896)) ([4c2d895](https://github.com/googleapis/java-logging-logback/commit/4c2d895d95ac818cadec1938ae0d437e26b052c5)) + +## [0.126.15](https://github.com/googleapis/java-logging-logback/compare/v0.126.14...v0.126.15) (2022-10-15) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.11.8 ([#886](https://github.com/googleapis/java-logging-logback/issues/886)) ([c7e9199](https://github.com/googleapis/java-logging-logback/commit/c7e91992726a98d2f519685d78c0568f3e83f0b2)) + +## [0.126.14](https://github.com/googleapis/java-logging-logback/compare/v0.126.13...v0.126.14) (2022-10-15) + + +### Dependencies + +* Update dependency org.easymock:easymock to v5 ([#882](https://github.com/googleapis/java-logging-logback/issues/882)) ([70e889f](https://github.com/googleapis/java-logging-logback/commit/70e889f4a2dfe03b9a336b65a8cc570f771d5e02)) + +## [0.126.13](https://github.com/googleapis/java-logging-logback/compare/v0.126.12...v0.126.13) (2022-10-13) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.11.7 ([#878](https://github.com/googleapis/java-logging-logback/issues/878)) ([da0ecd3](https://github.com/googleapis/java-logging-logback/commit/da0ecd3ba028631ded93353b757e2ab048ece5f3)) + +## [0.126.12](https://github.com/googleapis/java-logging-logback/compare/v0.126.11...v0.126.12) (2022-10-07) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.11.5 ([#870](https://github.com/googleapis/java-logging-logback/issues/870)) ([9ba2c1e](https://github.com/googleapis/java-logging-logback/commit/9ba2c1e4546bcf9d702a37c9ff975dc3536b8d1d)) + +## [0.126.11](https://github.com/googleapis/java-logging-logback/compare/v0.126.10...v0.126.11) (2022-10-03) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.11.4 ([#864](https://github.com/googleapis/java-logging-logback/issues/864)) ([0629bd9](https://github.com/googleapis/java-logging-logback/commit/0629bd97e99f9a844a08df555ad9e4b322932598)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.4 ([#866](https://github.com/googleapis/java-logging-logback/issues/866)) ([7a387e2](https://github.com/googleapis/java-logging-logback/commit/7a387e29fbdd9e7496a54d49ab8213aaf0f360ef)) + +## [0.126.10](https://github.com/googleapis/java-logging-logback/compare/v0.126.9...v0.126.10) (2022-09-23) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.11.3 ([#855](https://github.com/googleapis/java-logging-logback/issues/855)) ([dcfa68e](https://github.com/googleapis/java-logging-logback/commit/dcfa68ec93795561150a80ab83df323e1663a6a1)) + +## [0.126.9](https://github.com/googleapis/java-logging-logback/compare/v0.126.9-SNAPSHOT...v0.126.9) (2022-09-21) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.11.2 ([#851](https://github.com/googleapis/java-logging-logback/issues/851)) ([8398054](https://github.com/googleapis/java-logging-logback/commit/839805453380af7edad91da226e85ef98e02ad90)) + +## [0.126.8](https://github.com/googleapis/java-logging-logback/compare/v0.126.7...v0.126.8) (2022-09-15) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.3 ([#844](https://github.com/googleapis/java-logging-logback/issues/844)) ([b6c4eaf](https://github.com/googleapis/java-logging-logback/commit/b6c4eaf5fc7f40af0f01d5c9bc90de5e77283f85)) + +## [0.126.7](https://github.com/googleapis/java-logging-logback/compare/v0.126.6...v0.126.7) (2022-09-09) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-logging to v3.10.7 ([#837](https://github.com/googleapis/java-logging-logback/issues/837)) ([8971d89](https://github.com/googleapis/java-logging-logback/commit/8971d8954ead09663350633baee7c889fa24cc39)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.2 ([#839](https://github.com/googleapis/java-logging-logback/issues/839)) ([32e6a11](https://github.com/googleapis/java-logging-logback/commit/32e6a119dd8d13db96fcd3cecb89976065eeb103)) + +## [0.126.6](https://github.com/googleapis/java-logging-logback/compare/v0.126.5...v0.126.6) (2022-08-31) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.10.6 ([#829](https://github.com/googleapis/java-logging-logback/issues/829)) ([66cd295](https://github.com/googleapis/java-logging-logback/commit/66cd29574ba3b30955fb6dedef62bbe2a3e327b7)) + +## [0.126.5](https://github.com/googleapis/java-logging-logback/compare/v0.126.4...v0.126.5) (2022-08-19) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.10.3 ([#825](https://github.com/googleapis/java-logging-logback/issues/825)) ([d4affdd](https://github.com/googleapis/java-logging-logback/commit/d4affdd002e913bca52c90a4ce31fa01981a6fb8)) + +## [0.126.4](https://github.com/googleapis/java-logging-logback/compare/v0.126.3...v0.126.4) (2022-08-10) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.10.2 ([#817](https://github.com/googleapis/java-logging-logback/issues/817)) ([595ff1d](https://github.com/googleapis/java-logging-logback/commit/595ff1dbf63512ce1f3a5424f939fd71e2a69e75)) + +## [0.126.3](https://github.com/googleapis/java-logging-logback/compare/v0.126.2...v0.126.3) (2022-08-02) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.1 ([#813](https://github.com/googleapis/java-logging-logback/issues/813)) ([e20b874](https://github.com/googleapis/java-logging-logback/commit/e20b8745ecdcf802eb53ca0c8a99a7c6e05b861a)) + +## [0.126.2](https://github.com/googleapis/java-logging-logback/compare/v0.126.1...v0.126.2) (2022-07-31) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v3 ([#808](https://github.com/googleapis/java-logging-logback/issues/808)) ([63b0ae4](https://github.com/googleapis/java-logging-logback/commit/63b0ae46ca2101b50dc4d261b6952980bac7ba5a)) + +## [0.126.1](https://github.com/googleapis/java-logging-logback/compare/v0.126.0...v0.126.1) (2022-07-13) + + +### Bug Fixes + +* enable longpaths support for windows test ([#1485](https://github.com/googleapis/java-logging-logback/issues/1485)) ([#802](https://github.com/googleapis/java-logging-logback/issues/802)) ([1498ecb](https://github.com/googleapis/java-logging-logback/commit/1498ecb3b0db8f01c7e2ccc78303ff753ec99616)) + +## [0.126.0](https://github.com/googleapis/java-logging-logback/compare/v0.125.0...v0.126.0) (2022-06-30) + + +### Features + +* java template no longer require clirr ([#1469](https://github.com/googleapis/java-logging-logback/issues/1469)) ([#791](https://github.com/googleapis/java-logging-logback/issues/791)) ([f1c5cb1](https://github.com/googleapis/java-logging-logback/commit/f1c5cb1c091a3a26a7ced39f97844abc2cf751f1)) + +## [0.125.0](https://github.com/googleapis/java-logging-logback/compare/v0.124.3...v0.125.0) (2022-06-28) + + +### Features + +* Add support for library instrumentation ([#789](https://github.com/googleapis/java-logging-logback/issues/789)) ([3a08dac](https://github.com/googleapis/java-logging-logback/commit/3a08dac0971b3f9566652a5e14e1d6555d0c133b)) + +## [0.124.3](https://github.com/googleapis/java-logging-logback/compare/v0.124.2...v0.124.3) (2022-06-27) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.10.0 ([#784](https://github.com/googleapis/java-logging-logback/issues/784)) ([5560093](https://github.com/googleapis/java-logging-logback/commit/5560093450fef1742f99cbd8a04325b2d80782be)) + +## [0.124.2](https://github.com/googleapis/java-logging-logback/compare/v0.124.1...v0.124.2) (2022-06-23) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.13.0 ([#780](https://github.com/googleapis/java-logging-logback/issues/780)) ([254f4ef](https://github.com/googleapis/java-logging-logback/commit/254f4efd49015c33704b2a7d1d8c117af00af0af)) + +### [0.124.1](https://github.com/googleapis/java-logging-logback/compare/v0.124.0...v0.124.1) (2022-05-25) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.9.0 ([#773](https://github.com/googleapis/java-logging-logback/issues/773)) ([dc89dca](https://github.com/googleapis/java-logging-logback/commit/dc89dca17d8c2f0c06a20b339ab47b0fb8dfed9a)) + +## [0.124.0](https://github.com/googleapis/java-logging-logback/compare/v0.123.0...v0.124.0) (2022-05-24) + + +### Features + +* add build scripts for native image testing in Java 17 ([#1440](https://github.com/googleapis/java-logging-logback/issues/1440)) ([#765](https://github.com/googleapis/java-logging-logback/issues/765)) ([c90e5e5](https://github.com/googleapis/java-logging-logback/commit/c90e5e57f0676f8e76c41643a9d817a1a2e3374a)) + + +### Bug Fixes + +* Reenable staleness bot ([#738](https://github.com/googleapis/java-logging-logback/issues/738)) ([947a4ae](https://github.com/googleapis/java-logging-logback/commit/947a4aec8ded52e0d7da6cb16c7289c7b060a3d7)) + + +### Dependencies + +* **java:** update actions/github-script action to v5 ([#1339](https://github.com/googleapis/java-logging-logback/issues/1339)) ([#666](https://github.com/googleapis/java-logging-logback/issues/666)) ([ee4400d](https://github.com/googleapis/java-logging-logback/commit/ee4400dc1c2c70269f24085cc50f58f563106adf)) +* update actions/checkout action to v3 ([#705](https://github.com/googleapis/java-logging-logback/issues/705)) ([a7427a0](https://github.com/googleapis/java-logging-logback/commit/a7427a0648847c123d6bea0d752fb892a412468d)) +* update actions/github-script action to v6 ([#686](https://github.com/googleapis/java-logging-logback/issues/686)) ([82a0f26](https://github.com/googleapis/java-logging-logback/commit/82a0f264d054827c9816ddb4400e952d3e95776e)) +* update dependency ch.qos.logback:logback-classic to v1.2.11 ([#714](https://github.com/googleapis/java-logging-logback/issues/714)) ([181ac4a](https://github.com/googleapis/java-logging-logback/commit/181ac4abadf852752b95e44fe1ae3bfbed924aad)) +* update dependency com.google.cloud:google-cloud-logging to v3.6.1 ([#660](https://github.com/googleapis/java-logging-logback/issues/660)) ([c80212f](https://github.com/googleapis/java-logging-logback/commit/c80212f5131b7df1349d0fbd8212383978952a29)) +* update dependency com.google.cloud:google-cloud-logging to v3.6.2 ([#674](https://github.com/googleapis/java-logging-logback/issues/674)) ([c0db36f](https://github.com/googleapis/java-logging-logback/commit/c0db36f0ae9c4754880229d4ac5e9e52d0e95086)) +* update dependency com.google.cloud:google-cloud-logging to v3.6.3 ([#691](https://github.com/googleapis/java-logging-logback/issues/691)) ([e346f21](https://github.com/googleapis/java-logging-logback/commit/e346f2198385d3f86f3770765f55a4bef742fdbf)) +* update dependency com.google.cloud:google-cloud-logging to v3.7.0 ([#698](https://github.com/googleapis/java-logging-logback/issues/698)) ([2a5ddba](https://github.com/googleapis/java-logging-logback/commit/2a5ddbaaa54ca5d8bc26887de3038e7ee8c2d4f8)) +* update dependency com.google.cloud:google-cloud-logging to v3.7.1 ([#713](https://github.com/googleapis/java-logging-logback/issues/713)) ([4d6f04d](https://github.com/googleapis/java-logging-logback/commit/4d6f04dc9644c205965eecdbdf40ad3d022fa076)) +* update dependency com.google.cloud:google-cloud-logging to v3.7.2 ([#722](https://github.com/googleapis/java-logging-logback/issues/722)) ([d0d55ef](https://github.com/googleapis/java-logging-logback/commit/d0d55ef8ccdf39433d6cca4fad22186ff8ada456)) +* update dependency com.google.cloud:google-cloud-logging to v3.7.3 ([#727](https://github.com/googleapis/java-logging-logback/issues/727)) ([34cb2a7](https://github.com/googleapis/java-logging-logback/commit/34cb2a76799f83ddd66cabec216dcb8746b82613)) +* update dependency com.google.cloud:google-cloud-logging to v3.7.4 ([#731](https://github.com/googleapis/java-logging-logback/issues/731)) ([3e48cb0](https://github.com/googleapis/java-logging-logback/commit/3e48cb03a757d2237dd2da251c1d34468adfa4e4)) +* update dependency com.google.cloud:google-cloud-logging to v3.7.5 ([#744](https://github.com/googleapis/java-logging-logback/issues/744)) ([e7cfbe2](https://github.com/googleapis/java-logging-logback/commit/e7cfbe236a3a0125f4174fc9e74f1a9f6c260b1d)) +* update dependency com.google.cloud:google-cloud-logging to v3.7.6 ([#759](https://github.com/googleapis/java-logging-logback/issues/759)) ([0128793](https://github.com/googleapis/java-logging-logback/commit/01287934b04cf8f487308b34080123c7b4065ef7)) +* update dependency com.google.cloud:google-cloud-logging to v3.8.0 ([#767](https://github.com/googleapis/java-logging-logback/issues/767)) ([2727c81](https://github.com/googleapis/java-logging-logback/commit/2727c81a2c925b01aabc40baaba5958a507a3dd7)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.10.0 ([#739](https://github.com/googleapis/java-logging-logback/issues/739)) ([e603a4b](https://github.com/googleapis/java-logging-logback/commit/e603a4b385d80bd8afb6e31824aaa34484d69e2f)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.11.0 ([#764](https://github.com/googleapis/java-logging-logback/issues/764)) ([2418128](https://github.com/googleapis/java-logging-logback/commit/24181282039618fc9024bb0360f3fb46c2d34290)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.12.0 ([#768](https://github.com/googleapis/java-logging-logback/issues/768)) ([6b46865](https://github.com/googleapis/java-logging-logback/commit/6b46865ff8b9b28eb98a6c7504143018bbf8b073)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.7.0 ([#669](https://github.com/googleapis/java-logging-logback/issues/669)) ([b60562a](https://github.com/googleapis/java-logging-logback/commit/b60562aa1ebf3538efc3b868537002949a93e39b)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.8.0 ([#707](https://github.com/googleapis/java-logging-logback/issues/707)) ([198d41f](https://github.com/googleapis/java-logging-logback/commit/198d41fc905fc532a8ba7de511dfe9c928235c47)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.9.0 ([#723](https://github.com/googleapis/java-logging-logback/issues/723)) ([fd500fe](https://github.com/googleapis/java-logging-logback/commit/fd500fe480cfd05c54a899f14b84cad1e26fc1a0)) +* update dependency org.slf4j:slf4j-api to v1.7.34 ([#664](https://github.com/googleapis/java-logging-logback/issues/664)) ([a9273b8](https://github.com/googleapis/java-logging-logback/commit/a9273b8b06c092a484d9b6f9e0495461178cec88)) +* update dependency org.slf4j:slf4j-api to v1.7.35 ([#668](https://github.com/googleapis/java-logging-logback/issues/668)) ([5b2232d](https://github.com/googleapis/java-logging-logback/commit/5b2232d13087ee21596d06377a608ed9c59d9976)) +* update dependency org.slf4j:slf4j-api to v1.7.36 ([#681](https://github.com/googleapis/java-logging-logback/issues/681)) ([bd4c4da](https://github.com/googleapis/java-logging-logback/commit/bd4c4da1a260f5261a6b3daa522aa9fea0e6deb3)) + +## [0.123.0](https://github.com/googleapis/java-logging-logback/compare/v0.122.22...v0.123.0) (2022-05-19) + + +### Features + +* add build scripts for native image testing in Java 17 ([#1440](https://github.com/googleapis/java-logging-logback/issues/1440)) ([#765](https://github.com/googleapis/java-logging-logback/issues/765)) ([c90e5e5](https://github.com/googleapis/java-logging-logback/commit/c90e5e57f0676f8e76c41643a9d817a1a2e3374a)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.8.0 ([#767](https://github.com/googleapis/java-logging-logback/issues/767)) ([2727c81](https://github.com/googleapis/java-logging-logback/commit/2727c81a2c925b01aabc40baaba5958a507a3dd7)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.11.0 ([#764](https://github.com/googleapis/java-logging-logback/issues/764)) ([2418128](https://github.com/googleapis/java-logging-logback/commit/24181282039618fc9024bb0360f3fb46c2d34290)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.12.0 ([#768](https://github.com/googleapis/java-logging-logback/issues/768)) ([6b46865](https://github.com/googleapis/java-logging-logback/commit/6b46865ff8b9b28eb98a6c7504143018bbf8b073)) + +### [0.122.22](https://github.com/googleapis/java-logging-logback/compare/v0.122.21...v0.122.22) (2022-05-05) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.7.6 ([#759](https://github.com/googleapis/java-logging-logback/issues/759)) ([0128793](https://github.com/googleapis/java-logging-logback/commit/01287934b04cf8f487308b34080123c7b4065ef7)) + +### [0.122.21](https://github.com/googleapis/java-logging-logback/compare/v0.122.20...v0.122.21) (2022-04-21) + + +### Bug Fixes + +* Reenable staleness bot ([#738](https://github.com/googleapis/java-logging-logback/issues/738)) ([947a4ae](https://github.com/googleapis/java-logging-logback/commit/947a4aec8ded52e0d7da6cb16c7289c7b060a3d7)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.7.5 ([#744](https://github.com/googleapis/java-logging-logback/issues/744)) ([e7cfbe2](https://github.com/googleapis/java-logging-logback/commit/e7cfbe236a3a0125f4174fc9e74f1a9f6c260b1d)) + +### [0.122.20](https://github.com/googleapis/java-logging-logback/compare/v0.122.19...v0.122.20) (2022-04-15) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.10.0 ([#739](https://github.com/googleapis/java-logging-logback/issues/739)) ([e603a4b](https://github.com/googleapis/java-logging-logback/commit/e603a4b385d80bd8afb6e31824aaa34484d69e2f)) + +### [0.122.19](https://github.com/googleapis/java-logging-logback/compare/v0.122.18...v0.122.19) (2022-04-01) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.7.4 ([#731](https://github.com/googleapis/java-logging-logback/issues/731)) ([3e48cb0](https://github.com/googleapis/java-logging-logback/commit/3e48cb03a757d2237dd2da251c1d34468adfa4e4)) + +### [0.122.18](https://github.com/googleapis/java-logging-logback/compare/v0.122.17...v0.122.18) (2022-03-30) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.7.3 ([#727](https://github.com/googleapis/java-logging-logback/issues/727)) ([34cb2a7](https://github.com/googleapis/java-logging-logback/commit/34cb2a76799f83ddd66cabec216dcb8746b82613)) + +### [0.122.17](https://github.com/googleapis/java-logging-logback/compare/v0.122.16...v0.122.17) (2022-03-29) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.7.2 ([#722](https://github.com/googleapis/java-logging-logback/issues/722)) ([d0d55ef](https://github.com/googleapis/java-logging-logback/commit/d0d55ef8ccdf39433d6cca4fad22186ff8ada456)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.9.0 ([#723](https://github.com/googleapis/java-logging-logback/issues/723)) ([fd500fe](https://github.com/googleapis/java-logging-logback/commit/fd500fe480cfd05c54a899f14b84cad1e26fc1a0)) + +### [0.122.16](https://github.com/googleapis/java-logging-logback/compare/v0.122.15...v0.122.16) (2022-03-10) + + +### Dependencies + +* update actions/checkout action to v3 ([#705](https://github.com/googleapis/java-logging-logback/issues/705)) ([a7427a0](https://github.com/googleapis/java-logging-logback/commit/a7427a0648847c123d6bea0d752fb892a412468d)) +* update dependency ch.qos.logback:logback-classic to v1.2.11 ([#714](https://github.com/googleapis/java-logging-logback/issues/714)) ([181ac4a](https://github.com/googleapis/java-logging-logback/commit/181ac4abadf852752b95e44fe1ae3bfbed924aad)) +* update dependency com.google.cloud:google-cloud-logging to v3.7.1 ([#713](https://github.com/googleapis/java-logging-logback/issues/713)) ([4d6f04d](https://github.com/googleapis/java-logging-logback/commit/4d6f04dc9644c205965eecdbdf40ad3d022fa076)) + +### [0.122.15](https://github.com/googleapis/java-logging-logback/compare/v0.122.14...v0.122.15) (2022-03-03) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.7.0 ([#698](https://github.com/googleapis/java-logging-logback/issues/698)) ([2a5ddba](https://github.com/googleapis/java-logging-logback/commit/2a5ddbaaa54ca5d8bc26887de3038e7ee8c2d4f8)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.8.0 ([#707](https://github.com/googleapis/java-logging-logback/issues/707)) ([198d41f](https://github.com/googleapis/java-logging-logback/commit/198d41fc905fc532a8ba7de511dfe9c928235c47)) + +### [0.122.14](https://github.com/googleapis/java-logging-logback/compare/v0.122.13...v0.122.14) (2022-02-14) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.6.3 ([#691](https://github.com/googleapis/java-logging-logback/issues/691)) ([e346f21](https://github.com/googleapis/java-logging-logback/commit/e346f2198385d3f86f3770765f55a4bef742fdbf)) + +### [0.122.13](https://github.com/googleapis/java-logging-logback/compare/v0.122.12...v0.122.13) (2022-02-11) + + +### Dependencies + +* update actions/github-script action to v6 ([#686](https://github.com/googleapis/java-logging-logback/issues/686)) ([82a0f26](https://github.com/googleapis/java-logging-logback/commit/82a0f264d054827c9816ddb4400e952d3e95776e)) + +### [0.122.12](https://github.com/googleapis/java-logging-logback/compare/v0.122.11...v0.122.12) (2022-02-09) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.6.2 ([#674](https://github.com/googleapis/java-logging-logback/issues/674)) ([c0db36f](https://github.com/googleapis/java-logging-logback/commit/c0db36f0ae9c4754880229d4ac5e9e52d0e95086)) +* update dependency org.slf4j:slf4j-api to v1.7.36 ([#681](https://github.com/googleapis/java-logging-logback/issues/681)) ([bd4c4da](https://github.com/googleapis/java-logging-logback/commit/bd4c4da1a260f5261a6b3daa522aa9fea0e6deb3)) + +### [0.122.11](https://github.com/googleapis/java-logging-logback/compare/v0.122.10...v0.122.11) (2022-02-03) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.6.1 ([#660](https://github.com/googleapis/java-logging-logback/issues/660)) ([c80212f](https://github.com/googleapis/java-logging-logback/commit/c80212f5131b7df1349d0fbd8212383978952a29)) + +## [0.123.0](https://github.com/googleapis/java-logging-logback/compare/v0.122.9...v0.123.0) (2022-01-18) + + +### Features + +* Allow customizing written log entries by exposing parameters via appender configuration ([#625](https://github.com/googleapis/java-logging-logback/issues/625)) ([87d259f](https://github.com/googleapis/java-logging-logback/commit/87d259fe6453107a71560acb85b62ea30ccdd8ed)) +* enable auto-population of missing metadata in logs and printing structured logs to stdout ([#654](https://github.com/googleapis/java-logging-logback/issues/654)) ([6530782](https://github.com/googleapis/java-logging-logback/commit/65307826f1f352e621eb1c24a867319e1bfe08ec)) + + +### Bug Fixes + +* **java:** run Maven in plain console-friendly mode ([#1301](https://www.github.com/googleapis/java-logging-logback/issues/1301)) ([#621](https://www.github.com/googleapis/java-logging-logback/issues/621)) ([e5de531](https://www.github.com/googleapis/java-logging-logback/commit/e5de531465015ae735e45ee5b6dc52bdd281ee6e)) + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.6.0 ([#643](https://github.com/googleapis/java-logging-logback/issues/643)) ([21fdd35](https://github.com/googleapis/java-logging-logback/commit/21fdd3554ed2778075fec62a87176ad5e8a6f391)) +* update dependency org.easymock:easymock to v4 ([#640](https://github.com/googleapis/java-logging-logback/issues/640)) ([c1c5afc](https://github.com/googleapis/java-logging-logback/commit/c1c5afcf7a4501295e253c663fd4ac05c2fcd339)) +* update dependency org.slf4j:slf4j-api to v1.7.33 ([#652](https://github.com/googleapis/java-logging-logback/issues/652)) ([37ca717](https://github.com/googleapis/java-logging-logback/commit/37ca7179c455451fdd34baae0463223d67a36b5b)) + + +### [0.122.9](https://www.github.com/googleapis/java-logging-logback/compare/v0.122.8...v0.122.9) (2022-01-10) + + +### Dependencies + +* update logback.version to v1.2.10 ([#635](https://www.github.com/googleapis/java-logging-logback/issues/635)) ([8facf7d](https://www.github.com/googleapis/java-logging-logback/commit/8facf7d234042fb52dec04513762894f9fb373eb)) + +### [0.122.8](https://www.github.com/googleapis/java-logging-logback/compare/v0.122.7...v0.122.8) (2022-01-07) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.5.3 ([#632](https://www.github.com/googleapis/java-logging-logback/issues/632)) ([5cd871f](https://www.github.com/googleapis/java-logging-logback/commit/5cd871f8149570aaa01d1b6381cbb2cf8c71e3da)) +* update logback.version to v1.2.9 ([#614](https://www.github.com/googleapis/java-logging-logback/issues/614)) ([71e35fb](https://www.github.com/googleapis/java-logging-logback/commit/71e35fb25d100425fcd15b4bdb5489c6ed83eb57)) + +### [0.122.7](https://www.github.com/googleapis/java-logging-logback/compare/v0.122.6...v0.122.7) (2022-01-07) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.6.0 ([#628](https://www.github.com/googleapis/java-logging-logback/issues/628)) ([c694431](https://www.github.com/googleapis/java-logging-logback/commit/c694431394d091501f05a192de57a7984da66691)) + +### [0.122.6](https://www.github.com/googleapis/java-logging-logback/compare/v0.122.5...v0.122.6) (2022-01-05) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.5.2 ([#619](https://www.github.com/googleapis/java-logging-logback/issues/619)) ([22bdc00](https://www.github.com/googleapis/java-logging-logback/commit/22bdc006c2af8d76ed6ff33b9181c7eb3fec653c)) + +### [0.122.5](https://www.github.com/googleapis/java-logging-logback/compare/v0.122.4...v0.122.5) (2021-12-16) + + +### Dependencies + +* update dependency ch.qos.logback:logback-classic to v1.2.8 ([#610](https://www.github.com/googleapis/java-logging-logback/issues/610)) ([96de06a](https://www.github.com/googleapis/java-logging-logback/commit/96de06a655b8dacdba2acb60a7c4d521ce50e943)) + +### [0.122.4](https://www.github.com/googleapis/java-logging-logback/compare/v0.122.3...v0.122.4) (2021-12-06) + + +### Bug Fixes + +* **java:** add -ntp flag to native image testing command ([#1299](https://www.github.com/googleapis/java-logging-logback/issues/1299)) ([#606](https://www.github.com/googleapis/java-logging-logback/issues/606)) ([bed601e](https://www.github.com/googleapis/java-logging-logback/commit/bed601e4c7d79cd2ea3d4b4af465b1dcdb269aaf)) +* **java:** java 17 dependency arguments ([#1266](https://www.github.com/googleapis/java-logging-logback/issues/1266)) ([#584](https://www.github.com/googleapis/java-logging-logback/issues/584)) ([12437b7](https://www.github.com/googleapis/java-logging-logback/commit/12437b7b6a34339dac648163f91a34732ffa06c3)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.4.0 ([#590](https://www.github.com/googleapis/java-logging-logback/issues/590)) ([f01ab41](https://www.github.com/googleapis/java-logging-logback/commit/f01ab41dd716e4e95b08f93bfb68991506ae4064)) +* update dependency com.google.cloud:google-cloud-logging to v3.5.0 ([#602](https://www.github.com/googleapis/java-logging-logback/issues/602)) ([c50b22b](https://www.github.com/googleapis/java-logging-logback/commit/c50b22bb49100f81fd29e41bdf0411b7c8d158b1)) +* update dependency com.google.cloud:google-cloud-logging to v3.5.1 ([#605](https://www.github.com/googleapis/java-logging-logback/issues/605)) ([0539880](https://www.github.com/googleapis/java-logging-logback/commit/053988021f17d198e7169bf385ca7afeac11bf21)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.5.0 ([#596](https://www.github.com/googleapis/java-logging-logback/issues/596)) ([d96e7c7](https://www.github.com/googleapis/java-logging-logback/commit/d96e7c729dd3beed697f131c50cc51fa09cce4f6)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.5.1 ([#604](https://www.github.com/googleapis/java-logging-logback/issues/604)) ([528a520](https://www.github.com/googleapis/java-logging-logback/commit/528a52090fd0c77e571ecca7959572e867e313b6)) +* update logback.version to v1.2.7 ([#595](https://www.github.com/googleapis/java-logging-logback/issues/595)) ([b3b7e9d](https://www.github.com/googleapis/java-logging-logback/commit/b3b7e9de2c18fdbed09905c86b9d6e5113ba1f0b)) + +### [0.122.3](https://www.github.com/googleapis/java-logging-logback/compare/v0.122.2...v0.122.3) (2021-10-21) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.3.0 ([#578](https://www.github.com/googleapis/java-logging-logback/issues/578)) ([407fdf1](https://www.github.com/googleapis/java-logging-logback/commit/407fdf1a54a161184d5440ed359ba164e4d1c4b8)) + +### [0.122.2](https://www.github.com/googleapis/java-logging-logback/compare/v0.122.1...v0.122.2) (2021-10-19) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.4.0 ([#573](https://www.github.com/googleapis/java-logging-logback/issues/573)) ([c2f8501](https://www.github.com/googleapis/java-logging-logback/commit/c2f8501e3f66e4a3085a485715fa13b79fb222f4)) + +### [0.122.1](https://www.github.com/googleapis/java-logging-logback/compare/v0.122.0...v0.122.1) (2021-09-29) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.2.0 ([#562](https://www.github.com/googleapis/java-logging-logback/issues/562)) ([3f84793](https://www.github.com/googleapis/java-logging-logback/commit/3f8479398de8d1a879e69bb2b1645c6ba0ae951b)) + +## [0.122.0](https://www.github.com/googleapis/java-logging-logback/compare/v0.121.14...v0.122.0) (2021-09-27) + + +### Features + +* add writeSynchronicity flag to appender configuration ([#542](https://www.github.com/googleapis/java-logging-logback/issues/542)) ([65ab6f8](https://www.github.com/googleapis/java-logging-logback/commit/65ab6f8dfbfe9f28538b905db58aadeae0182276)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.1.2 ([#543](https://www.github.com/googleapis/java-logging-logback/issues/543)) ([288a368](https://www.github.com/googleapis/java-logging-logback/commit/288a36884becc81ad5d79548162e401b6035b63b)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.3.0 ([#547](https://www.github.com/googleapis/java-logging-logback/issues/547)) ([1c745c3](https://www.github.com/googleapis/java-logging-logback/commit/1c745c34fc081d2b00d196ec8091b3d0ecab8937)) + +### [0.121.14](https://www.github.com/googleapis/java-logging-logback/compare/v0.121.13...v0.121.14) (2021-09-14) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.2.1 ([#531](https://www.github.com/googleapis/java-logging-logback/issues/531)) ([a51f68f](https://www.github.com/googleapis/java-logging-logback/commit/a51f68ffd6bc4a748119095a944cff69f3887c65)) + +### [0.121.13](https://www.github.com/googleapis/java-logging-logback/compare/v0.121.12...v0.121.13) (2021-09-13) + + +### Dependencies + +* update logback.version to v1.2.6 ([#528](https://www.github.com/googleapis/java-logging-logback/issues/528)) ([1be3b8a](https://www.github.com/googleapis/java-logging-logback/commit/1be3b8ade768b211128918a159cf092d38c0c8fd)) + +### [0.121.12](https://www.github.com/googleapis/java-logging-logback/compare/v0.121.11...v0.121.12) (2021-09-03) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.1.1 ([#517](https://www.github.com/googleapis/java-logging-logback/issues/517)) ([6e94107](https://www.github.com/googleapis/java-logging-logback/commit/6e941072ae6dbfd510c8570ac70f03ec8fc8337e)) + +### [0.121.11](https://www.github.com/googleapis/java-logging-logback/compare/v0.121.10...v0.121.11) (2021-08-31) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.2.0 ([#511](https://www.github.com/googleapis/java-logging-logback/issues/511)) ([ac2caac](https://www.github.com/googleapis/java-logging-logback/commit/ac2caac2b0e122d79e3ff5f9f70b45119aaeb3e4)) + +### [0.121.10](https://www.github.com/googleapis/java-logging-logback/compare/v0.121.9...v0.121.10) (2021-08-26) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.1.0 ([#503](https://www.github.com/googleapis/java-logging-logback/issues/503)) ([efae435](https://www.github.com/googleapis/java-logging-logback/commit/efae435eb44b16b50cd10dea6c5b88f07f592a1d)) + +### [0.121.9](https://www.github.com/googleapis/java-logging-logback/compare/v0.121.8...v0.121.9) (2021-08-23) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.1.0 ([#497](https://www.github.com/googleapis/java-logging-logback/issues/497)) ([b0a8b66](https://www.github.com/googleapis/java-logging-logback/commit/b0a8b66db199e0cc8c84d823d7ad0cd9483dd5e9)) + +### [0.121.8](https://www.github.com/googleapis/java-logging-logback/compare/v0.121.7...v0.121.8) (2021-08-12) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3.0.1 ([#489](https://www.github.com/googleapis/java-logging-logback/issues/489)) ([fb2a891](https://www.github.com/googleapis/java-logging-logback/commit/fb2a8917347f3603e87c3ffe9f9b58014a6e723a)) + +### [0.121.7](https://www.github.com/googleapis/java-logging-logback/compare/v0.121.6...v0.121.7) (2021-08-11) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.0.1 ([#485](https://www.github.com/googleapis/java-logging-logback/issues/485)) ([1c20e4c](https://www.github.com/googleapis/java-logging-logback/commit/1c20e4c15f095ce7078959dda79b10dd16cc0687)) + +### [0.121.6](https://www.github.com/googleapis/java-logging-logback/compare/v0.121.5...v0.121.6) (2021-08-11) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v3 ([#481](https://www.github.com/googleapis/java-logging-logback/issues/481)) ([9c60863](https://www.github.com/googleapis/java-logging-logback/commit/9c60863d269eecbf8f389a6f88ce810529fc1c48)) + +### [0.121.5](https://www.github.com/googleapis/java-logging-logback/compare/v0.121.4...v0.121.5) (2021-08-04) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2 ([#472](https://www.github.com/googleapis/java-logging-logback/issues/472)) ([f3b500d](https://www.github.com/googleapis/java-logging-logback/commit/f3b500d9417cf6cdc22413af94ed1bff5cc99e56)) + +### [0.121.4](https://www.github.com/googleapis/java-logging-logback/compare/v0.121.3...v0.121.4) (2021-07-27) + + +### Dependencies + +* update dependency org.slf4j:slf4j-api to v1.7.32 ([#459](https://www.github.com/googleapis/java-logging-logback/issues/459)) ([74d607b](https://www.github.com/googleapis/java-logging-logback/commit/74d607b2c3d8bde0f3d74ba4102907ee0154f3d7)) +* update logback.version ([#458](https://www.github.com/googleapis/java-logging-logback/issues/458)) ([cae7ff5](https://www.github.com/googleapis/java-logging-logback/commit/cae7ff5afd996feaf6254ab41edbd9e22db10837)) + +### [0.121.3](https://www.github.com/googleapis/java-logging-logback/compare/v0.121.2...v0.121.3) (2021-07-07) + + +### Bug Fixes + +* Add `shopt -s nullglob` to dependencies script ([#446](https://www.github.com/googleapis/java-logging-logback/issues/446)) ([446cc69](https://www.github.com/googleapis/java-logging-logback/commit/446cc6997c436a07aeda687f773a07ac3a289dac)) +* Update dependencies.sh to not break on mac ([#441](https://www.github.com/googleapis/java-logging-logback/issues/441)) ([ed8f06b](https://www.github.com/googleapis/java-logging-logback/commit/ed8f06b82491975fd745bf609666588452214a13)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v2.3.2 ([#449](https://www.github.com/googleapis/java-logging-logback/issues/449)) ([b9b3da9](https://www.github.com/googleapis/java-logging-logback/commit/b9b3da9ba39bcf77e458a87f10f3410a6f236dfb)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v1.4.0 ([#448](https://www.github.com/googleapis/java-logging-logback/issues/448)) ([1e192d2](https://www.github.com/googleapis/java-logging-logback/commit/1e192d297b0e8ac5ae6a5eadd979b29863ce5cca)) +* update dependency org.slf4j:slf4j-api to v1.7.31 ([#444](https://www.github.com/googleapis/java-logging-logback/issues/444)) ([c7881e3](https://www.github.com/googleapis/java-logging-logback/commit/c7881e3176b574d718172c214da7a9c17a5a5333)) + +### [0.121.2](https://www.github.com/googleapis/java-logging-logback/compare/v0.121.1...v0.121.2) (2021-06-09) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v2.3.1 ([#434](https://www.github.com/googleapis/java-logging-logback/issues/434)) ([43904e2](https://www.github.com/googleapis/java-logging-logback/commit/43904e284e0da986f8c1961b6fb347bfe275f0ea)) + +### [0.121.1](https://www.github.com/googleapis/java-logging-logback/compare/v0.121.0...v0.121.1) (2021-06-04) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v1.3.0 ([#430](https://www.github.com/googleapis/java-logging-logback/issues/430)) ([c7e69fd](https://www.github.com/googleapis/java-logging-logback/commit/c7e69fd9ed315c6abbcdc3d17ce5683c9407ba7c)) + +## [0.121.0](https://www.github.com/googleapis/java-logging-logback/compare/v0.120.8...v0.121.0) (2021-06-01) + + +### Features + +* add `gcf-owl-bot[bot]` to `ignoreAuthors` ([#418](https://www.github.com/googleapis/java-logging-logback/issues/418)) ([1900bbe](https://www.github.com/googleapis/java-logging-logback/commit/1900bbef7f000652d57d47a1110ad820ad42f86a)) + + +### Bug Fixes + +* update dead link ([#414](https://www.github.com/googleapis/java-logging-logback/issues/414)) ([2ff2886](https://www.github.com/googleapis/java-logging-logback/commit/2ff2886c11a13c223a5c7b114ccb7c7d189c41dd)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v2.3.0 ([#425](https://www.github.com/googleapis/java-logging-logback/issues/425)) ([788d46a](https://www.github.com/googleapis/java-logging-logback/commit/788d46a437f2e8ea1b7c1869c243051fd98a3f95)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v1.2.0 ([#415](https://www.github.com/googleapis/java-logging-logback/issues/415)) ([d5e79c8](https://www.github.com/googleapis/java-logging-logback/commit/d5e79c88e575234f837a933e5e1e5305b74eff4e)) + +### [0.120.8](https://www.github.com/googleapis/java-logging-logback/compare/v0.120.7...v0.120.8) (2021-05-13) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v2.2.3 ([#406](https://www.github.com/googleapis/java-logging-logback/issues/406)) ([4ce9666](https://www.github.com/googleapis/java-logging-logback/commit/4ce9666b4df6a052c9e643f83f1af1006d279b32)) + +### [0.120.7](https://www.github.com/googleapis/java-logging-logback/compare/v0.120.6...v0.120.7) (2021-05-11) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v1.1.0 ([#402](https://www.github.com/googleapis/java-logging-logback/issues/402)) ([120dd9a](https://www.github.com/googleapis/java-logging-logback/commit/120dd9a07e23d105eab435b435b1a1cdb09d6918)) + +### [0.120.6](https://www.github.com/googleapis/java-logging-logback/compare/v0.120.5...v0.120.6) (2021-05-03) + + +### Bug Fixes + +* release scripts from issuing overlapping phases ([#385](https://www.github.com/googleapis/java-logging-logback/issues/385)) ([dc86bee](https://www.github.com/googleapis/java-logging-logback/commit/dc86bee6bbfd8b14ea492caff3d19913520d892e)) +* typo ([#381](https://www.github.com/googleapis/java-logging-logback/issues/381)) ([36da065](https://www.github.com/googleapis/java-logging-logback/commit/36da065c4365cd1556eb7e66439f5159b2fc8b4a)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v2.2.2 ([#391](https://www.github.com/googleapis/java-logging-logback/issues/391)) ([c3f20c5](https://www.github.com/googleapis/java-logging-logback/commit/c3f20c557a0b40280588d130927d0423eb0131ed)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.21.1 ([#387](https://www.github.com/googleapis/java-logging-logback/issues/387)) ([1381132](https://www.github.com/googleapis/java-logging-logback/commit/1381132c1ae5f6d9a921eecdb972591cb7056717)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v1 ([#390](https://www.github.com/googleapis/java-logging-logback/issues/390)) ([41a5677](https://www.github.com/googleapis/java-logging-logback/commit/41a56776cf344609171c1d95feec7cf7067c59a1)) + +### [0.120.5](https://www.github.com/googleapis/java-logging-logback/compare/v0.120.4...v0.120.5) (2021-04-12) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v2.2.1 ([#376](https://www.github.com/googleapis/java-logging-logback/issues/376)) ([c22309a](https://www.github.com/googleapis/java-logging-logback/commit/c22309a21a5150891f6648745649b956202a1026)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.21.0 ([#372](https://www.github.com/googleapis/java-logging-logback/issues/372)) ([e3c710b](https://www.github.com/googleapis/java-logging-logback/commit/e3c710b700a59384070964c63cb7694c95ef525e)) + +### [0.120.4](https://www.github.com/googleapis/java-logging-logback/compare/v0.120.3...v0.120.4) (2021-03-15) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v2.2.0 ([#358](https://www.github.com/googleapis/java-logging-logback/issues/358)) ([d71792f](https://www.github.com/googleapis/java-logging-logback/commit/d71792f8d81137bb74e76ff3dad941af8a32c2b7)) + +### [0.120.3](https://www.github.com/googleapis/java-logging-logback/compare/v0.120.2...v0.120.3) (2021-03-11) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.20.1 ([#354](https://www.github.com/googleapis/java-logging-logback/issues/354)) ([aaaebd9](https://www.github.com/googleapis/java-logging-logback/commit/aaaebd9e8304b5e2f840989248b4b9329727e3e3)) + +### [0.120.2](https://www.github.com/googleapis/java-logging-logback/compare/v0.120.1...v0.120.2) (2021-02-26) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v2.1.5 ([#340](https://www.github.com/googleapis/java-logging-logback/issues/340)) ([ff8a622](https://www.github.com/googleapis/java-logging-logback/commit/ff8a6221264a4abbc0cf5a075cd8277f7368151f)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.20.0 ([#344](https://www.github.com/googleapis/java-logging-logback/issues/344)) ([e2f1f18](https://www.github.com/googleapis/java-logging-logback/commit/e2f1f18fb42bcb3b45060c0545d3976342408caa)) + +### [0.120.1](https://www.github.com/googleapis/java-logging-logback/compare/v0.120.0...v0.120.1) (2021-02-19) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.19.0 ([#336](https://www.github.com/googleapis/java-logging-logback/issues/336)) ([d3ea740](https://www.github.com/googleapis/java-logging-logback/commit/d3ea7409f53f30db706059169b1d4e55a0a731ca)) + +## [0.120.0](https://www.github.com/googleapis/java-logging-logback/compare/v0.119.7...v0.120.0) (2021-02-01) + + +### Features + +* allow flush level OFF ([#319](https://www.github.com/googleapis/java-logging-logback/issues/319)) ([b7898d2](https://www.github.com/googleapis/java-logging-logback/commit/b7898d287bc96b879ebc0cac18cb4774eba95e0d)) + + +### Documentation + +* fix broken cloud link ([#315](https://www.github.com/googleapis/java-logging-logback/issues/315)) ([dddbeaf](https://www.github.com/googleapis/java-logging-logback/commit/dddbeaf35f6825bded644b4abff9da39cd2bdda2)) + +### [0.119.7](https://www.github.com/googleapis/java-logging-logback/compare/v0.119.6...v0.119.7) (2021-01-26) + + +### Dependencies + +* update api-commons ([#305](https://www.github.com/googleapis/java-logging-logback/issues/305)) ([8f5b2e5](https://www.github.com/googleapis/java-logging-logback/commit/8f5b2e5bf92c5cc269910decc1d80a738776b2dc)) + +### [0.119.6](https://www.github.com/googleapis/java-logging-logback/compare/v0.119.5...v0.119.6) (2021-01-25) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v2.1.3 ([#301](https://www.github.com/googleapis/java-logging-logback/issues/301)) ([a868ed3](https://www.github.com/googleapis/java-logging-logback/commit/a868ed3ac4aee561f581051954ab9346676268bb)) + +### [0.119.5](https://www.github.com/googleapis/java-logging-logback/compare/v0.119.4...v0.119.5) (2021-01-14) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.18.0 ([#291](https://www.github.com/googleapis/java-logging-logback/issues/291)) ([030bf19](https://www.github.com/googleapis/java-logging-logback/commit/030bf1919fb3b3d68ec668c4ae13f4aeaad2ce0e)) + +### [0.119.4](https://www.github.com/googleapis/java-logging-logback/compare/v0.119.3...v0.119.4) (2021-01-13) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.17.1 ([#286](https://www.github.com/googleapis/java-logging-logback/issues/286)) ([af4b1a7](https://www.github.com/googleapis/java-logging-logback/commit/af4b1a7ef8b467468aedf669536f0a36c1b31a8b)) + +### [0.119.3](https://www.github.com/googleapis/java-logging-logback/compare/v0.119.2...v0.119.3) (2021-01-07) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v2.1.2 ([#278](https://www.github.com/googleapis/java-logging-logback/issues/278)) ([9b3b7dd](https://www.github.com/googleapis/java-logging-logback/commit/9b3b7ddec45614ce0820e04fa42fcc8b4e478d67)) + +### [0.119.2](https://www.github.com/googleapis/java-logging-logback/compare/v0.119.1...v0.119.2) (2020-12-15) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.17.0 ([#273](https://www.github.com/googleapis/java-logging-logback/issues/273)) ([167dfe8](https://www.github.com/googleapis/java-logging-logback/commit/167dfe84af36879556df50f94793ccd6d530f120)) + +### [0.119.1](https://www.github.com/googleapis/java-logging-logback/compare/v0.119.0...v0.119.1) (2020-12-14) + + +### Bug Fixes + +* Add cleanup for Trace context ([#266](https://www.github.com/googleapis/java-logging-logback/issues/266)) ([af43dfa](https://www.github.com/googleapis/java-logging-logback/commit/af43dfa5a35ba5e2f68de1a7f9c0de838b69c0cf)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v2.1.0 ([#268](https://www.github.com/googleapis/java-logging-logback/issues/268)) ([462730e](https://www.github.com/googleapis/java-logging-logback/commit/462730e9008aa084850d24d41ea1778cca8d7ba6)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.16.1 ([469b414](https://www.github.com/googleapis/java-logging-logback/commit/469b4144f5fb37ecf6f99ff5020492614e3d266d)) + +## [0.119.0](https://www.github.com/googleapis/java-logging-logback/compare/v0.118.7...v0.119.0) (2020-12-08) + + +### Features + +* adds support to group logs of the same http request ([#257](https://www.github.com/googleapis/java-logging-logback/issues/257)) ([d98051c](https://www.github.com/googleapis/java-logging-logback/commit/d98051c969de254c128a92f330175bc085a75855)) + + +### Bug Fixes + +* logback logging exceptions with null message ([#251](https://www.github.com/googleapis/java-logging-logback/issues/251)) ([d9856f6](https://www.github.com/googleapis/java-logging-logback/commit/d9856f6c88458648f81612fc8b15315abcec9683)) + +### [0.118.7](https://www.github.com/googleapis/java-logging-logback/compare/v0.118.6...v0.118.7) (2020-12-02) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.16.0 ([#252](https://www.github.com/googleapis/java-logging-logback/issues/252)) ([fcc1123](https://www.github.com/googleapis/java-logging-logback/commit/fcc11237516458a0a40817b445cbcb471584cff2)) + +### [0.118.6](https://www.github.com/googleapis/java-logging-logback/compare/v0.118.5...v0.118.6) (2020-11-16) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v2 ([#237](https://www.github.com/googleapis/java-logging-logback/issues/237)) ([6e8ab77](https://www.github.com/googleapis/java-logging-logback/commit/6e8ab7798cb38252bdb2d81c473657214a908d49)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.15.0 ([#235](https://www.github.com/googleapis/java-logging-logback/issues/235)) ([524dfc9](https://www.github.com/googleapis/java-logging-logback/commit/524dfc9b76e4741578d587baea2eed4fad744f60)) + +### [0.118.5](https://www.github.com/googleapis/java-logging-logback/compare/v0.118.4...v0.118.5) (2020-11-10) + + +### Documentation + +* update README.md ([#174](https://www.github.com/googleapis/java-logging-logback/issues/174)) ([7c70aa6](https://www.github.com/googleapis/java-logging-logback/commit/7c70aa6fb6d9a7e7bb1d7e725cc6ba0067ac1be8)) + +### [0.118.4](https://www.github.com/googleapis/java-logging-logback/compare/v0.118.3...v0.118.4) (2020-11-02) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.14.1 ([#218](https://www.github.com/googleapis/java-logging-logback/issues/218)) ([cdc9c05](https://www.github.com/googleapis/java-logging-logback/commit/cdc9c056d696a1cfdf54636438d3a4f090d9ab60)) + +### [0.118.3](https://www.github.com/googleapis/java-logging-logback/compare/v0.118.2...v0.118.3) (2020-10-22) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-logging to v1.102.0 ([#159](https://www.github.com/googleapis/java-logging-logback/issues/159)) ([2720eff](https://www.github.com/googleapis/java-logging-logback/commit/2720eff070110cb8e98731f0bf49c77a4cec1170)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.10.0 ([#173](https://www.github.com/googleapis/java-logging-logback/issues/173)) ([8d38976](https://www.github.com/googleapis/java-logging-logback/commit/8d38976f44712fd691c74b23208275c4efde9b66)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.10.2 ([#183](https://www.github.com/googleapis/java-logging-logback/issues/183)) ([9a88644](https://www.github.com/googleapis/java-logging-logback/commit/9a88644046409e4c98416294d27ba9f053c3367c)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.12.1 ([#198](https://www.github.com/googleapis/java-logging-logback/issues/198)) ([288f128](https://www.github.com/googleapis/java-logging-logback/commit/288f1287b3491e40fbc48dea35269d23ba5fd0e2)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.13.0 ([#204](https://www.github.com/googleapis/java-logging-logback/issues/204)) ([c7b9c5e](https://www.github.com/googleapis/java-logging-logback/commit/c7b9c5e4ea0c83b47ceee132040eb613ff1f88b4)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.9.0 ([#157](https://www.github.com/googleapis/java-logging-logback/issues/157)) ([ac99caf](https://www.github.com/googleapis/java-logging-logback/commit/ac99caf0fa120adb94323b8949c55023d3ccea7f)) + +### [0.118.2](https://www.github.com/googleapis/java-logging-logback/compare/v0.118.1...v0.118.2) (2020-08-07) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.6 ([#141](https://www.github.com/googleapis/java-logging-logback/issues/141)) ([8c8418b](https://www.github.com/googleapis/java-logging-logback/commit/8c8418b95ea299f48d81e7ad0731446e195c023c)) + +### [0.118.1](https://www.github.com/googleapis/java-logging-logback/compare/v0.118.0...v0.118.1) (2020-07-14) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.2 ([#130](https://www.github.com/googleapis/java-logging-logback/issues/130)) ([0abc242](https://www.github.com/googleapis/java-logging-logback/commit/0abc242acb3fbb0f8fe625b274f9cbe63e3ddbfd)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.3 ([#135](https://www.github.com/googleapis/java-logging-logback/issues/135)) ([0597321](https://www.github.com/googleapis/java-logging-logback/commit/05973213cfc542f35fde047d9f7db0f9466b3830)) + +## [0.118.0](https://www.github.com/googleapis/java-logging-logback/compare/v0.117.0...v0.118.0) (2020-06-23) + + +### Features + +* **deps:** use google-cloud-shared-dependencies and flatten pom ([#105](https://www.github.com/googleapis/java-logging-logback/issues/105)) ([95410fc](https://www.github.com/googleapis/java-logging-logback/commit/95410fcb2b9d1f87fcc49930d31f4263b8608c0d)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v1.93.5 ([#71](https://www.github.com/googleapis/java-logging-logback/issues/71)) ([b4b2641](https://www.github.com/googleapis/java-logging-logback/commit/b4b2641e20dbecc20e28dc24422dcbb5c2e64e6a)) +* update dependency com.google.cloud:google-cloud-logging to v1.101.2 ([#75](https://www.github.com/googleapis/java-logging-logback/issues/75)) ([bef40a1](https://www.github.com/googleapis/java-logging-logback/commit/bef40a1d8bb7358a034026023800939e945a46d3)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.1 ([#108](https://www.github.com/googleapis/java-logging-logback/issues/108)) ([3a67939](https://www.github.com/googleapis/java-logging-logback/commit/3a67939e256b2a2923284a493abc57b3e78be996)) +* update dependency com.google.guava:guava-bom to v29 ([#77](https://www.github.com/googleapis/java-logging-logback/issues/77)) ([e4a14bf](https://www.github.com/googleapis/java-logging-logback/commit/e4a14bfa5b48d0f5a1857ab081ac46d6dcee02d0)) + + +### Documentation + +* fix example in javadoc, update version number and usage ([#92](https://www.github.com/googleapis/java-logging-logback/issues/92)) ([4ad9d23](https://www.github.com/googleapis/java-logging-logback/commit/4ad9d23996da0ae29986181b9679ed220c19b54b)) +* generate readme from synth.py ([#96](https://www.github.com/googleapis/java-logging-logback/issues/96)) ([17abe99](https://www.github.com/googleapis/java-logging-logback/commit/17abe996c2e25f593cf5dbd36a898170887fe26d)) + +## [0.117.0](https://www.github.com/googleapis/java-logging-logback/compare/0.116.0...v0.117.0) (2020-04-02) + + +### Features + +* expose flush() method in LoggingAppender ([#62](https://www.github.com/googleapis/java-logging-logback/issues/62)) ([70375e1](https://www.github.com/googleapis/java-logging-logback/commit/70375e14c9c1e0c76906c87c923e23cd7f6118e8)) + + +### Bug Fixes + +* logback error show in error reporting console ([#43](https://www.github.com/googleapis/java-logging-logback/issues/43)) ([1baab89](https://www.github.com/googleapis/java-logging-logback/commit/1baab895770144febcab3384dcfb6e7bfa896787)) + + +### Dependencies + +* update core dependencies ([#11](https://www.github.com/googleapis/java-logging-logback/issues/11)) ([8c06e9a](https://www.github.com/googleapis/java-logging-logback/commit/8c06e9ab3fc44bd738e80fc966e739e8cb9f70bb)) +* update core dependencies ([#18](https://www.github.com/googleapis/java-logging-logback/issues/18)) ([58f36de](https://www.github.com/googleapis/java-logging-logback/commit/58f36dec1a48f5d2a68b1327251350265941b438)) +* update dependency com.google.api:api-common to v1.9.0 ([#56](https://www.github.com/googleapis/java-logging-logback/issues/56)) ([e68627a](https://www.github.com/googleapis/java-logging-logback/commit/e68627aff308f83406cd6f83fcd4c121e9d15e5c)) +* update dependency com.google.cloud:google-cloud-core to v1.92.4 ([#32](https://www.github.com/googleapis/java-logging-logback/issues/32)) ([8b9574d](https://www.github.com/googleapis/java-logging-logback/commit/8b9574de2a70a5672cbfa13c3d13684066f8be05)) +* update dependency com.google.cloud:google-cloud-core to v1.92.5 ([dd8b483](https://www.github.com/googleapis/java-logging-logback/commit/dd8b48348c5a04f42e963bf1cc5d427aa6e56d3a)) +* update dependency com.google.cloud:google-cloud-core to v1.93.1 ([#44](https://www.github.com/googleapis/java-logging-logback/issues/44)) ([ba71ed8](https://www.github.com/googleapis/java-logging-logback/commit/ba71ed8c018b837ffd526228541f87c8ac6207f9)) +* update dependency com.google.cloud:google-cloud-core to v1.93.3 ([#45](https://www.github.com/googleapis/java-logging-logback/issues/45)) ([7c30736](https://www.github.com/googleapis/java-logging-logback/commit/7c3073662bc4537c8f6a08325d52d2f1ce3dee22)) +* update dependency com.google.cloud:google-cloud-logging to v1.101.0 ([#47](https://www.github.com/googleapis/java-logging-logback/issues/47)) ([585d442](https://www.github.com/googleapis/java-logging-logback/commit/585d44214e8564d8eef6f545110d244148a5f1c9)) +* update dependency com.google.cloud.samples:shared-configuration to v1.0.13 ([#55](https://www.github.com/googleapis/java-logging-logback/issues/55)) ([13eb882](https://www.github.com/googleapis/java-logging-logback/commit/13eb882573a0ae91f1875b1f554809d0682e1b64)) +* update dependency com.google.guava:guava-bom to v28.2-android ([#15](https://www.github.com/googleapis/java-logging-logback/issues/15)) ([2b7877d](https://www.github.com/googleapis/java-logging-logback/commit/2b7877dc4978043609a47fe0f7dfa8914c9e2622)) +* update dependency org.slf4j:slf4j-api to v1.7.30 ([#12](https://www.github.com/googleapis/java-logging-logback/issues/12)) ([ce949a0](https://www.github.com/googleapis/java-logging-logback/commit/ce949a0ee0f10d1276ce3da94230c6e5f57e7b4b)) diff --git a/java-logging-logback/CODE_OF_CONDUCT.md b/java-logging-logback/CODE_OF_CONDUCT.md new file mode 100644 index 000000000000..2add2547a812 --- /dev/null +++ b/java-logging-logback/CODE_OF_CONDUCT.md @@ -0,0 +1,94 @@ + +# Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of +experience, education, socio-economic status, nationality, personal appearance, +race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, or to ban temporarily or permanently any +contributor for other behaviors that they deem inappropriate, threatening, +offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +This Code of Conduct also applies outside the project spaces when the Project +Steward has a reasonable belief that an individual's behavior may have a +negative impact on the project or its community. + +## Conflict Resolution + +We do not believe that all conflict is bad; healthy debate and disagreement +often yield positive results. However, it is never okay to be disrespectful or +to engage in behavior that violates the project’s code of conduct. + +If you see someone violating the code of conduct, you are encouraged to address +the behavior directly with those involved. Many issues can be resolved quickly +and easily, and this gives people more control over the outcome of their +dispute. If you are unable to resolve the matter for any reason, or if the +behavior is threatening or harassing, report it. We are dedicated to providing +an environment where participants feel welcome and safe. + +Reports should be directed to *googleapis-stewards@google.com*, the +Project Steward(s) for *Google Cloud Client Libraries*. It is the Project Steward’s duty to +receive and address reported violations of the code of conduct. They will then +work with a committee consisting of representatives from the Open Source +Programs Office and the Google Open Source Strategy team. If for any reason you +are uncomfortable reaching out to the Project Steward, please email +opensource@google.com. + +We will investigate every complaint, but you may not receive a direct response. +We will use our discretion in determining when and how to follow up on reported +incidents, which may range from not taking action to permanent expulsion from +the project and project-sponsored spaces. We will notify the accused of the +report and provide them an opportunity to discuss it before any action is taken. +The identity of the reporter will be omitted from the details of the report +supplied to the accused. In potentially harmful situations, such as ongoing +harassment or threats to anyone's safety, we may take action without notice. + +## Attribution + +This Code of Conduct is adapted from the Contributor Covenant, version 1.4, +available at +https://www.contributor-covenant.org/version/1/4/code-of-conduct.html \ No newline at end of file diff --git a/java-logging-logback/CONTRIBUTING.md b/java-logging-logback/CONTRIBUTING.md new file mode 100644 index 000000000000..f2dbdee06bc3 --- /dev/null +++ b/java-logging-logback/CONTRIBUTING.md @@ -0,0 +1,139 @@ +# How to Contribute + +We'd love to accept your patches and contributions to this project. There are +just a few small guidelines you need to follow. + +## Contributor License Agreement + +Contributions to this project must be accompanied by a Contributor License +Agreement. You (or your employer) retain the copyright to your contribution; +this simply gives us permission to use and redistribute your contributions as +part of the project. Head over to to see +your current agreements on file or to sign a new one. + +You generally only need to submit a CLA once, so if you've already submitted one +(even if it was for a different project), you probably don't need to do it +again. + +## Code reviews + +All submissions, including submissions by project members, require review. We +use GitHub pull requests for this purpose. Consult +[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more +information on using pull requests. + +## Community Guidelines + +This project follows +[Google's Open Source Community Guidelines](https://opensource.google.com/conduct/). + +## Building the project + +To build, package, and run all unit tests run the command + +``` +mvn clean verify +``` + +### Running Integration tests + +To include integration tests when building the project, you need access to +a GCP Project with a valid service account. + +For instructions on how to generate a service account and corresponding +credentials JSON see: [Creating a Service Account][1]. + +Then run the following to build, package, run all unit tests and run all +integration tests. + +```bash +export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service/account.json +mvn -Penable-integration-tests clean verify +``` + +## Code Samples + +Code Samples must be bundled in separate Maven modules, and guarded by a +Maven profile with the name `enable-samples`. + +The samples must be separate from the primary project for a few reasons: +1. Primary projects have a minimum Java version of Java 7 whereas samples have + a minimum Java version of Java 8. Due to this we need the ability to + selectively exclude samples from a build run. +2. Many code samples depend on external GCP services and need + credentials to access the service. +3. Code samples are not released as Maven artifacts and must be excluded from + release builds. + +### Building + +```bash +mvn -Penable-samples clean verify +``` + +Some samples require access to GCP services and require a service account: + +```bash +export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service/account.json +mvn -Penable-samples clean verify +``` + +### Profile Config + +1. To add samples in a profile to your Maven project, add the following to your +`pom.xml` + + ```xml + + [...] + + + enable-samples + + sample + + + + [...] + + ``` + +2. [Activate](#profile-activation) the profile. +3. Define your samples in a normal Maven project in the `samples/` directory. + +### Code Formatting + +Code in this repo is formatted with +[google-java-format](https://github.com/google/google-java-format). +To run formatting on your project, you can run: +``` +mvn com.coveo:fmt-maven-plugin:format +``` + +### Profile Activation + +To include code samples when building and testing the project, enable the +`enable-samples` Maven profile. + +#### Command line + +To activate the Maven profile on the command line add `-Penable-samples` to your +Maven command. + +#### Maven `settings.xml` + +To activate the Maven profile in your `~/.m2/settings.xml` add an entry of +`enable-samples` following the instructions in [Active Profiles][2]. + +This method has the benefit of applying to all projects you build (and is +respected by IntelliJ IDEA) and is recommended if you are going to be +contributing samples to several projects. + +#### IntelliJ IDEA + +To activate the Maven Profile inside IntelliJ IDEA, follow the instructions in +[Activate Maven profiles][3] to activate `enable-samples`. + +[1]: https://cloud.google.com/docs/authentication/getting-started#creating_a_service_account +[2]: https://maven.apache.org/settings.html#Active_Profiles +[3]: https://www.jetbrains.com/help/idea/work-with-maven-profiles.html#activate_maven_profiles diff --git a/java-logging-logback/LICENSE b/java-logging-logback/LICENSE new file mode 100644 index 000000000000..261eeb9e9f8b --- /dev/null +++ b/java-logging-logback/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/java-logging-logback/README.md b/java-logging-logback/README.md new file mode 100644 index 000000000000..7f1bbd1a0879 --- /dev/null +++ b/java-logging-logback/README.md @@ -0,0 +1,338 @@ +# Google Cloud Logging Logback Appender Client for Java + +Java idiomatic client for [Cloud Logging Logback Appender][product-docs]. + +[![Maven][maven-version-image]][maven-version-link] +![Stability][stability-image] + +- [Product Documentation][product-docs] +- [Client Library Documentation][javadocs] + +> Note: This client is a work-in-progress, and may occasionally +> make backwards-incompatible changes. + + +## Quickstart + + +If you are using Maven, add this to your pom.xml file: + + + +```xml + + com.google.cloud + google-cloud-logging-logback + 0.131.11-alpha + +``` + +If you are using Gradle without BOM, add this to your dependencies: + +```Groovy +implementation 'com.google.cloud:google-cloud-logging-logback:0.131.11-alpha' +``` + +If you are using SBT, add this to your dependencies: + +```Scala +libraryDependencies += "com.google.cloud" % "google-cloud-logging-logback" % "0.131.11-alpha" +``` + + +## Authentication + +See the [Authentication][authentication] section in the base directory's README. + +## Authorization + +The client application making API calls must be granted [authorization scopes][auth-scopes] required for the desired Cloud Logging Logback Appender APIs, and the authenticated principal must have the [IAM role(s)][predefined-iam-roles] required to access GCP resources using the Cloud Logging Logback Appender API calls. + +## Getting Started + +### Prerequisites + +You will need a [Google Cloud Platform Console][developer-console] project with the Cloud Logging Logback Appender [API enabled][enable-api]. + +[Follow these instructions][create-project] to get your project set up. You will also need to set up the local development environment by +[installing the Google Cloud Command Line Interface][cloud-cli] and running the following commands in command line: +`gcloud auth login` and `gcloud config set project [YOUR PROJECT ID]`. + +### Installation and setup + +You'll need to obtain the `google-cloud-logging-logback` library. See the [Quickstart](#quickstart) section +to add `google-cloud-logging-logback` as a dependency in your code. + +## About Cloud Logging Logback Appender + + +[Cloud Logging Logback Appender][product-docs] + +See the [Cloud Logging Logback Appender client library docs][javadocs] to learn how to +use this Cloud Logging Logback Appender Client Library. + + +### Usage +Add the appender to your [Logback configuration](https://logback.qos.ch/manual/configuration.html) `logback.xml`. +See [Logback filters](https://logback.qos.ch/manual/filters.html#thresholdFilter) for information on filtering log output and + [encoders](https://logback.qos.ch/manual/encoders.html) for information on formatting. + + +```xml + + + + + INFO + + + + application.log + + + WARN + + + SYNC + + + false + + + true + + + + + + /path/to/credentials/file + + + String + + + com.example.enhancers.TestLoggingEnhancer + com.example.enhancers.AnotherEnhancer + + + true + + + + 100 + 1000 + 500 + 10000 + 100000 + Ignore + + + + + + + +``` + +In your code: + +```java +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TestLogger { + private final Logger logger = LoggerFactory.getLogger(TestLogger.class); + + public void log(String name) { + logger.info("This is a test"); + } + + public static void main(String[] args) { + TestLogger testLogger = new TestLogger(); + testLogger.log("test"); + } +} +``` + +### Controlling the batching settings +When using asynchronous logging, the Logging API is called asynchronously. This allows the appender +to combine multiple `write()` calls into a single, more efficient request to the Logging API. The +`logbackBatchingSettings` in the `logback.xml` file configures the batching behavior: + +``` + + 100 + 1000 + 500 + 10000 + 100000 + Ignore + +``` +Here are some explanations for [BatchingSettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.batching.BatchingSettings): +* `elementCountThreshold`: Triggers a `writeLogEntries` request when the number of batched log entries exceeds this threshold. +* `requestByteThreshold`: Triggers a `writeLogEntries` request when the total size of batched log entries (in bytes) exceeds this threshold. +* `delayThreshold`: Triggers a `writeLogEntries` request when the threshold in milliseconds has passed since the first log entry created the batch. + +Batching also supports [FlowControl](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.batching.FlowControlSettings), which can be used to +prevent the batching implementation from accumulating messages without limit, resulting eventually in an OutOfMemory exception. These settings in the configuration controls +flow control behavior: + +* `maxOutstandingElementCount`: When the total number of outstanding log events exceeds this threshold, flow control will be initiated. +* `maxOutstandingRequestBytes`: When the total size of outstanding `writeLogEntries` requests exceeds this threshold, flow control will be initiated. +* `limitExceededBehavior`: This value defines what action the appender should take when the configured limits (like `maxOutstandingRequestBytes` or `maxOutstandingElementCount`) are exceeded. + +For more information about batching configurations, see [BatchingSettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.batching.BatchingSettings). + +### Populate log entries with metadata + +The library provides multiple ways to enrich log entries with additional information. +You can select one or more ways to customize log entries that will be written into Cloud Logging. + +* Manually update a log entry using [`LoggingEnhancer`] +(https://github.com/googleapis/java-logging/blob/main/google-cloud-logging/src/main/java/com/google/cloud/logging/. +* Use [`ILoggingEvent`](https://logback.qos.ch/apidocs/ch/qos/logback/classic/spi/ILoggingEvent.html) to update a log entry with [`LoggingEventEnhancer`] +(https://github.com/googleapis/java-logging-logback/blob/main/src/main/java/com/google/cloud/logging/logback/LoggingEventEnhancer.java). +* Enable [auto-population](https://github.com/googleapis/java-logging#auto-population-of-log-entrys-metadata) of the `LogEntry` metadata using the `autoPopulateMetadata` configuration flag. + +#### Optimize log ingestion + +By default, the appender will ingest log entries asynchronously by calling Logging API. +Multiple calls may be aggregated before being sent to improve use of API quota and bandwidth. +You can set the `writeSynchronicity` configuration flag to `SYNC` if they want to ingest log entries synchronously. +Note that configuring synchronous ingestion will probably result in performance penalties to your applications. +If you plan to deploy your application in one of Google Cloud managed environments (e.g. Cloud Run, Cloud Function or App Engine), +you can leverage the support provided by the implicit logging agent and the [structured logging](https://cloud.google.com/logging/docs/structured-logging) feature. +To use it, set the `redirectToStdout` configuration flag to `true`. +This flag instructs the appender to print the log entries to `stdout` instead of ingesting them using Logging API. +The log entries are printed using the [structured logging Json format](https://cloud.google.com/logging/docs/structured-logging#special-payload-fields). +In result, the logging agent will be responsible for ingesting the logs to Logging API. +Note that using the structured logging Json format you cannot control the log name where the logs will be ingested. +The logs will be ingested into the project that hosts the environment where your application is running. +The configuration `logDestinationProjectId` will be ignored. + +### Recommended way to ingest logs in Google Cloud managed environments +If your application is running on Google Cloud Environments such as Google Kubernetes Engine, App Engine flexible environment, and Cloud Run functions, it is recommended to use [logging agent](https://cloud.google.com/logging/docs/agent) +to send application logs to Cloud Logging. Logging agents send data written to a file, such as `stdout` or a file, as logs to Cloud Logging. Using logging agents and relying on logging files such as `stdout` and `stderr` will +ensure that application crashes don't break sending logs to your project. It will also reduce complex coding to explicitly handle buffering and retries using client libraries. For a detailed comparison of logging agents and +client libraries, see [Choosing an agent or client libraries](https://cloud.google.com/logging/docs/agent-or-library#choosing). + + +## Samples + +Samples are in the [`samples/`](https://github.com/googleapis/java-logging-logback/tree/main/samples) directory. + +| Sample | Source Code | Try it | +| --------------------------- | --------------------------------- | ------ | +| Quickstart | [source code](https://github.com/googleapis/java-logging-logback/blob/main/samples/snippets/src/main/java/com/example/logging/logback/Quickstart.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-logging-logback&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/logging/logback/Quickstart.java) | +| Example Enhancer | [source code](https://github.com/googleapis/java-logging-logback/blob/main/samples/snippets/src/main/java/com/example/logging/logback/enhancers/ExampleEnhancer.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-logging-logback&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/logging/logback/enhancers/ExampleEnhancer.java) | + + + +## Troubleshooting + +To get help, follow the instructions in the [shared Troubleshooting document][troubleshooting]. + +## Supported Java Versions + +Java 8 or above is required for using this client. + +Google's Java client libraries, +[Google Cloud Client Libraries][cloudlibs] +and +[Google Cloud API Libraries][apilibs], +follow the +[Oracle Java SE support roadmap][oracle] +(see the Oracle Java SE Product Releases section). + +### For new development + +In general, new feature development occurs with support for the lowest Java +LTS version covered by Oracle's Premier Support (which typically lasts 5 years +from initial General Availability). If the minimum required JVM for a given +library is changed, it is accompanied by a [semver][semver] major release. + +Java 11 and (in September 2021) Java 17 are the best choices for new +development. + +### Keeping production systems current + +Google tests its client libraries with all current LTS versions covered by +Oracle's Extended Support (which typically lasts 8 years from initial +General Availability). + +#### Legacy support + +Google's client libraries support legacy versions of Java runtimes with long +term stable libraries that don't receive feature updates on a best efforts basis +as it may not be possible to backport all patches. + +Google provides updates on a best efforts basis to apps that continue to use +Java 7, though apps might need to upgrade to current versions of the library +that supports their JVM. + +#### Where to find specific information + +The latest versions and the supported Java versions are identified on +the individual GitHub repository `github.com/GoogleAPIs/java-SERVICENAME` +and on [google-cloud-java][g-c-j]. + +## Versioning + + +This library follows [Semantic Versioning](http://semver.org/). + + +It is currently in major version zero (``0.y.z``), which means that anything may change at any time +and the public API should not be considered stable. + + +## Contributing + + +Contributions to this library are always welcome and highly encouraged. + +See [CONTRIBUTING][contributing] for more information how to get started. + +Please note that this project is released with a Contributor Code of Conduct. By participating in +this project you agree to abide by its terms. See [Code of Conduct][code-of-conduct] for more +information. + + +## License + +Apache 2.0 - See [LICENSE][license] for more information. + +Java is a registered trademark of Oracle and/or its affiliates. + +[product-docs]: https://cloud.google.com/logging/docs/setup/java#logback_appender_for +[javadocs]: https://cloud.google.com/java/docs/reference/google-cloud-logging-logback/latest/history +[stability-image]: https://img.shields.io/badge/stability-preview-yellow +[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-logging-logback.svg +[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-logging-logback/0.131.11-alpha +[authentication]: https://github.com/googleapis/google-cloud-java#authentication +[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes +[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles +[iam-policy]: https://cloud.google.com/iam/docs/overview#cloud-iam-policy +[developer-console]: https://console.developers.google.com/ +[create-project]: https://cloud.google.com/resource-manager/docs/creating-managing-projects +[cloud-cli]: https://cloud.google.com/cli +[troubleshooting]: https://github.com/googleapis/google-cloud-java/blob/main/TROUBLESHOOTING.md +[contributing]: https://github.com/googleapis/java-logging-logback/blob/main/CONTRIBUTING.md +[code-of-conduct]: https://github.com/googleapis/java-logging-logback/blob/main/CODE_OF_CONDUCT.md#contributor-code-of-conduct +[license]: https://github.com/googleapis/java-logging-logback/blob/main/LICENSE + +[enable-api]: https://console.cloud.google.com/flows/enableapi?apiid=logging.googleapis.com +[libraries-bom]: https://github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/The-Google-Cloud-Platform-Libraries-BOM +[shell_img]: https://gstatic.com/cloudssh/images/open-btn.png + +[semver]: https://semver.org/ +[cloudlibs]: https://cloud.google.com/apis/docs/client-libraries-explained +[apilibs]: https://cloud.google.com/apis/docs/client-libraries-explained#google_api_client_libraries +[oracle]: https://www.oracle.com/java/technologies/java-se-support-roadmap.html +[g-c-j]: http://github.com/googleapis/google-cloud-java diff --git a/java-logging-logback/SECURITY.md b/java-logging-logback/SECURITY.md new file mode 100644 index 000000000000..8b58ae9c01ae --- /dev/null +++ b/java-logging-logback/SECURITY.md @@ -0,0 +1,7 @@ +# Security Policy + +To report a security issue, please use [g.co/vulnz](https://g.co/vulnz). + +The Google Security Team will respond within 5 working days of your report on g.co/vulnz. + +We use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue. diff --git a/java-logging-logback/java.header b/java-logging-logback/java.header new file mode 100644 index 000000000000..d0970ba7d375 --- /dev/null +++ b/java-logging-logback/java.header @@ -0,0 +1,15 @@ +^/\*$ +^ \* Copyright \d\d\d\d,? Google (Inc\.|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\.$ +^ \*/$ diff --git a/java-logging-logback/license-checks.xml b/java-logging-logback/license-checks.xml new file mode 100644 index 000000000000..6597fced808e --- /dev/null +++ b/java-logging-logback/license-checks.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/java-logging-logback/pom.xml b/java-logging-logback/pom.xml new file mode 100644 index 000000000000..abf7eb336654 --- /dev/null +++ b/java-logging-logback/pom.xml @@ -0,0 +1,173 @@ + + + 4.0.0 + + google-cloud-logging-logback + 0.132.21-alpha-SNAPSHOT + jar + Google Cloud Logging Logback Appender + https://github.com/googleapis/java-logging-logback + + Logback support for Google Cloud Logging + + + + 1.2.13 + 5.6.0 + 1.4.4 + 3.23.9 + 1.7.36 + 1.10.1 + + + + com.google.cloud + google-cloud-jar-parent + 1.76.0-SNAPSHOT + ../google-cloud-jar-parent/pom.xml + + + + + chingor + Jeff Ching + chingor@google.com + Google + + Developer + + + + + Google LLC + + + scm:git:git@github.com:googleapis/java-logging-logback.git + scm:git:git@github.com:googleapis/java-logging-logback.git + https://github.com/googleapis/java-logging-logback + HEAD + + + https://github.com/googleapis/java-logging-logback/issues + GitHub Issues + + + + + Apache-2.0 + https://www.apache.org/licenses/LICENSE-2.0.txt + + + + + + + + + + ch.qos.logback + logback-classic + ${logback.version} + + + ch.qos.logback + logback-core + ${logback.version} + + + com.google.cloud + google-cloud-logging + ${logging.version} + + + org.slf4j + slf4j-api + ${slf4j.version} + + + com.google.api + api-common + + + com.google.cloud + google-cloud-core + + + com.google.auth + google-auth-library-oauth2-http + + + com.google.guava + guava + + + com.google.guava + failureaccess + + + + + com.google.auth + google-auth-library-credentials + + + + + junit + junit + 4.13.2 + test + + + org.easymock + easymock + ${easymock.version} + test + + + com.google.truth + truth + ${truth.version} + test + + + org.checkerframework + checker-qual + + + + + com.google.protobuf + protobuf-java + + + com.google.api + gax + + + org.threeten + threetenbp + test + + + + + + + org.codehaus.mojo + flatten-maven-plugin + + + + + + native + + + !LoggingAppenderTest + + + + diff --git a/java-logging-logback/renovate.json b/java-logging-logback/renovate.json new file mode 100644 index 000000000000..14a4bb6abe7a --- /dev/null +++ b/java-logging-logback/renovate.json @@ -0,0 +1,107 @@ +{ + "prConcurrentLimit": 0, + "prHourlyLimit": 0, + "extends": [ + ":separateMajorReleases", + ":combinePatchMinorReleases", + ":ignoreUnstable", + ":prImmediately", + ":updateNotScheduled", + ":automergeDisabled", + ":ignoreModulesAndTests", + ":maintainLockFilesDisabled" + ], + "ignorePaths": [ + ".kokoro/requirements.txt", + ".github/workflows/approve-readme.yaml", + ".github/workflows/ci.yaml", + ".github/workflows/renovate_config_check.yaml", + ".github/workflows/samples.yaml" + ], + "customManagers": [ + { + "customType": "regex", + "fileMatch": [ + "^.kokoro/presubmit/graalvm-native.*.cfg$" + ], + "matchStrings": [ + "value: \"gcr.io/cloud-devrel-public-resources/graalvm.*:(?.*?)\"" + ], + "depNameTemplate": "com.google.cloud:sdk-platform-java-config", + "datasourceTemplate": "maven" + }, + { + "customType": "regex", + "fileMatch": [ + "^.github/workflows/unmanaged_dependency_check.yaml$" + ], + "matchStrings": [ + "uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v(?.+?)\\n" + ], + "depNameTemplate": "com.google.cloud:sdk-platform-java-config", + "datasourceTemplate": "maven" + } + ], + "packageRules": [ + { + "versioning": "docker", + "matchPackageNames": [ + "/^com.google.guava:/" + ] + }, + { + "semanticCommitType": "deps", + "semanticCommitScope": null, + "matchPackageNames": [ + "*" + ] + }, + { + "semanticCommitType": "build", + "semanticCommitScope": "deps", + "matchPackageNames": [ + "/^org.apache.maven/", + "/^org.jacoco:/", + "/^org.codehaus.mojo:/", + "/^org.sonatype.plugins:/", + "/^com.coveo:/", + "/^com.google.cloud:google-cloud-shared-config/" + ] + }, + { + "semanticCommitType": "chore", + "semanticCommitScope": "deps", + "matchPackageNames": [ + "/^com.google.cloud:google-cloud-logging-logback/", + "/^com.google.cloud:libraries-bom/", + "/^com.google.cloud.samples:shared-configuration/" + ] + }, + { + "semanticCommitType": "test", + "semanticCommitScope": "deps", + "matchPackageNames": [ + "/^junit:junit/", + "/^com.google.truth:truth/", + "/^org.mockito:mockito-core/", + "/^org.objenesis:objenesis/", + "/^com.google.cloud:google-cloud-conformance-tests/", + "/^org.graalvm.buildtools:junit-platform-native/" + ] + }, + { + "ignoreUnstable": false, + "matchPackageNames": [ + "/^com.google.cloud:google-cloud-/" + ] + }, + { + "groupName": "jackson dependencies", + "matchPackageNames": [ + "/^com.fasterxml.jackson.core/" + ] + } + ], + "semanticCommits": "enabled", + "dependencyDashboard": true +} diff --git a/java-logging-logback/samples/install-without-bom/pom.xml b/java-logging-logback/samples/install-without-bom/pom.xml new file mode 100644 index 000000000000..2ca25877c94f --- /dev/null +++ b/java-logging-logback/samples/install-without-bom/pom.xml @@ -0,0 +1,84 @@ + + + 4.0.0 + com.google.cloud + logging-logback-install-without-bom + jar + Google Google Cloud Logging Logback Appender Install Without Bom + https://github.com/googleapis/java-logging-logback + + + + com.google.cloud.samples + shared-configuration + 1.2.0 + + + + 1.8 + 1.8 + UTF-8 + + + + + + + com.google.cloud + google-cloud-logging-logback + 0.132.12-alpha + + + + + junit + junit + 4.13.2 + test + + + com.google.truth + truth + 1.4.4 + test + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.6.0 + + + add-snippets-source + + add-source + + + + ../snippets/src/main/java + + + + + add-snippets-tests + + add-test-source + + + + ../snippets/src/test/java + + + + + + + + diff --git a/java-logging-logback/samples/pom.xml b/java-logging-logback/samples/pom.xml new file mode 100644 index 000000000000..20c2f8317398 --- /dev/null +++ b/java-logging-logback/samples/pom.xml @@ -0,0 +1,56 @@ + + + 4.0.0 + com.google.cloud + google-cloud-logging-logback-samples + 0.0.1-SNAPSHOT + pom + Google Google Cloud Logging Logback Appender Samples Parent + https://github.com/googleapis/java-logging-logback + + Java idiomatic client for Google Cloud Platform services. + + + + + com.google.cloud.samples + shared-configuration + 1.2.0 + + + + 1.8 + 1.8 + UTF-8 + + + + install-without-bom + snapshot + snippets + + + + + + org.apache.maven.plugins + maven-deploy-plugin + 3.1.3 + + true + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.7.0 + + true + + + + + diff --git a/java-logging-logback/samples/snapshot/pom.xml b/java-logging-logback/samples/snapshot/pom.xml new file mode 100644 index 000000000000..9e5d48b33831 --- /dev/null +++ b/java-logging-logback/samples/snapshot/pom.xml @@ -0,0 +1,83 @@ + + + 4.0.0 + com.google.cloud + logging-logback-snapshot + jar + Google Google Cloud Logging Logback Appender Snapshot Samples + https://github.com/googleapis/java-logging-logback + + + + com.google.cloud.samples + shared-configuration + 1.2.0 + + + + 1.8 + 1.8 + UTF-8 + + + + + + com.google.cloud + google-cloud-logging-logback + 0.132.21-alpha-SNAPSHOT + + + + + junit + junit + 4.13.2 + test + + + com.google.truth + truth + 1.4.4 + test + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.6.0 + + + add-snippets-source + + add-source + + + + ../snippets/src/main/java + + + + + add-snippets-tests + + add-test-source + + + + ../snippets/src/test/java + + + + + + + + diff --git a/java-logging-logback/samples/snippets/pom.xml b/java-logging-logback/samples/snippets/pom.xml new file mode 100644 index 000000000000..e14d1a04159e --- /dev/null +++ b/java-logging-logback/samples/snippets/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + com.google.cloud + logging-logback-snippets + jar + Google Google Cloud Logging Logback Appender Snippets + https://github.com/googleapis/java-logging-logback + + + + com.google.cloud.samples + shared-configuration + 1.2.0 + + + + 1.8 + 1.8 + UTF-8 + + + + + + + + com.google.cloud + libraries-bom + 26.65.0 + pom + import + + + + + + + com.google.cloud + google-cloud-logging-logback + + + + + junit + junit + 4.13.2 + test + + + com.google.truth + truth + 1.4.4 + test + + + diff --git a/java-logging-logback/samples/snippets/src/main/java/com/example/logging/logback/Quickstart.java b/java-logging-logback/samples/snippets/src/main/java/com/example/logging/logback/Quickstart.java new file mode 100644 index 000000000000..5321bf42e871 --- /dev/null +++ b/java-logging-logback/samples/snippets/src/main/java/com/example/logging/logback/Quickstart.java @@ -0,0 +1,32 @@ +/* + * Copyright 2025 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 + * + * 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 com.example.logging.logback; + +// [START logging_logback_quickstart] + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Quickstart { + private static final Logger logger = LoggerFactory.getLogger(Quickstart.class); + + public static void main(String[] args) { + logger.info("Logging INFO with Logback"); + logger.error("Logging ERROR with Logback"); + } +} +// [END logging_logback_quickstart] diff --git a/java-logging-logback/samples/snippets/src/main/java/com/example/logging/logback/enhancers/ExampleEnhancer.java b/java-logging-logback/samples/snippets/src/main/java/com/example/logging/logback/enhancers/ExampleEnhancer.java new file mode 100644 index 000000000000..50542bf4aec8 --- /dev/null +++ b/java-logging-logback/samples/snippets/src/main/java/com/example/logging/logback/enhancers/ExampleEnhancer.java @@ -0,0 +1,33 @@ +/* + * Copyright 2025 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 + * + * 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 com.example.logging.logback.enhancers; + +// [START logging_enhancer] + +import com.google.cloud.logging.LogEntry; +import com.google.cloud.logging.LoggingEnhancer; + +// Add / update additional fields to the log entry +public class ExampleEnhancer implements LoggingEnhancer { + + @Override + public void enhanceLogEntry(LogEntry.Builder logEntry) { + // add additional labels + logEntry.addLabel("test-label-1", "test-value-1"); + } +} +// [END logging_enhancer] diff --git a/java-logging-logback/samples/snippets/src/main/resources/logback.xml b/java-logging-logback/samples/snippets/src/main/resources/logback.xml new file mode 100644 index 000000000000..5be8c9e13d61 --- /dev/null +++ b/java-logging-logback/samples/snippets/src/main/resources/logback.xml @@ -0,0 +1,33 @@ + + + + + + + INFO + + application.log + gae_app + com.example.logging.logback.enhancers.ExampleEnhancer + WARN + + + + + + + diff --git a/java-logging-logback/src/main/java/com/google/cloud/logging/logback/LogbackBatchingSettings.java b/java-logging-logback/src/main/java/com/google/cloud/logging/logback/LogbackBatchingSettings.java new file mode 100644 index 000000000000..2f03c6d1628e --- /dev/null +++ b/java-logging-logback/src/main/java/com/google/cloud/logging/logback/LogbackBatchingSettings.java @@ -0,0 +1,87 @@ +/* + * Copyright 2025 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 + * + * 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 com.google.cloud.logging.logback; + +import com.google.api.gax.batching.BatchingSettings; +import com.google.api.gax.batching.FlowControlSettings; +import com.google.api.gax.batching.FlowController.LimitExceededBehavior; +import java.time.Duration; + +/** + * This class is used only to provide batch settings configuration in logback.xml since {@link + * com.google.api.gax.batching.BatchingSettings} cannot be used as is with logback configuration + * described in https://logback.qos.ch/manual/configuration.html. All data members below are simply + * copy of {@link com.google.api.gax.batching.BatchingSettings} class, so it could be used with + * logback.xml. + */ +public class LogbackBatchingSettings { + private Long elementCountThreshold = null; + private Long requestByteThreshold = null; + private Long delayThreshold = null; + private Long maxOutstandingElementCount = null; + private Long maxOutstandingRequestBytes = null; + private LimitExceededBehavior limitExceededBehavior = null; + + public void setElementCountThreshold(Long value) { + elementCountThreshold = value; + } + + public void setRequestByteThreshold(Long value) { + requestByteThreshold = value; + } + + public void setDelayThreshold(Long value) { + delayThreshold = value; + } + + public void setMaxOutstandingElementCount(Long value) { + maxOutstandingElementCount = value; + } + + public void setMaxOutstandingRequestBytes(Long value) { + maxOutstandingRequestBytes = value; + } + + public void setLimitExceededBehavior(LimitExceededBehavior value) { + limitExceededBehavior = value; + } + + public BatchingSettings build() { + BatchingSettings.Builder settings = BatchingSettings.newBuilder(); + if (elementCountThreshold != null) { + settings.setElementCountThreshold(elementCountThreshold); + } + if (requestByteThreshold != null) { + settings.setRequestByteThreshold(requestByteThreshold); + } + if (delayThreshold != null) { + settings.setDelayThresholdDuration(Duration.ofMillis(delayThreshold)); + } + if (maxOutstandingElementCount != null + || maxOutstandingRequestBytes != null + || limitExceededBehavior != null) { + FlowControlSettings.Builder flowControlSettings = FlowControlSettings.newBuilder(); + flowControlSettings.setMaxOutstandingElementCount(maxOutstandingElementCount); + flowControlSettings.setMaxOutstandingRequestBytes(maxOutstandingRequestBytes); + if (limitExceededBehavior != null) { + flowControlSettings.setLimitExceededBehavior(limitExceededBehavior); + } + settings.setFlowControlSettings(flowControlSettings.build()); + } + return settings.build(); + } +} diff --git a/java-logging-logback/src/main/java/com/google/cloud/logging/logback/LoggingAppender.java b/java-logging-logback/src/main/java/com/google/cloud/logging/logback/LoggingAppender.java new file mode 100644 index 000000000000..dad8352eb018 --- /dev/null +++ b/java-logging-logback/src/main/java/com/google/cloud/logging/logback/LoggingAppender.java @@ -0,0 +1,610 @@ +/* + * Copyright 2025 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 + * + * 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 com.google.cloud.logging.logback; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.classic.spi.IThrowableProxy; +import ch.qos.logback.classic.spi.StackTraceElementProxy; +import ch.qos.logback.core.UnsynchronizedAppenderBase; +import ch.qos.logback.core.util.Loader; +import com.google.api.core.InternalApi; +import com.google.api.core.ObsoleteApi; +import com.google.auth.oauth2.GoogleCredentials; +import com.google.cloud.MonitoredResource; +import com.google.cloud.logging.Instrumentation; +import com.google.cloud.logging.LogEntry; +import com.google.cloud.logging.Logging; +import com.google.cloud.logging.Logging.WriteOption; +import com.google.cloud.logging.LoggingEnhancer; +import com.google.cloud.logging.LoggingOptions; +import com.google.cloud.logging.MonitoredResourceUtil; +import com.google.cloud.logging.Payload; +import com.google.cloud.logging.Severity; +import com.google.cloud.logging.Synchronicity; +import com.google.common.base.Preconditions; +import com.google.common.base.Strings; +import com.google.common.collect.ImmutableList; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.Instant; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Logback appender for Google Cloud Logging. + * + *

Appender configuration in logback.xml: + * + *

+ *    <appender name="CLOUD" class="com.google.cloud.logging.logback.LoggingAppender">
+ *         <!-- Optional: filter logs at and above this level -->
+ *         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+ *             <level>INFO</level>
+ *         </filter>
+ *
+ *         <!-- Optional: defaults to {@code "java.log"} -->
+ *         <log>application.log</log>
+ *
+ *         <!-- Optional: defaults to {@code "OFF"} -->
+ *         <flushLevel>WARN</flushLevel>
+ *
+ *         <!-- Optional: defaults to {@code ASYNC} -->
+ *         <writeSynchronicity>SYNC</writeSynchronicity>
+ *
+ *         <!-- Optional: defaults to {@code true} -->
+ *         <autoPopulateMetadata>false</autoPopulateMetadata>
+ *
+ *         <!-- Optional: defaults to {@code false} -->
+ *         <redirectToStdout>true</redirectToStdout>
+ *
+ *         <!-- Optional: auto detects on App Engine Flex, Standard, GCE and GKE, defaults to "global". See supported resource types -->
+ *         <resourceType></resourceType>
+ *
+ *         <!-- Optional: defaults to the default credentials of the environment -->
+ *         <credentialsFile>/path/to/credentials/file</credentialsFile>
+ *
+ *         <!-- Optional: defaults to the project id obtained during authentication process. Project id is also used to construct resource name of the log entries -->
+ *         <logDestinationProjectId>String</logDestinationProjectId>
+ *
+ *         <!-- Optional: add custom labels to log entries using {@link LoggingEnhancer} classes -->
+ *         <enhancer>com.example.enhancers.TestLoggingEnhancer</enhancer>
+ *         <enhancer>com.example.enhancers.AnotherEnhancer</enhancer>
+ *
+ *         <!-- Optional: specifies if a batch's valid entries should be written even if some other entry failed due to an error. Defaults to {@code true} -->
+ *         <partialSuccess>true</partialSuccess>
+ *
+ *         <!-- Optional: In the asynchronous mode the call(s) to Logging API takes place asynchronously and few calls to `write()`
+ *         method may be batched together to compose a single call to Logging API. In order to control the batching settings,
+ *         the `logbackBatchingSettings` section can be used as shown below.
+ *         See [BatchingSettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.batching.BatchingSettings)
+ *         for more info regarding parameters shown below -->
+ *         <logbackBatchingSettings>
+ *            <elementCountThreshold>100</elementCountThreshold>
+ *            <requestByteThreshold>1000</requestByteThreshold>
+ *            <delayThreshold>500</delayThreshold>
+ *            <maxOutstandingElementCount>10000</maxOutstandingElementCount>
+ *            <maxOutstandingRequestBytes>100000</maxOutstandingRequestBytes>
+ *            <limitExceededBehavior>Ignore</limitExceededBehavior>
+ *         </logbackBatchingSettings>
+ *     </appender>
+ * 
+ */ +public class LoggingAppender extends UnsynchronizedAppenderBase { + + private static final String LEVEL_NAME_KEY = "levelName"; + private static final String LEVEL_VALUE_KEY = "levelValue"; + private static final String LOGGER_NAME_KEY = "loggerName"; + private static final String TYPE = + "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent"; + private static final List DEFAULT_LOGGING_EVENT_ENHANCERS = + ImmutableList.of(new MDCEventEnhancer()); + public static final String JAVA_LOGBACK_LIBRARY_NAME = "java-logback"; + // Using release-please annotations to update DEFAULT_INSTRUMENTATION_VERSION with latest version. + // See + // https://github.com/googleapis/release-please/blob/main/docs/customizing.md#updating-arbitrary-files + // {x-version-update-start:google-cloud-logging-logback:current} + public static final String DEFAULT_INSTRUMENTATION_VERSION = "0.132.21-alpha-SNAPSHOT"; + // {x-version-update-end} + private static boolean instrumentationAdded = false; + private static final Object instrumentationLock = new Object(); + + private volatile Logging logging; + private LoggingOptions loggingOptions; + private MonitoredResource monitoredResource; + private List loggingEnhancers; + private List loggingEventEnhancers; + private WriteOption[] defaultWriteOptions; + + private Level flushLevel; + private String log; + private String resourceType; + private String credentialsFile; + private GoogleCredentials credentials; + private String logDestinationProjectId; + private boolean autoPopulateMetadata = true; + private boolean redirectToStdout = false; + private boolean partialSuccess = true; + private Synchronicity writeSyncFlag = Synchronicity.ASYNC; + private final Set enhancerClassNames = new HashSet<>(); + private final Set loggingEventEnhancerClassNames = new HashSet<>(); + private LogbackBatchingSettings logbackBatchingSettings = null; + + /** + * Sets a threshold for log severity level to flush all log entries that were batched so far. + * + *

Defaults to OFF. + * + * @param flushLevel Logback log level + */ + public void setFlushLevel(Level flushLevel) { + this.flushLevel = flushLevel; + } + + /** + * Sets the LOG_ID part of the log + * name for which the logs are ingested. + * + * @param log LOG_ID part of the name + */ + public void setLog(String log) { + this.log = log; + } + + /** + * Sets the name of the monitored resource (Optional). If not define the appender will try to + * identify the resource type automatically. Currently support resource types include "gae_app", + * "gce_instance", "k8s_container", "cloud_run_revision" and "cloud_function". If the appender + * fails to identify the resource type, it will be set to "global". + * + *

Must be a one of the supported resource types. + * + * @param resourceType the name of the monitored resource. + */ + public void setResourceType(String resourceType) { + this.resourceType = resourceType; + } + + /** + * This method is obsolete because of a potential security risk. Use the {@link + * #setCredentials(GoogleCredentials)} method instead. + * + *

If you know that you will be loading credential configurations of a specific type, it is + * recommended to use a credential-type-specific `fromStream()` method. This will ensure that an + * unexpected credential type with potential for malicious intent is not loaded unintentionally. + * You might still have to do validation for certain credential types. Please follow the + * recommendation for that method. + * + *

If you are loading your credential configuration from an untrusted source and have not + * mitigated the risks (e.g. by validating the configuration yourself), make these changes as soon + * as possible to prevent security risks to your environment. + * + *

Regardless of the method used, it is always your responsibility to validate configurations + * received from external sources. + * + *

Sets the path to the credential + * file. If not set the appender will use {@link GoogleCredentials#getApplicationDefault()} to + * authenticate. + * + * @param credentialsFile the path to the credentials file. + */ + @ObsoleteApi( + "This method is obsolete because of a potential security risk. Use the setCredentials() method instead") + public void setCredentialsFile(String credentialsFile) { + this.credentialsFile = credentialsFile; + } + + /** + * Sets the credential to use. If not set the appender will use {@link + * GoogleCredentials#getApplicationDefault()} to authenticate. + * + * @param credentials the GoogleCredentials to set + */ + public void setCredentials(GoogleCredentials credentials) { + Preconditions.checkNotNull(credentials, "Credentials cannot be null"); + this.credentials = credentials; + } + + /** + * Sets project ID to be used to customize log destination name for written log entries. + * + * @param projectId The project ID to be used to construct the resource destination name for log + * entries. + */ + public void setLogDestinationProjectId(String projectId) { + this.logDestinationProjectId = projectId; + } + + /** + * Sets the log ingestion mode. It can be one of the {@link Synchronicity} values. + * + *

Default to {@code Synchronicity.ASYNC} + * + * @param flag the new ingestion mode. + */ + public void setWriteSynchronicity(Synchronicity flag) { + this.writeSyncFlag = flag; + } + + /** + * Sets the automatic population of metadata fields for ingested logs. + * + *

Default to {@code true}. + * + * @param flag the metadata auto-population flag. + */ + public void setAutoPopulateMetadata(boolean flag) { + autoPopulateMetadata = flag; + } + + /** + * Sets the redirect of the appender's output to STDOUT instead of ingesting logs to Cloud Logging + * using Logging API. + * + *

Default to {@code false}. + * + * @param flag the redirect flag. + */ + public void setRedirectToStdout(boolean flag) { + redirectToStdout = flag; + } + + /** + * Sets the {@link LogbackBatchingSettings} to be used for the asynchronous mode call(s) to + * Logging API + * + *

Default to {@code null}. + * + * @param batchingSettings the {@link LogbackBatchingSettings} to be used for asynchronous mode + * call(s) to Logging API + */ + public void setLogbackBatchingSettings(LogbackBatchingSettings batchingSettings) { + logbackBatchingSettings = batchingSettings; + } + + /** + * Sets the flag indicating if a batch's valid entries should be written even if some other entry + * failed due to an error. + * + *

Default to {@code true}. + * + * @param flag the partialSuccess flag. + */ + public void setPartialSuccess(boolean flag) { + partialSuccess = flag; + } + + /** Add extra labels using classes that implement {@link LoggingEnhancer}. */ + public void addEnhancer(String enhancerClassName) { + this.enhancerClassNames.add(enhancerClassName); + } + + public void addLoggingEventEnhancer(String enhancerClassName) { + this.loggingEventEnhancerClassNames.add(enhancerClassName); + } + + /** + * Returns the current value of the ingestion mode. + * + *

The method is deprecated. Use appender configuration to set up the ingestion + * + * @return a {@link Synchronicity} value of the ingestion module. + */ + @Deprecated + public Synchronicity getWriteSynchronicity() { + return (this.writeSyncFlag != null) ? this.writeSyncFlag : Synchronicity.ASYNC; + } + + private void setupMonitoredResource() { + if (monitoredResource == null && autoPopulateMetadata) { + monitoredResource = MonitoredResourceUtil.getResource(getProjectId(), resourceType); + } + } + + @InternalApi("Visible for testing") + void setupMonitoredResource(MonitoredResource monitoredResource) { + this.monitoredResource = monitoredResource; + } + + private Level getFlushLevel() { + return (flushLevel != null) ? flushLevel : Level.OFF; + } + + private String getLogName() { + return (log != null) ? log : "java.log"; + } + + private List getLoggingEnhancers() { + return getEnhancers(enhancerClassNames, LoggingEnhancer.class); + } + + private List getLoggingEventEnhancers() { + if (loggingEventEnhancerClassNames.isEmpty()) { + return DEFAULT_LOGGING_EVENT_ENHANCERS; + } else { + return getEnhancers(loggingEventEnhancerClassNames, LoggingEventEnhancer.class); + } + } + + private List getEnhancers(Set classNames, Class classOfT) { + List enhancers = new ArrayList<>(); + if (classNames != null) { + for (String className : classNames) { + if (className != null) { + try { + T enhancer = + Loader.loadClass(className.trim()) + .asSubclass(classOfT) + .getDeclaredConstructor() + .newInstance(); + enhancers.add(enhancer); + } catch (Exception ex) { + // invalid className: ignore + } + } + } + } + return enhancers; + } + + /** Initialize and configure the cloud logging service. */ + @Override + public synchronized void start() { + if (isStarted()) { + return; + } + + setupMonitoredResource(); + + defaultWriteOptions = + new WriteOption[] { + WriteOption.logName(getLogName()), + WriteOption.resource(monitoredResource), + WriteOption.partialSuccess(partialSuccess) + }; + Level flushLevel = getFlushLevel(); + if (flushLevel != Level.OFF) { + getLogging().setFlushSeverity(severityFor(flushLevel)); + } + loggingEnhancers = new ArrayList<>(); + List resourceEnhancers = MonitoredResourceUtil.getResourceEnhancers(); + loggingEnhancers.addAll(resourceEnhancers); + loggingEnhancers.addAll(getLoggingEnhancers()); + loggingEventEnhancers = new ArrayList<>(); + loggingEventEnhancers.addAll(getLoggingEventEnhancers()); + + super.start(); + } + + String getProjectId() { + return getLoggingOptions().getProjectId(); + } + + @Override + protected void append(ILoggingEvent e) { + List entriesList = new ArrayList<>(); + entriesList.add(logEntryFor(e)); + // Check if instrumentation was already added - if not, create a log entry with instrumentation + // data + if (!setInstrumentationStatus(true)) { + entriesList.add( + Instrumentation.createDiagnosticEntry( + JAVA_LOGBACK_LIBRARY_NAME, DEFAULT_INSTRUMENTATION_VERSION)); + } + Iterable entries = entriesList; + if (autoPopulateMetadata) { + entries = + getLogging() + .populateMetadata( + entries, + monitoredResource, + "com.google.cloud.logging", + "jdk", + "sun", + "java", + "ch.qos.logback"); + } + if (redirectToStdout) { + for (LogEntry entry : entries) { + System.out.println(entry.toStructuredJsonString()); + } + } else { + getLogging().write(entries, defaultWriteOptions); + } + } + + @Override + public synchronized void stop() { + if (logging != null) { + try { + logging.close(); + } catch (Exception ex) { + // ignore + } + } + logging = null; + super.stop(); + } + + Logging getLogging() { + if (logging == null) { + synchronized (this) { + if (logging == null) { + logging = getLoggingOptions().getService(); + logging.setWriteSynchronicity(writeSyncFlag); + } + } + } + return logging; + } + + /** Flushes any pending asynchronous logging writes. */ + @Deprecated + public void flush() { + if (!isStarted()) { + return; + } + synchronized (this) { + getLogging().flush(); + } + } + + /** Gets the {@link LoggingOptions} to use for this {@link LoggingAppender}. */ + protected LoggingOptions getLoggingOptions() { + if (loggingOptions == null) { + LoggingOptions.Builder builder = LoggingOptions.newBuilder(); + builder.setProjectId(logDestinationProjectId); + if (credentials != null) { + builder.setCredentials(credentials); + } else if (!Strings.isNullOrEmpty(credentialsFile)) { + try { + builder.setCredentials( + GoogleCredentials.fromStream(Files.newInputStream(Paths.get(credentialsFile)))); + } catch (IOException e) { + throw new RuntimeException( + String.format( + "Could not read credentials file %s. Please verify that the file exists and is a valid Google credentials file.", + credentialsFile), + e); + } + } + // opt-out metadata auto-population to control it in the appender code + builder.setAutoPopulateMetadata(false); + builder.setBatchingSettings( + this.logbackBatchingSettings != null ? this.logbackBatchingSettings.build() : null); + loggingOptions = builder.build(); + } + return loggingOptions; + } + + private LogEntry logEntryFor(ILoggingEvent e) { + StringBuilder payload = new StringBuilder().append(e.getFormattedMessage()).append('\n'); + writeStack(e.getThrowableProxy(), "", payload); + + Level level = e.getLevel(); + Severity severity = severityFor(level); + + Map jsonContent = new HashMap<>(); + jsonContent.put("message", payload.toString().trim()); + if (severity == Severity.ERROR) { + jsonContent.put("@type", TYPE); + } + LogEntry.Builder builder = + LogEntry.newBuilder(Payload.JsonPayload.of(jsonContent)) + .setTimestamp(Instant.ofEpochMilli(e.getTimeStamp())) + .setSeverity(severity); + builder + .addLabel(LEVEL_NAME_KEY, level.toString()) + .addLabel(LEVEL_VALUE_KEY, String.valueOf(level.toInt())) + .addLabel(LOGGER_NAME_KEY, e.getLoggerName()); + + if (loggingEnhancers != null) { + for (LoggingEnhancer enhancer : loggingEnhancers) { + enhancer.enhanceLogEntry(builder); + } + } + + if (loggingEventEnhancers != null) { + for (LoggingEventEnhancer enhancer : loggingEventEnhancers) { + enhancer.enhanceLogEntry(builder, e); + } + } + + return builder.build(); + } + + @InternalApi("Visible for testing") + static void writeStack(IThrowableProxy throwProxy, String prefix, StringBuilder payload) { + if (throwProxy == null) { + return; + } + payload + .append(prefix) + .append(throwProxy.getClassName()) + .append(": ") + .append(throwProxy.getMessage()) + .append('\n'); + StackTraceElementProxy[] trace = throwProxy.getStackTraceElementProxyArray(); + if (trace == null) { + trace = new StackTraceElementProxy[0]; + } + + int commonFrames = throwProxy.getCommonFrames(); + int printFrames = trace.length - commonFrames; + for (int i = 0; i < printFrames; i++) { + payload.append(" ").append(trace[i]).append('\n'); + } + if (commonFrames != 0) { + payload.append(" ... ").append(commonFrames).append(" common frames elided\n"); + } + + writeStack(throwProxy.getCause(), "caused by: ", payload); + } + + /** + * Transforms Logback logging levels to Cloud severity. + * + * @param level Logback logging level + * @return Cloud severity level + */ + private static Severity severityFor(Level level) { + switch (level.toInt()) { + // TRACE + case 5000: + return Severity.DEBUG; + // DEBUG + case 10000: + return Severity.DEBUG; + // INFO + case 20000: + return Severity.INFO; + // WARNING + case 30000: + return Severity.WARNING; + // ERROR + case 40000: + return Severity.ERROR; + default: + return Severity.DEFAULT; + } + } + + /** + * The package-private helper method used to set the flag which indicates if instrumentation info + * already written or not. + * + * @return The value of the flag before it was set. + */ + static boolean setInstrumentationStatus(boolean value) { + if (instrumentationAdded == value) return instrumentationAdded; + synchronized (instrumentationLock) { + boolean current = instrumentationAdded; + instrumentationAdded = value; + return current; + } + } +} diff --git a/java-logging-logback/src/main/java/com/google/cloud/logging/logback/LoggingEventEnhancer.java b/java-logging-logback/src/main/java/com/google/cloud/logging/logback/LoggingEventEnhancer.java new file mode 100644 index 000000000000..1e2d94afff2e --- /dev/null +++ b/java-logging-logback/src/main/java/com/google/cloud/logging/logback/LoggingEventEnhancer.java @@ -0,0 +1,28 @@ +/* + * Copyright 2025 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 + * + * 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 com.google.cloud.logging.logback; + +import ch.qos.logback.classic.spi.ILoggingEvent; +import com.google.cloud.logging.LogEntry; + +/** + * An enhancer for {@linkplain ILoggingEvent} log entries. Used to add custom labels to the {@link + * LogEntry.Builder}. + */ +public interface LoggingEventEnhancer { + void enhanceLogEntry(LogEntry.Builder builder, ILoggingEvent e); +} diff --git a/java-logging-logback/src/main/java/com/google/cloud/logging/logback/MDCEventEnhancer.java b/java-logging-logback/src/main/java/com/google/cloud/logging/logback/MDCEventEnhancer.java new file mode 100644 index 000000000000..b93e2c150911 --- /dev/null +++ b/java-logging-logback/src/main/java/com/google/cloud/logging/logback/MDCEventEnhancer.java @@ -0,0 +1,40 @@ +/* + * Copyright 2025 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 + * + * 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 com.google.cloud.logging.logback; + +import ch.qos.logback.classic.spi.ILoggingEvent; +import com.google.cloud.logging.LogEntry; +import java.util.Map; + +/** + * MDCEventEnhancer takes values found in the MDC property map and adds them as labels to the {@link + * LogEntry}. This {@link LoggingEventEnhancer} is turned on by default. If you wish to filter which + * MDC values get added as labels to your {@link LogEntry}, implement a {@link LoggingEventEnhancer} + * and add its classpath to your {@code logback.xml}. If any {@link LoggingEventEnhancer} is added + * this class is no longer registered. + */ +final class MDCEventEnhancer implements LoggingEventEnhancer { + + @Override + public void enhanceLogEntry(LogEntry.Builder builder, ILoggingEvent e) { + for (Map.Entry entry : e.getMDCPropertyMap().entrySet()) { + if (null != entry.getKey() && null != entry.getValue()) { + builder.addLabel(entry.getKey(), entry.getValue()); + } + } + } +} diff --git a/java-logging-logback/src/main/java/com/google/cloud/logging/logback/TraceLoggingEventEnhancer.java b/java-logging-logback/src/main/java/com/google/cloud/logging/logback/TraceLoggingEventEnhancer.java new file mode 100644 index 000000000000..0625d52a4322 --- /dev/null +++ b/java-logging-logback/src/main/java/com/google/cloud/logging/logback/TraceLoggingEventEnhancer.java @@ -0,0 +1,60 @@ +/* + * Copyright 2025 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 + * + * 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 com.google.cloud.logging.logback; + +import ch.qos.logback.classic.spi.ILoggingEvent; +import com.google.cloud.logging.LogEntry; +import org.slf4j.MDC; + +/** Adds support for grouping logs by incoming http request */ +public class TraceLoggingEventEnhancer implements LoggingEventEnhancer { + + // A key used by Cloud Logging for trace Id + private static final String TRACE_ID = "logging.googleapis.trace"; + + /** + * Set the Trace ID associated with any logging done by the current thread. + * + * @param id The traceID, in the form projects/[PROJECT_ID]/traces/[TRACE_ID] + */ + public static void setCurrentTraceId(String id) { + MDC.put(TRACE_ID, id); + } + + /** Clearing a trace Id from the MDC */ + public static void clearTraceId() { + MDC.remove(TRACE_ID); + } + + /** + * Get the Trace ID associated with any logging done by the current thread. + * + * @return id The traceID + */ + public static String getCurrentTraceId() { + return MDC.get(TRACE_ID); + } + + @Override + public void enhanceLogEntry(LogEntry.Builder builder, ILoggingEvent e) { + Object value = e.getMDCPropertyMap().get(TRACE_ID); + String traceId = value != null ? value.toString() : null; + if (traceId != null) { + builder.setTrace(traceId); + } + } +} diff --git a/java-logging-logback/src/main/resources/META-INF/native-image/com.google.cloud/google-cloud-logging-logback/reflect-config.json b/java-logging-logback/src/main/resources/META-INF/native-image/com.google.cloud/google-cloud-logging-logback/reflect-config.json new file mode 100644 index 000000000000..9d249db03f61 --- /dev/null +++ b/java-logging-logback/src/main/resources/META-INF/native-image/com.google.cloud/google-cloud-logging-logback/reflect-config.json @@ -0,0 +1,53 @@ +[ + { + "name":"ch.qos.logback.classic.Level", + "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }] + }, + { + "name":"ch.qos.logback.classic.filter.ThresholdFilter", + "queryAllPublicMethods":true, + "methods":[ + {"name":"","parameterTypes":[] }, + {"name":"setLevel","parameterTypes":["java.lang.String"] } + ] + }, + { + "name":"ch.qos.logback.core.UnsynchronizedAppenderBase", + "methods":[{"name":"addFilter","parameterTypes":["ch.qos.logback.core.filter.Filter"] }] + }, + { + "name":"com.google.cloud.logging.logback.LogbackBatchingSettings", + "queryAllPublicMethods":true, + "methods":[ + {"name":"","parameterTypes":[] }, + {"name":"setDelayThreshold","parameterTypes":["java.lang.Long"] }, + {"name":"setElementCountThreshold","parameterTypes":["java.lang.Long"] }, + {"name":"setLimitExceededBehavior","parameterTypes":["com.google.api.gax.batching.FlowController$LimitExceededBehavior"] }, + {"name":"setMaxOutstandingElementCount","parameterTypes":["java.lang.Long"] }, + {"name":"setMaxOutstandingRequestBytes","parameterTypes":["java.lang.Long"] }, + {"name":"setRequestByteThreshold","parameterTypes":["java.lang.Long"] } + ] + }, + { + "name":"com.google.cloud.logging.logback.LoggingAppender", + "queryAllPublicMethods":true, + "methods":[ + {"name":"","parameterTypes":[] }, + {"name":"setAutoPopulateMetadata","parameterTypes":["boolean"] }, + {"name":"setCredentialsFile","parameterTypes":["java.lang.String"] }, + {"name":"setCredentials","parameterTypes":["com.google.auth.oauth2.GoogleCredentials"] }, + {"name":"setFlushLevel","parameterTypes":["ch.qos.logback.classic.Level"] }, + {"name":"setLog","parameterTypes":["java.lang.String"] }, + {"name":"setLogDestinationProjectId","parameterTypes":["java.lang.String"] }, + {"name":"setLogbackBatchingSettings","parameterTypes":["com.google.cloud.logging.logback.LogbackBatchingSettings"] }, + {"name":"setPartialSuccess","parameterTypes":["boolean"] }, + {"name":"setRedirectToStdout","parameterTypes":["boolean"] }, + {"name":"setResourceType","parameterTypes":["java.lang.String"] }, + {"name":"setWriteSynchronicity","parameterTypes":["com.google.cloud.logging.Synchronicity"] } + ] + }, + { + "name":"java.lang.Long", + "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }] + } +] diff --git a/java-logging-logback/src/test/java/com/google/cloud/logging/logback/LoggingAppenderLogbackTest.java b/java-logging-logback/src/test/java/com/google/cloud/logging/logback/LoggingAppenderLogbackTest.java new file mode 100644 index 000000000000..f09151b3182c --- /dev/null +++ b/java-logging-logback/src/test/java/com/google/cloud/logging/logback/LoggingAppenderLogbackTest.java @@ -0,0 +1,57 @@ +/* + * Copyright 2025 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 + * + * 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 com.google.cloud.logging.logback; + +import static com.google.common.truth.Truth.assertThat; + +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.joran.JoranConfigurator; +import ch.qos.logback.core.joran.spi.JoranException; +import com.google.api.gax.batching.FlowController.LimitExceededBehavior; +import com.google.cloud.logging.LoggingOptions; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class LoggingAppenderLogbackTest { + @Test + public void testLoggingOptionsFromLogbackXMLFileConfig() throws JoranException { + LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); + JoranConfigurator jc = new JoranConfigurator(); + jc.setContext(context); + context.reset(); + jc.doConfigure("src/test/java/com/google/cloud/logging/logback/logback.xml"); + Logger logger = LoggerFactory.getLogger(LoggingAppenderLogbackTest.class); + assertThat(logger.getName()) + .isEqualTo("com.google.cloud.logging.logback.LoggingAppenderLogbackTest"); + LoggingAppender appender = (LoggingAppender) context.getLogger("ROOT").getAppender("CLOUD"); + LoggingOptions options = appender.getLoggingOptions(); + assertThat(options.getAutoPopulateMetadata()).isEqualTo(false); + assertThat(options.getBatchingSettings().getDelayThreshold().toMillis()).isEqualTo(500); + assertThat(options.getBatchingSettings().getElementCountThreshold()).isEqualTo(100); + assertThat(options.getBatchingSettings().getIsEnabled()).isEqualTo(true); + assertThat(options.getBatchingSettings().getRequestByteThreshold()).isEqualTo(1000); + assertThat(options.getBatchingSettings().getFlowControlSettings().getLimitExceededBehavior()) + .isEqualTo(LimitExceededBehavior.Ignore); + assertThat( + options.getBatchingSettings().getFlowControlSettings().getMaxOutstandingElementCount()) + .isEqualTo(10000); + assertThat( + options.getBatchingSettings().getFlowControlSettings().getMaxOutstandingRequestBytes()) + .isEqualTo(100000); + } +} diff --git a/java-logging-logback/src/test/java/com/google/cloud/logging/logback/LoggingAppenderTest.java b/java-logging-logback/src/test/java/com/google/cloud/logging/logback/LoggingAppenderTest.java new file mode 100644 index 000000000000..2399c9563fb1 --- /dev/null +++ b/java-logging-logback/src/test/java/com/google/cloud/logging/logback/LoggingAppenderTest.java @@ -0,0 +1,586 @@ +/* + * Copyright 2025 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 + * + * 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 com.google.cloud.logging.logback; + +import static com.google.common.truth.Truth.assertThat; +import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.capture; +import static org.easymock.EasyMock.expectLastCall; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.verify; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.filter.ThresholdFilter; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.classic.spi.LoggingEvent; +import com.google.auth.oauth2.GoogleCredentials; +import com.google.cloud.MonitoredResource; +import com.google.cloud.Timestamp; +import com.google.cloud.logging.Instrumentation; +import com.google.cloud.logging.LogEntry; +import com.google.cloud.logging.Logging; +import com.google.cloud.logging.Logging.WriteOption; +import com.google.cloud.logging.LoggingEnhancer; +import com.google.cloud.logging.Payload; +import com.google.cloud.logging.Payload.JsonPayload; +import com.google.cloud.logging.Payload.Type; +import com.google.cloud.logging.Severity; +import com.google.common.base.Strings; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.protobuf.ListValue; +import com.google.protobuf.Value; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.time.Instant; +import java.util.Map; +import org.easymock.Capture; +import org.easymock.EasyMock; +import org.easymock.EasyMockRunner; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.MDC; + +@RunWith(EasyMockRunner.class) +public class LoggingAppenderTest { + private static final String PROJECT_ID = "test-project"; + private static final String CRED_FILE_PROJECT_ID = "project-12345"; + private static final String OVERRIDDEN_PROJECT_ID = "some-project-id"; + private static final String DUMMY_CRED_FILE_PATH = + "src/test/java/com/google/cloud/logging/logback/dummy-credentials.json"; + private static final Payload.JsonPayload JSON_PAYLOAD = + Payload.JsonPayload.of(ImmutableMap.of("message", "this is a test")); + private static final Payload.JsonPayload JSON_ERROR_PAYLOAD = + Payload.JsonPayload.of( + ImmutableMap.of( + "message", + "this is a test", + "@type", + "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent")); + private static final MonitoredResource DEFAULT_RESOURCE = + MonitoredResource.of("global", ImmutableMap.of("project_id", PROJECT_ID)); + private static final LogEntry WARN_ENTRY = + LogEntry.newBuilder(JSON_PAYLOAD) + .setTimestamp(Instant.ofEpochMilli(100000L)) + .setSeverity(Severity.WARNING) + .setLabels( + new ImmutableMap.Builder() + .put("levelName", "WARN") + .put("levelValue", String.valueOf(30000L)) + .put("loggerName", LoggingAppenderTest.class.getName()) + // .put("test-label-1", "test-value-1") + // .put("test-label-2", "test-value-2") + .build()) + .build(); + private static final LogEntry ERROR_ENTRY = + LogEntry.newBuilder(JSON_ERROR_PAYLOAD) + .setTimestamp(Instant.ofEpochMilli(100000L)) + .setSeverity(Severity.ERROR) + .setLabels( + new ImmutableMap.Builder() + .put("levelName", "ERROR") + .put("levelValue", String.valueOf(40000L)) + .put("loggerName", LoggingAppenderTest.class.getName()) + .build()) + .build(); + private static final LogEntry INFO_ENTRY = + LogEntry.newBuilder(JSON_PAYLOAD) + .setTimestamp(Instant.ofEpochMilli(100000L)) + .setSeverity(Severity.INFO) + .setLabels( + new ImmutableMap.Builder() + .put("levelName", "INFO") + .put("levelValue", String.valueOf(20000L)) + .put("loggerName", LoggingAppenderTest.class.getName()) + .put("mdc1", "value1") + .put("mdc2", "value2") + .build()) + .build(); + + private Logging logging; + private LoggingAppender loggingAppender; + + static class CustomLoggingEventEnhancer implements LoggingEventEnhancer { + + @Override + public void enhanceLogEntry(LogEntry.Builder builder, ILoggingEvent e) { + builder.addLabel("foo", "bar"); + } + } + + static class CustomLoggingEnhancer implements LoggingEnhancer { + + @Override + public void enhanceLogEntry(LogEntry.Builder builder) { + builder.addLabel("foo", "bar"); + } + } + + class TestLoggingAppender extends LoggingAppender { + @Override + String getProjectId() { + return PROJECT_ID; + } + + @Override + Logging getLogging() { + return logging; + } + } + + @Before + public void setUp() { + LoggingAppender.setInstrumentationStatus(true); + logging = EasyMock.createStrictMock(Logging.class); + loggingAppender = new TestLoggingAppender(); + loggingAppender.setAutoPopulateMetadata(false); + } + + private final WriteOption[] defaultWriteOptions = + new WriteOption[] { + WriteOption.logName("java.log"), + WriteOption.resource( + MonitoredResource.newBuilder("global") + .setLabels( + new ImmutableMap.Builder() + .put("project_id", PROJECT_ID) + .build()) + .build()), + WriteOption.partialSuccess(true), + }; + + @Test + public void testFlushLevelConfigUpdatesLoggingFlushSeverity() { + logging.setFlushSeverity(Severity.WARNING); + Capture> capturedArgument = Capture.newInstance(); + logging.write( + capture(capturedArgument), + anyObject(WriteOption.class), + anyObject(WriteOption.class), + anyObject(WriteOption.class)); + replay(logging); + Timestamp timestamp = Timestamp.ofTimeSecondsAndNanos(100000, 0); + LoggingEvent loggingEvent = createLoggingEvent(Level.WARN, timestamp.getSeconds()); + // error is the default, updating to warn for test + loggingAppender.setFlushLevel(Level.WARN); + loggingAppender.start(); + loggingAppender.doAppend(loggingEvent); + verify(logging); + assertThat(capturedArgument.getValue().iterator().hasNext()).isTrue(); + assertThat(capturedArgument.getValue().iterator().next()).isEqualTo(WARN_ENTRY); + } + + @Test + public void testFlushLevelConfigSupportsFlushLevelOff() { + loggingAppender.setFlushLevel(Level.OFF); + loggingAppender.start(); + Severity foundSeverity = logging.getFlushSeverity(); + assertThat(foundSeverity).isEqualTo(null); + } + + @Test + public void testDefaultFlushLevelOff() { + loggingAppender.start(); + Severity foundSeverity = logging.getFlushSeverity(); + assertThat(foundSeverity).isEqualTo(null); + } + + @Test + public void testFilterLogsOnlyLogsAtOrAboveLogLevel() { + Capture> capturedArgument = Capture.newInstance(); + logging.write( + capture(capturedArgument), + anyObject(WriteOption.class), + anyObject(WriteOption.class), + anyObject(WriteOption.class)); + expectLastCall().once(); + replay(logging); + Timestamp timestamp = Timestamp.ofTimeSecondsAndNanos(100000, 0); + LoggingEvent loggingEvent1 = createLoggingEvent(Level.INFO, timestamp.getSeconds()); + ThresholdFilter thresholdFilter = new ThresholdFilter(); + thresholdFilter.setLevel("ERROR"); + thresholdFilter.start(); + loggingAppender.addFilter(thresholdFilter); + loggingAppender.start(); + // info event does not get logged + loggingAppender.doAppend(loggingEvent1); + LoggingEvent loggingEvent2 = createLoggingEvent(Level.ERROR, timestamp.getSeconds()); + // error event gets logged + loggingAppender.doAppend(loggingEvent2); + verify(logging); + assertThat(capturedArgument.getValue().iterator().hasNext()).isTrue(); + assertThat(capturedArgument.getValue().iterator().next()).isEqualTo(ERROR_ENTRY); + } + + @Test + public void testPartialSuccessOverrideHasExpectedValue() { + Capture logNameArg = Capture.newInstance(); + Capture resourceArg = Capture.newInstance(); + Capture partialSuccessArg = Capture.newInstance(); + logging.write( + EasyMock.>anyObject(), + capture(logNameArg), + capture(resourceArg), + capture(partialSuccessArg)); + expectLastCall().once(); + replay(logging); + loggingAppender.start(); + Timestamp timestamp = Timestamp.ofTimeSecondsAndNanos(100000, 0); + LoggingEvent loggingEvent = createLoggingEvent(Level.ERROR, timestamp.getSeconds()); + loggingAppender.doAppend(loggingEvent); + + assertThat(logNameArg.getValue()).isEqualTo(defaultWriteOptions[0]); + // TODO(chingor): Fix this test to work on GCE and locally + // assertThat(resourceArg.getValue()).isEqualTo(defaultWriteOptions[1]); + assertThat(partialSuccessArg.getValue()).isEqualTo(defaultWriteOptions[2]); + } + + @Test + public void testDefaultWriteOptionsHasExpectedDefaults() { + Capture partialSuccessArg = Capture.newInstance(); + logging.write( + EasyMock.>anyObject(), + anyObject(WriteOption.class), + anyObject(WriteOption.class), + capture(partialSuccessArg)); + expectLastCall().once(); + replay(logging); + loggingAppender.setPartialSuccess(false); + loggingAppender.start(); + Timestamp timestamp = Timestamp.ofTimeSecondsAndNanos(100000, 0); + LoggingEvent loggingEvent = createLoggingEvent(Level.ERROR, timestamp.getSeconds()); + loggingAppender.doAppend(loggingEvent); + assertThat(partialSuccessArg.getValue()).isEqualTo(WriteOption.partialSuccess(false)); + } + + @Test + public void testMdcValuesAreConvertedToLabels() { + Capture> capturedArgument = Capture.newInstance(); + logging.write( + capture(capturedArgument), + anyObject(WriteOption.class), + anyObject(WriteOption.class), + anyObject(WriteOption.class)); + expectLastCall().once(); + replay(logging); + Timestamp timestamp = Timestamp.ofTimeSecondsAndNanos(100000, 0); + LoggingEvent loggingEvent = createLoggingEvent(Level.INFO, timestamp.getSeconds()); + loggingEvent.setMDCPropertyMap(ImmutableMap.of("mdc1", "value1", "mdc2", "value2")); + loggingAppender.start(); + // info event does not get logged + loggingAppender.doAppend(loggingEvent); + verify(logging); + assertThat(capturedArgument.getValue().iterator().hasNext()).isTrue(); + assertThat(capturedArgument.getValue().iterator().next()).isEqualTo(INFO_ENTRY); + } + + @Test + public void testCreateLoggingOptionsWithValidCredentials() { + LoggingAppender appender = new LoggingAppender(); + appender.setCredentials(GoogleCredentials.newBuilder().build()); + // ServiceOptions requires a projectId to be set. Normally this is determined by the + // GoogleCredentials (Credential set above is a dummy value with no ProjectId). + appender.setLogDestinationProjectId(PROJECT_ID); + appender.getLoggingOptions(); + } + + @Test + public void testCreateLoggingOptionsWithNullCredentials() { + LoggingAppender appender = new LoggingAppender(); + assertThrows(NullPointerException.class, () -> appender.setCredentials(null)); + } + + @Test(expected = RuntimeException.class) + public void testCreateLoggingOptionsWithInvalidCredentials() { + final String nonExistentFile = "/path/to/non/existent/file"; + LoggingAppender appender = new LoggingAppender(); + appender.setCredentialsFile(nonExistentFile); + appender.getLoggingOptions(); + } + + @Test + public void testCreateLoggingOptionsWithCredentials() { + // Try to build LoggingOptions with file based credentials. + LoggingAppender appender = new LoggingAppender(); + appender.setCredentialsFile(DUMMY_CRED_FILE_PATH); + assertThat(appender.getLoggingOptions().getProjectId()).isEqualTo(CRED_FILE_PROJECT_ID); + } + + @Test + public void testCreateLoggingOptionsWithDestination() { + // Try to build LoggingOptions with file based credentials. + LoggingAppender appender = new LoggingAppender(); + appender.setCredentialsFile(DUMMY_CRED_FILE_PATH); + appender.setLogDestinationProjectId(OVERRIDDEN_PROJECT_ID); + assertThat(appender.getLoggingOptions().getProjectId()).isEqualTo(OVERRIDDEN_PROJECT_ID); + } + + private LoggingEvent createLoggingEvent(Level level, long timestamp) { + LoggingEvent loggingEvent = new LoggingEvent(); + loggingEvent.setMessage("this is a test"); + loggingEvent.setLevel(level); + loggingEvent.setTimeStamp(timestamp); + loggingEvent.setLoggerName(this.getClass().getName()); + return loggingEvent; + } + + @Test + public void testMdcValuesAreConvertedToLabelsWithPassingNullValues() { + MDC.put("mdc1", "value1"); + MDC.put("mdc2", null); + MDC.put("mdc3", "value3"); + Capture> capturedArgument = Capture.newInstance(); + logging.write( + capture(capturedArgument), + anyObject(WriteOption.class), + anyObject(WriteOption.class), + anyObject(WriteOption.class)); + expectLastCall().once(); + replay(logging); + Timestamp timestamp = Timestamp.ofTimeSecondsAndNanos(100000, 0); + LoggingEvent loggingEvent = createLoggingEvent(Level.INFO, timestamp.getSeconds()); + loggingAppender.start(); + loggingAppender.doAppend(loggingEvent); + verify(logging); + MDC.remove("mdc1"); + MDC.remove("mdc3"); + Map capturedArgumentMap = + capturedArgument.getValue().iterator().next().getLabels(); + assertThat(capturedArgumentMap.get("mdc1")).isEqualTo("value1"); + assertThat(capturedArgumentMap.get("mdc2")).isNull(); + assertThat(capturedArgumentMap.get("mdc3")).isEqualTo("value3"); + } + + @Test + public void testAddCustomLoggingEventEnhancers() { + MDC.put("mdc1", "value1"); + Capture> capturedArgument = Capture.newInstance(); + logging.write( + capture(capturedArgument), + anyObject(WriteOption.class), + anyObject(WriteOption.class), + anyObject(WriteOption.class)); + expectLastCall().once(); + replay(logging); + Timestamp timestamp = Timestamp.ofTimeSecondsAndNanos(100000, 0); + LoggingEvent loggingEvent = createLoggingEvent(Level.INFO, timestamp.getSeconds()); + loggingAppender.addLoggingEventEnhancer(CustomLoggingEventEnhancer.class.getName()); + loggingAppender.start(); + loggingAppender.doAppend(loggingEvent); + verify(logging); + MDC.remove("mdc1"); + Map capturedArgumentMap = + capturedArgument.getValue().iterator().next().getLabels(); + assertThat(capturedArgumentMap.get("mdc1")).isNull(); + assertThat(capturedArgumentMap.get("foo")).isEqualTo("bar"); + } + + @Test + public void testAddCustomLoggingEnhancer() { + Capture> capturedArgument = Capture.newInstance(); + logging.write( + capture(capturedArgument), + anyObject(WriteOption.class), + anyObject(WriteOption.class), + anyObject(WriteOption.class)); + expectLastCall().once(); + replay(logging); + loggingAppender.addEnhancer(CustomLoggingEnhancer.class.getName()); + loggingAppender.start(); + Timestamp timestamp = Timestamp.ofTimeSecondsAndNanos(100000, 0); + LoggingEvent loggingEvent = createLoggingEvent(Level.WARN, timestamp.getSeconds()); + loggingAppender.doAppend(loggingEvent); + verify(logging); + Map capturedArgumentMap = + capturedArgument.getValue().iterator().next().getLabels(); + assertThat(capturedArgumentMap.get("foo")).isEqualTo("bar"); + } + + @Test + @SuppressWarnings("deprecation") + public void testFlush() { + logging.write( + EasyMock.>anyObject(), + anyObject(WriteOption.class), + anyObject(WriteOption.class), + anyObject(WriteOption.class)); + expectLastCall().times(2); + logging.flush(); + replay(logging); + loggingAppender.start(); + Timestamp timestamp = Timestamp.ofTimeSecondsAndNanos(100000, 0); + LoggingEvent firstLoggingEvent = createLoggingEvent(Level.WARN, timestamp.getSeconds()); + LoggingEvent secondLoggingEvent = createLoggingEvent(Level.INFO, timestamp.getSeconds()); + loggingAppender.doAppend(firstLoggingEvent); + loggingAppender.doAppend(secondLoggingEvent); + loggingAppender.flush(); + verify(logging); + } + + @Test + public void testAutoPopulationEnabled() { + Capture> capturedLogEntries = Capture.newInstance(); + EasyMock.expect( + logging.populateMetadata( + capture(capturedLogEntries), + EasyMock.eq(DEFAULT_RESOURCE), + EasyMock.eq("com.google.cloud.logging"), + EasyMock.eq("jdk"), + EasyMock.eq("sun"), + EasyMock.eq("java"), + EasyMock.eq("ch.qos.logback"))) + .andReturn(ImmutableList.of(INFO_ENTRY)) + .once(); + // it is impossible to define expectation for varargs using a single anyObject() matcher + // see the EasyMock bug https://github.com/easymock/easymock/issues/130. + // the following mock uses the known fact that the method pass two WriteOption arguments + // the arguments should be replaced with a single anyObject() matchers when the bug is fixed + logging.write( + EasyMock.>anyObject(), + anyObject(WriteOption.class), + anyObject(WriteOption.class), + anyObject(WriteOption.class)); + expectLastCall().once(); + replay(logging); + + loggingAppender.setupMonitoredResource(DEFAULT_RESOURCE); + loggingAppender.setAutoPopulateMetadata(true); + loggingAppender.start(); + Timestamp timestamp = Timestamp.ofTimeSecondsAndNanos(100000, 0); + LoggingEvent loggingEvent = createLoggingEvent(Level.INFO, timestamp.getSeconds()); + loggingEvent.setMDCPropertyMap(ImmutableMap.of("mdc1", "value1", "mdc2", "value2")); + loggingAppender.doAppend(loggingEvent); + verify(logging); + LogEntry testLogEntry = capturedLogEntries.getValue().iterator().next(); + assertThat(testLogEntry).isEqualTo(INFO_ENTRY); + } + + @Test + public void testRedirectToStdoutEnabled() { + EasyMock.expect( + logging.populateMetadata( + EasyMock.>anyObject(), + EasyMock.anyObject(MonitoredResource.class), + EasyMock.anyString(), + EasyMock.anyString(), + EasyMock.anyString(), + EasyMock.anyString(), + EasyMock.anyString())) + .andReturn(ImmutableList.of(INFO_ENTRY)) + .once(); + replay(logging); + + ByteArrayOutputStream bout = new ByteArrayOutputStream(); + PrintStream out = new PrintStream(bout); + System.setOut(out); + loggingAppender.setupMonitoredResource(DEFAULT_RESOURCE); + loggingAppender.setAutoPopulateMetadata(true); + loggingAppender.setRedirectToStdout(true); + loggingAppender.start(); + Timestamp timestamp = Timestamp.ofTimeSecondsAndNanos(100000, 0); + LoggingEvent loggingEvent = createLoggingEvent(Level.INFO, timestamp.getSeconds()); + loggingAppender.doAppend(loggingEvent); + verify(logging); + assertThat(Strings.isNullOrEmpty(bout.toString())).isFalse(); + System.setOut(null); + } + + @Test + public void testRedirectToStdoutDisabled() { + ByteArrayOutputStream bout = new ByteArrayOutputStream(); + PrintStream out = new PrintStream(bout); + System.setOut(out); + + testAutoPopulationEnabled(); + + assertThat(Strings.isNullOrEmpty(bout.toString())).isTrue(); + System.setOut(null); + } + + @Test + public void testFDiagnosticInfoAdded() { + LoggingAppender.setInstrumentationStatus(false); + Capture> capturedArgument = Capture.newInstance(); + logging.write( + capture(capturedArgument), + anyObject(WriteOption.class), + anyObject(WriteOption.class), + anyObject(WriteOption.class)); + replay(logging); + LoggingEvent loggingEvent = + createLoggingEvent(Level.ERROR, Timestamp.ofTimeSecondsAndNanos(100000, 0).getSeconds()); + loggingAppender.start(); + loggingAppender.doAppend(loggingEvent); + verify(logging); + int count = 0; + int diagnosticRecordCount = 0; + for (LogEntry entry : capturedArgument.getValue()) { + count++; + if (entry.getPayload().getType() == Type.JSON) { + JsonPayload payload = entry.getPayload(); + if (!payload.getData().containsFields(Instrumentation.DIAGNOSTIC_INFO_KEY)) continue; + ListValue infoList = + payload + .getData() + .getFieldsOrThrow(Instrumentation.DIAGNOSTIC_INFO_KEY) + .getStructValue() + .getFieldsOrThrow(Instrumentation.INSTRUMENTATION_SOURCE_KEY) + .getListValue(); + for (Value val : infoList.getValuesList()) { + String name = + val.getStructValue() + .getFieldsOrThrow(Instrumentation.INSTRUMENTATION_NAME_KEY) + .getStringValue(); + assertThat(name.startsWith(Instrumentation.JAVA_LIBRARY_NAME_PREFIX)).isTrue(); + if (name.equals(LoggingAppender.JAVA_LOGBACK_LIBRARY_NAME)) { + diagnosticRecordCount++; + } + } + } + } + assertEquals(count, 2); + assertEquals(diagnosticRecordCount, 1); + } + + @Test + public void testFDiagnosticInfoNotAdded() { + Capture> capturedArgument = Capture.newInstance(); + logging.write( + capture(capturedArgument), + anyObject(WriteOption.class), + anyObject(WriteOption.class), + anyObject(WriteOption.class)); + replay(logging); + LoggingEvent loggingEvent = + createLoggingEvent(Level.WARN, Timestamp.ofTimeSecondsAndNanos(100000, 0).getSeconds()); + loggingAppender.start(); + loggingAppender.doAppend(loggingEvent); + verify(logging); + int count = 0; + for (LogEntry entry : capturedArgument.getValue()) { + count++; + if (entry.getPayload().getType() == Type.JSON) { + JsonPayload payload = entry.getPayload(); + assertThat(payload.getData().containsFields(Instrumentation.DIAGNOSTIC_INFO_KEY)).isFalse(); + } + } + assertEquals(count, 1); + } +} diff --git a/java-logging-logback/src/test/java/com/google/cloud/logging/logback/MDCEventEnhancerTest.java b/java-logging-logback/src/test/java/com/google/cloud/logging/logback/MDCEventEnhancerTest.java new file mode 100644 index 000000000000..c588003c2b15 --- /dev/null +++ b/java-logging-logback/src/test/java/com/google/cloud/logging/logback/MDCEventEnhancerTest.java @@ -0,0 +1,48 @@ +/* + * Copyright 2025 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 + * + * 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 com.google.cloud.logging.logback; + +import static com.google.common.truth.Truth.assertThat; + +import ch.qos.logback.classic.spi.LoggingEvent; +import com.google.cloud.logging.LogEntry; +import com.google.cloud.logging.Payload.StringPayload; +import java.util.Collections; +import org.junit.Before; +import org.junit.Test; + +public class MDCEventEnhancerTest { + private MDCEventEnhancer classUnderTest; + + @Before + public void setUp() { + classUnderTest = new MDCEventEnhancer(); + } + + @Test + public void testEnhanceLogEntry() { + LoggingEvent loggingEvent = new LoggingEvent(); + loggingEvent.setMessage("this is a test"); + loggingEvent.setMDCPropertyMap(Collections.singletonMap("foo", "bar")); + LogEntry.Builder builder = LogEntry.newBuilder(StringPayload.of("this is a test")); + + classUnderTest.enhanceLogEntry(builder, loggingEvent); + LogEntry logEntry = builder.build(); + + assertThat(logEntry.getLabels().get("foo")).isEqualTo("bar"); + } +} diff --git a/java-logging-logback/src/test/java/com/google/cloud/logging/logback/StackTraceTest.java b/java-logging-logback/src/test/java/com/google/cloud/logging/logback/StackTraceTest.java new file mode 100644 index 000000000000..dfec67104240 --- /dev/null +++ b/java-logging-logback/src/test/java/com/google/cloud/logging/logback/StackTraceTest.java @@ -0,0 +1,38 @@ +/* + * Copyright 2025 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 + * + * 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 com.google.cloud.logging.logback; + +import static com.google.common.truth.Truth.assertThat; + +import ch.qos.logback.classic.spi.ThrowableProxy; +import org.junit.Test; + +public class StackTraceTest { + @Test + public void testStack() { + Exception ex = new UnsupportedOperationException("foo"); + ex = new IllegalStateException("bar", ex); + + StringBuilder stackBuilder = new StringBuilder(); + LoggingAppender.writeStack(new ThrowableProxy(ex), "", stackBuilder); + String stack = stackBuilder.toString(); + + assertThat(stack).contains("java.lang.IllegalStateException: bar"); + assertThat(stack).contains("caused by: java.lang.UnsupportedOperationException: foo"); + assertThat(stack).contains("common frames elided"); + } +} diff --git a/java-logging-logback/src/test/java/com/google/cloud/logging/logback/TraceLoggingEventEnhancerTest.java b/java-logging-logback/src/test/java/com/google/cloud/logging/logback/TraceLoggingEventEnhancerTest.java new file mode 100644 index 000000000000..0c69a49bfd97 --- /dev/null +++ b/java-logging-logback/src/test/java/com/google/cloud/logging/logback/TraceLoggingEventEnhancerTest.java @@ -0,0 +1,70 @@ +/* + * Copyright 2025 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 + * + * 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 com.google.cloud.logging.logback; + +import static com.google.common.truth.Truth.assertThat; + +import ch.qos.logback.classic.spi.LoggingEvent; +import com.google.cloud.logging.LogEntry; +import com.google.cloud.logging.Payload.StringPayload; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class TraceLoggingEventEnhancerTest { + private TraceLoggingEventEnhancer classUnderTest; + + @Before + public void setUp() { + classUnderTest = new TraceLoggingEventEnhancer(); + } + + @After + public void tearDown() { + TraceLoggingEventEnhancer.clearTraceId(); + } + + @Test + public void testEnhanceLogEntry() { + // setup + String traceId = "abc"; + TraceLoggingEventEnhancer.setCurrentTraceId(traceId); + LoggingEvent loggingEvent = new LoggingEvent(); + loggingEvent.setMessage("this is a test"); + LogEntry.Builder builder = LogEntry.newBuilder(StringPayload.of("this is a test")); + + // act + classUnderTest.enhanceLogEntry(builder, loggingEvent); + LogEntry logEntry = builder.build(); + + // assert - Trace Id should be recorded as explicit Trace field, not as a label + assertThat(traceId.equalsIgnoreCase(logEntry.getTrace())); + } + + @Test + public void testGetCurrentTraceId() { + // setup + String traceId = "abc"; + TraceLoggingEventEnhancer.setCurrentTraceId(traceId); + + // act + String currentTraceId = TraceLoggingEventEnhancer.getCurrentTraceId(); + + // assert + assertThat(traceId.equalsIgnoreCase(currentTraceId)); + } +} diff --git a/java-logging-logback/src/test/java/com/google/cloud/logging/logback/dummy-credentials.json b/java-logging-logback/src/test/java/com/google/cloud/logging/logback/dummy-credentials.json new file mode 100644 index 000000000000..c99e8764e24d --- /dev/null +++ b/java-logging-logback/src/test/java/com/google/cloud/logging/logback/dummy-credentials.json @@ -0,0 +1,12 @@ +{ + "type": "service_account", + "project_id": "project-12345", + "private_key_id": "12345", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKhPSTDs4cpKfnMc\np86fCkpnuER7bGc+mGkhkw6bE+BnROfrDCFBSjrENLS5JcsenANQ1kYGt9iVW2fd\nZAWUdDoj+t7g6+fDpzY1BzPSUls421Dmu7joDPY8jSdMzFCeg7Lyj0I36bJJ7ooD\nVPW6Q0XQcb8FfBiFPAKuY4elj/YDAgMBAAECgYBo2GMWmCmbM0aL/KjH/KiTawMN\nnfkMY6DbtK9/5LjADHSPKAt5V8ueygSvI7rYSiwToLKqEptJztiO3gnls/GmFzj1\nV/QEvFs6Ux3b0hD2SGpGy1m6NWWoAFlMISRkNiAxo+AMdCi4I1hpk4+bHr9VO2Bv\nV0zKFxmgn1R8qAR+4QJBANqKxJ/qJ5+lyPuDYf5s+gkZWjCLTC7hPxIJQByDLICw\niEnqcn0n9Gslk5ngJIGQcKBXIp5i0jWSdKN/hLxwgHECQQDFKGmo8niLzEJ5sa1r\nspww8Hc2aJM0pBwceshT8ZgVPnpgmITU1ENsKpJ+y1RTjZD6N0aj9gS9UB/UXdTr\nHBezAkEAqkDRTYOtusH9AXQpM3zSjaQijw72Gs9/wx1RxOSsFtVwV6U97CLkV1S+\n2HG1/vn3w/IeFiYGfZXLKFR/pA5BAQJAbFeu6IaGM9yFUzaOZDZ8mnAqMp349t6Q\nDB5045xJxLLWsSpfJE2Y12H1qvO1XUzYNIgXq5ZQOHBFbYA6txBy/QJBAKDRQN47\n6YClq9652X+1lYIY/h8MxKiXpVZVncXRgY6pbj4pmWEAM88jra9Wq6R77ocyECzi\nXCqi18A/sl6ymWc=\n-----END PRIVATE KEY-----\n", + "client_email": "project-12345@appspot.gserviceaccount.com", + "client_id": "123456789012345678901", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/project-12345%40appspot.gserviceaccount.com" + } diff --git a/java-logging-logback/src/test/java/com/google/cloud/logging/logback/logback.xml b/java-logging-logback/src/test/java/com/google/cloud/logging/logback/logback.xml new file mode 100644 index 000000000000..66e86e4e7d4d --- /dev/null +++ b/java-logging-logback/src/test/java/com/google/cloud/logging/logback/logback.xml @@ -0,0 +1,57 @@ + + + + + INFO + + + + application.log + + + WARN + + + SYNC + + + false + + + true + + + global + + + src/test/java/com/google/cloud/logging/logback/dummy-credentials.json + + + String + + + + + + true + + + + 100 + 1000 + 500 + 10000 + 100000 + Ignore + + + + + + + diff --git a/pom.xml b/pom.xml index d61b4c18e4c6..f261e559d9ec 100644 --- a/pom.xml +++ b/pom.xml @@ -131,6 +131,7 @@ java-licensemanager java-life-sciences java-locationfinder + java-logging-logback java-lustre java-maintenance java-managed-identities diff --git a/versions.txt b/versions.txt index 9cbe2eb77f5d..058ea3cec162 100644 --- a/versions.txt +++ b/versions.txt @@ -934,3 +934,4 @@ grpc-google-cloud-maintenance-v1:0.15.0:0.16.0-SNAPSHOT google-cloud-gkerecommender:0.1.0:0.2.0-SNAPSHOT proto-google-cloud-gkerecommender-v1:0.1.0:0.2.0-SNAPSHOT grpc-google-cloud-gkerecommender-v1:0.1.0:0.2.0-SNAPSHOT +google-cloud-logging-logback:0.132.20-alpha:0.132.21-alpha-SNAPSHOT