opentelemetry-logs-api 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9bcc2cd3e4fc7a60b02c3986b19e954fde08dc1b53303e46e47810d8f72565dc
4
- data.tar.gz: 43eca62177b7e61f20583df1ba6303f3fba0224a327d03f3968d94646a804a71
3
+ metadata.gz: 9b79311663b08bc24f42364c95dc9e9ad7661305c1133fc4055325812a875acd
4
+ data.tar.gz: 15ffffa097e04d769baafcdef433516ff1ee6da3e958e048b0b8594299e711a0
5
5
  SHA512:
6
- metadata.gz: 685d355b9c779498d5759b5abdedad44351b50e277151fbef97986c176ad6343098b472c5705ce28d93a5f149f8cb5b1e4ade86c527f89fd8d66e5292542fdb9
7
- data.tar.gz: 77ba825f6b8dff5bc65442547ab546ead001101d22add1d5b33d34ae686a31dd981b351f2fd5f161b18bc2fad7fb3e60ee91c3bcc5db6bbe25982fdf86b81f69
6
+ metadata.gz: 8189d762e8015fe69d8a892df36a85a87f49fd3b13ca567e62f1a0f8f9cfebd96010156c1f26c6d6e21c3d540eaf6c3535a06c08a1f0c73afb2ab36d54426145
7
+ data.tar.gz: 0bc233125c84872680eb184293616b22afd3be29262d001ac0502c8b8afeab06c308f172535fb4dd82694e4c06b2c1497f0ebfcf4a05fbcefc8fc264b995aa01
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Release History: opentelemetry-logs-api
2
2
 
3
+ ### v0.6.0 / 2026-10-05
4
+
5
+ * BREAKING CHANGE: Move the global logger provider behind an opt-in require (#2415)
6
+ * ADDED: Move the global logger provider behind an opt-in require (#2415)
7
+
3
8
  ### v0.5.0 / 2026-09-15
4
9
 
5
10
  * BREAKING CHANGE: Align LoggerProvider#logger with the SDK signature (#2375)
data/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # opentelemetry-logs-api
2
+
3
+ The `opentelemetry-logs-api` gem is an alpha implementation of the [OpenTelemetry Logs API][logs-api] for Ruby applications. When opentelemetry-logs-api is installed, instrumentation can use OpenTelemetry API methods to emit log records.
4
+
5
+ ## What is OpenTelemetry?
6
+
7
+ [OpenTelemetry][opentelemetry-home] is an open source observability framework, providing a general-purpose API, SDK, and related tools required for the instrumentation of cloud-native software, frameworks, and libraries.
8
+
9
+ OpenTelemetry provides a single set of APIs, libraries, agents, and collector services to capture distributed traces, metrics, and logs from your application. You can analyze them using Prometheus, Jaeger, and other observability tools.
10
+
11
+ ## How does this gem fit in?
12
+
13
+ The `opentelemetry-logs-api` gem defines the core OpenTelemetry interfaces in the form of abstract classes and no-op implementations. That is, it defines interfaces and data types sufficient for instrumentation to code against to produce log records, but does not actually collect, process, or export the data.
14
+
15
+ To collect and export log records, _applications_ should also install a concrete implementation of the API, such as the `opentelemetry-logs-sdk` gem.
16
+
17
+ This code is still under development and is not a complete implementation of the Logs API. Until the code becomes stable, Logs API functionality will live outside the `opentelemetry-api` library.
18
+
19
+ ## How do I get started?
20
+
21
+ Install the gems using:
22
+
23
+ ```sh
24
+ gem install opentelemetry-sdk
25
+ gem install opentelemetry-logs-sdk
26
+ ```
27
+
28
+ Or, if you use [bundler][bundler-home], include `opentelemetry-sdk` and `opentelemetry-logs-sdk` in your `Gemfile`. The SDK depends on `opentelemetry-logs-api`.
29
+
30
+ Requiring `opentelemetry-logs-sdk` defines the global `OpenTelemetry.logger_provider` accessor. Requiring `opentelemetry-logs-api` on its own does not. See [Upgrading to 0.6.0](#upgrading-to-060).
31
+
32
+ ```ruby
33
+ require 'opentelemetry/sdk'
34
+ require 'opentelemetry-logs-sdk'
35
+
36
+ OpenTelemetry::SDK.configure
37
+
38
+ # Obtain a logger from the global logger provider.
39
+ logger = OpenTelemetry.logger_provider.logger(name: 'my_app', version: '1.0')
40
+
41
+ # Emit a log record.
42
+ logger.on_emit(severity_text: 'INFO', body: 'Hello, world!')
43
+ ```
44
+
45
+ For additional examples, see the [examples on github][examples-github].
46
+
47
+ ## Upgrading to 0.6.0
48
+
49
+ The Logs API is experimental. To keep it off the public `OpenTelemetry` module until it stabilizes, `opentelemetry-logs-api` 0.6.0 no longer defines `OpenTelemetry.logger_provider` or `OpenTelemetry.logger_provider=`. `opentelemetry-logs-sdk` 0.8.0 and later define both when required.
50
+
51
+ - **Applications using `opentelemetry-logs-sdk`:** Upgrade the SDK to 0.8.0 or later. No code changes are needed.
52
+ - **Code that requires only `opentelemetry-logs-api`:** Calling `OpenTelemetry.logger_provider` raises `NoMethodError`. Require `opentelemetry-logs-sdk`, or `opentelemetry/logs/global` to define the accessors without the SDK.
53
+ - **Applications on `opentelemetry-logs-sdk` 0.7.0 or earlier:** These versions allow `opentelemetry-logs-api` 0.6.0, so bundler can pair them. A compatibility shim in the API keeps them working and logs this warning:
54
+
55
+ ```text
56
+ opentelemetry-logs-sdk 0.7.0 and earlier register the global logger provider through a compatibility shim in opentelemetry-logs-api. Upgrade to opentelemetry-logs-sdk 0.8.0 or later.
57
+ ```
58
+
59
+ The shim will be removed in a future release ([#2414][2414]). Upgrade the SDK to clear the warning.
60
+
61
+ ## How can I get involved?
62
+
63
+ The `opentelemetry-logs-api` gem source is [on github][repo-github], along with related gems including `opentelemetry-logs-sdk`.
64
+
65
+ The OpenTelemetry Ruby gems are maintained by the OpenTelemetry-Ruby special interest group (SIG). You can get involved by joining us in [GitHub Discussions][discussions-url] or attending our weekly meeting. See the [meeting calendar][community-meetings] for dates and times. For more information on this and other language SIGs, see the OpenTelemetry [community page][ruby-sig].
66
+
67
+ ## License
68
+
69
+ The `opentelemetry-logs-api` gem is distributed under the Apache 2.0 license. See [LICENSE][license-github] for more information.
70
+
71
+ [logs-api]: https://opentelemetry.io/docs/specs/otel/logs/api/
72
+ [opentelemetry-home]: https://opentelemetry.io
73
+ [bundler-home]: https://bundler.io
74
+ [repo-github]: https://github.com/open-telemetry/opentelemetry-ruby
75
+ [license-github]: https://github.com/open-telemetry/opentelemetry-ruby/blob/main/LICENSE
76
+ [examples-github]: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/examples/logs_sdk
77
+ [ruby-sig]: https://github.com/open-telemetry/community#ruby-sig
78
+ [community-meetings]: https://github.com/open-telemetry/community#community-meetings
79
+ [discussions-url]: https://github.com/open-telemetry/opentelemetry-ruby/discussions
80
+ [2414]: https://github.com/open-telemetry/opentelemetry-ruby/issues/2414
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright The OpenTelemetry Authors
4
+ #
5
+ # SPDX-License-Identifier: Apache-2.0
6
+
7
+ module OpenTelemetry
8
+ # @api private
9
+ module Internal
10
+ @logger_provider = ProxyLoggerProvider.new
11
+ @logger_provider_mutex = Mutex.new
12
+
13
+ class << self
14
+ # Registers the process-wide logger provider that instrumentation reads
15
+ # from. The public +OpenTelemetry.logger_provider+ accessor, defined in
16
+ # +opentelemetry/logs/global+, delegates here.
17
+ #
18
+ # @param [LoggerProvider] provider A logger provider to register as the
19
+ # global instance.
20
+ def logger_provider=(provider)
21
+ @logger_provider_mutex.synchronize do
22
+ if @logger_provider.instance_of?(ProxyLoggerProvider)
23
+ OpenTelemetry.logger.debug("Upgrading default proxy logger provider to #{provider.class}")
24
+ @logger_provider.delegate = provider
25
+ end
26
+ @logger_provider = provider
27
+ end
28
+ end
29
+
30
+ # @return [Object, Logs::LoggerProvider] registered logger provider or a
31
+ # default no-op implementation of the logger provider.
32
+ def logger_provider
33
+ @logger_provider_mutex.synchronize { @logger_provider }
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright The OpenTelemetry Authors
4
+ #
5
+ # SPDX-License-Identifier: Apache-2.0
6
+
7
+ require 'opentelemetry-logs-api'
8
+
9
+ # Defines the top-level accessors for the global logger provider. The Logs
10
+ # API is unstable, so requiring +opentelemetry-logs-api+ does not define
11
+ # these. Requiring +opentelemetry-logs-sdk+ does.
12
+ #
13
+ # These are delegators. The provider itself lives in
14
+ # {OpenTelemetry::Internal}, so this file can be required at any point,
15
+ # before or after the SDK is configured.
16
+ module OpenTelemetry
17
+ # Register the global logger provider.
18
+ #
19
+ # @param [LoggerProvider] provider A logger provider to register as the
20
+ # global instance.
21
+ def logger_provider=(provider)
22
+ Internal.logger_provider = provider
23
+ end
24
+
25
+ # @return [Object, Logs::LoggerProvider] registered logger provider or a
26
+ # default no-op implementation of the logger provider.
27
+ def logger_provider
28
+ Internal.logger_provider
29
+ end
30
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright The OpenTelemetry Authors
4
+ #
5
+ # SPDX-License-Identifier: Apache-2.0
6
+
7
+ # Installs the top-level logger provider accessors on behalf of logs SDKs
8
+ # released before those accessors moved out of this gem. Those versions assign
9
+ # and read +OpenTelemetry.logger_provider+ while configuring, and have no way
10
+ # to require +opentelemetry/logs/global+ themselves.
11
+ #
12
+ # Such an SDK is always loaded by the time it reaches for the accessor, so the
13
+ # check cannot happen at require time. It happens on the miss instead.
14
+ #
15
+ # Removal is tracked in #2414.
16
+ module OpenTelemetry
17
+ module Logs
18
+ # Detects a logs SDK that predates {OpenTelemetry::Logs::Global} and
19
+ # installs the accessors it expects. With no SDK loaded, +super+ raises
20
+ # NoMethodError, which is what a caller holding only the API is meant to
21
+ # get.
22
+ #
23
+ # @api private
24
+ module LegacyGlobalCompat
25
+ ACCESSORS = %i[logger_provider logger_provider=].freeze
26
+
27
+ WARNING = 'opentelemetry-logs-sdk 0.7.0 and earlier register the global logger ' \
28
+ 'provider through a compatibility shim in opentelemetry-logs-api. ' \
29
+ 'Upgrade to opentelemetry-logs-sdk 0.8.0 or later.'
30
+
31
+ # Keyed on LoggerProvider rather than the SDK's Logs namespace, which
32
+ # another gem could plausibly define without the SDK being present.
33
+ def self.handles?(name)
34
+ ACCESSORS.include?(name) && defined?(OpenTelemetry::SDK::Logs::LoggerProvider)
35
+ end
36
+
37
+ private
38
+
39
+ def method_missing(name, *, &)
40
+ return super unless LegacyGlobalCompat.handles?(name)
41
+
42
+ require 'opentelemetry/logs/global'
43
+ return super unless singleton_class.method_defined?(name)
44
+
45
+ OpenTelemetry.logger.warn(WARNING)
46
+ public_send(name, *, &)
47
+ end
48
+
49
+ def respond_to_missing?(name, include_private = false)
50
+ LegacyGlobalCompat.handles?(name) || super
51
+ end
52
+ end
53
+ end
54
+
55
+ singleton_class.prepend(Logs::LegacyGlobalCompat)
56
+ end
@@ -7,6 +7,6 @@
7
7
  module OpenTelemetry
8
8
  module Logs
9
9
  ## Current OpenTelemetry logs version
10
- VERSION = '0.5.0'
10
+ VERSION = '0.6.0'
11
11
  end
12
12
  end
@@ -9,33 +9,12 @@ require 'opentelemetry/logs'
9
9
  require 'opentelemetry/logs/version'
10
10
  require 'opentelemetry/internal/proxy_logger_provider'
11
11
  require 'opentelemetry/internal/proxy_logger'
12
+ require 'opentelemetry/internal/global_logger_provider'
13
+ require 'opentelemetry/logs/legacy_global_compat'
12
14
 
13
15
  # OpenTelemetry is an open source observability framework, providing a
14
16
  # general-purpose API, SDK, and related tools required for the instrumentation
15
17
  # of cloud-native software, frameworks, and libraries.
16
18
  #
17
- # The OpenTelemetry module in the Logs API gem provides global accessors
18
- # for logs-related objects.
19
- module OpenTelemetry
20
- @logger_provider = Internal::ProxyLoggerProvider.new
21
-
22
- # Register the global logger provider.
23
- #
24
- # @param [LoggerProvider] provider A logger provider to register as the
25
- # global instance.
26
- def logger_provider=(provider)
27
- @mutex.synchronize do
28
- if @logger_provider.instance_of? Internal::ProxyLoggerProvider
29
- logger.debug("Upgrading default proxy logger provider to #{provider.class}")
30
- @logger_provider.delegate = provider
31
- end
32
- @logger_provider = provider
33
- end
34
- end
35
-
36
- # @return [Object, Logs::LoggerProvider] registered logger provider or a
37
- # default no-op implementation of the logger provider.
38
- def logger_provider
39
- @mutex.synchronize { @logger_provider }
40
- end
41
- end
19
+ # Requiring this gem makes the Logs API available to instrumentation through
20
+ # {OpenTelemetry::Internal.logger_provider}.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-logs-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
@@ -32,10 +32,14 @@ files:
32
32
  - ".yardopts"
33
33
  - CHANGELOG.md
34
34
  - LICENSE
35
+ - README.md
35
36
  - lib/opentelemetry-logs-api.rb
37
+ - lib/opentelemetry/internal/global_logger_provider.rb
36
38
  - lib/opentelemetry/internal/proxy_logger.rb
37
39
  - lib/opentelemetry/internal/proxy_logger_provider.rb
38
40
  - lib/opentelemetry/logs.rb
41
+ - lib/opentelemetry/logs/global.rb
42
+ - lib/opentelemetry/logs/legacy_global_compat.rb
39
43
  - lib/opentelemetry/logs/log_record.rb
40
44
  - lib/opentelemetry/logs/logger.rb
41
45
  - lib/opentelemetry/logs/logger_provider.rb
@@ -45,10 +49,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
45
49
  licenses:
46
50
  - Apache-2.0
47
51
  metadata:
48
- changelog_uri: https://rubydoc.info/gems/opentelemetry-logs-api/0.5.0/file/CHANGELOG.md
49
- source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/opentelemetry-logs-api/v0.5.0/logs_api
52
+ changelog_uri: https://rubydoc.info/gems/opentelemetry-logs-api/0.6.0/file/CHANGELOG.md
53
+ source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/opentelemetry-logs-api/v0.6.0/logs_api
50
54
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
51
- documentation_uri: https://rubydoc.info/gems/opentelemetry-logs-api/0.5.0
55
+ documentation_uri: https://rubydoc.info/gems/opentelemetry-logs-api/0.6.0
52
56
  rdoc_options: []
53
57
  require_paths:
54
58
  - lib
@@ -63,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
67
  - !ruby/object:Gem::Version
64
68
  version: '0'
65
69
  requirements: []
66
- rubygems_version: 4.0.16
70
+ rubygems_version: 4.0.20
67
71
  specification_version: 4
68
72
  summary: Logs API implementation for OpenTelemetry
69
73
  test_files: []