Repository navigation
Description
Please make sure you have searched for information in the following guides.
- Search the issues already opened: https://github.com/GoogleCloudPlatform/google-cloud-node/issues
- Search StackOverflow: http://stackoverflow.com/questions/tagged/google-cloud-platform+node.js
- Check our Troubleshooting guide: https://github.com/googleapis/google-cloud-node/blob/main/docs/troubleshooting.md
- Check our FAQ: https://github.com/googleapis/google-cloud-node/blob/main/docs/faq.md
- Check our libraries HOW-TO: https://github.com/googleapis/gax-nodejs/blob/main/client-libraries.md
- Check out our authentication guide: https://github.com/googleapis/google-auth-library-nodejs
- Check out handwritten samples for many of our APIs: https://github.com/GoogleCloudPlatform/nodejs-docs-samples
- Check the API's issue tracker: https://cloud.google.com/support/docs/issue-trackers
Library Name
@google-cloud/logging — comparing 11.2.1 and 12.0.0
A screenshot that you have tested with "Try this API".
Not applicable: this issue concerns client-side request batching in the generated Node.js SDK. API Explorer sends requests directly and cannot exercise the SDK's google-gax batching scheduler.
The linked reproduction uses mocked transport calls and exercises the actual generated client wrappers and google-gax scheduler. It requires no credentials or Google Cloud project and makes no real Google Cloud API calls.
No API Explorer test was performed.
Link to the code that reproduces this issue. A link to a public Github Repository or gist with a minimal reproduction.
https://github.com/jacekerd/google-logging-batching-repro
A step-by-step description of how to reproduce the issue, based on the linked reproduction.
Requirements: Node.js 22 or newer and npm.
-
Clone the reproduction:
git clone https://github.com/jacekerd/google-logging-batching-repro.git cd google-logging-batching-repro -
Install the two locked dependency trees:
npm ci --prefix versions/v11 --ignore-scripts --no-audit --no-fund npm ci --prefix versions/v12 --ignore-scripts --no-audit --no-fund
-
Inspect batching metadata and exercise compatible writes:
npm run check:v11 npm run check:v12 npm run behavior npm test -
Run the assertion that v12 should preserve v11 batching behavior:
npm run test:expect-v11
Observed results:
- v11.2.1 has descriptors.batching.writeLogEntries; two compatible writes produce one mocked transport invocation containing both entries.
- v12.0.0 has an empty descriptors.batching object; the same writes produce two separate mocked transport invocations.
- npm test passes five tests documenting these observations.
- npm run test:expect-v11 intentionally exits 1, with one failed parity assertion.
The reproduction uses real generated wrappers and google-gax scheduling, with the transport stubbed. No credentials or real Cloud API requests are required.
A clear and concise description of what the bug is, and what you expected to happen.
Automatic WriteLogEntries batching differs between @google-cloud/logging@11.2.1 and @google-cloud/logging@12.0.0.
In 11.2.1, LoggingServiceV2Client initializes descriptors.batching.writeLogEntries and combines compatible calls into one transport request.
In 12.0.0, LoggingServiceV2Client is re-exported from @google-cloud/logging-api@0.2.0. That generated implementation has an empty batching descriptor object and lacks the corresponding bundling defaults and batching descriptor selection.
Expected: compatible WriteLogEntries calls retain automatic batching.
Actual: two compatible calls produce two transport requests instead of one.
Explicit higher-level log.write([entry1, entry2]) remains supported. The issue concerns automatic coalescing across separate GAPIC calls.
These versions establish the behavioral difference; they do not identify the first affected intermediate release.
A clear and concise description WHY you expect this behavior, i.e., was it a recent change, there is documentation that points to this behavior, etc. **
@google-cloud/logging@11.2.1 automatically combines compatible WriteLogEntries calls. I expected this behavior to remain available after upgrading to 12.0.0.
The historical Node.js generation target explicitly supplied google/logging/v2/logging_gapic.yaml, which defines batching for WriteLogEntries. Investigation indicates that the logging-api onboarding omitted nodejs.bundle_config from librarian.yaml, causing the generated client to lose its batching descriptor, bundling defaults, and batching descriptor selection.
The reproduction demonstrates one mocked transport invocation for two compatible writes in v11, versus two invocations in v12. Restoring the missing configuration in memory restores batching with v12's existing google-gax runtime.
Relevant references:
- Reproduction: https://github.com/jacekerd/google-logging-batching-repro
- Historical batching configuration: https://github.com/googleapis/googleapis/blob/2b625c91510a2e8320a778bc88af8b65bc4a19a2/google/logging/v2/logging_gapic.yaml
- logging-api onboarding: feat(google/logging/v2): onboard a new library #8863
- Logging package split: feat(logging): split GAPIC from the logging handwritten package #8929
I'd expect the automatic GAPIC batching to be preserved across this migration.
Activity
jacekerd commentedon Oct 19, 2026
upstream-batching.patch.txt
I also prepared a proposed fix locally.
In librarian.yaml, add the following to the Logging API library's nodejs configuration:
bundle_config: google/logging/v2/logging_gapic.yamlThen regenerate the Logging API client. This restores the WriteLogEntries batching descriptor, bundling defaults, and descriptor selection through the generation configuration.
The attached patch also includes a mocked regression test covering compatible requests being combined and requests with different discriminator values remaining separate.
I have not opened a PR. Does this approach match the intended generation workflow?
miguellucasz commentedon Oct 28, 2026
Adding the first affected version, since the report compares 11.2.1 with 12.0.0:
LoggingServiceV2Clientbuildsdescriptors.batching.writeLogEntriesand selects it ininitialize(). Its client config has thebundlingblock (50 ms / 1000 entries).@google-cloud/logging-api(feat(logging): split GAPIC from the logging handwritten package #8929). Inlogging-api@0.2.0,descriptors.batchingis{},initialize()only selects page and stream descriptors, and the config has nobundling.@google-cloud/logging-api@0.5.1, the latest release.@google-cloud/logging-winston@6.0.2: 28 log lines written in a tight loop reached a local fake gRPC server as 3WriteLogEntriescalls on 11.3.0 and 28 calls on 11.4.0.This is consistent with the missing
bundle_configdescribed above.Workaround we're using until a fix ships, for logging-winston users on the 11.x line: