Skip to content

Commit 864966c

Browse files
feat: Implement Logs Bridge API (#1509)
This provides an interface for: * LoggerProvider * Logger * LogRecord This API will be consumed by the forthcoming Logs SDK. Follows specification v 1.23.0.
1 parent e96deb7 commit 864966c

File tree

11 files changed

+152
-12
lines changed

11 files changed

+152
-12
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ jobs:
1717
gem:
1818
- opentelemetry-api
1919
- opentelemetry-common
20+
- opentelemetry-logs-api
2021
- opentelemetry-metrics-api
2122
- opentelemetry-registry
2223
- opentelemetry-sdk

logs_api/lib/opentelemetry-logs-api.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44
#
55
# SPDX-License-Identifier: Apache-2.0
66

7+
require 'opentelemetry'
78
require_relative 'opentelemetry/logs'
89
require_relative 'opentelemetry/logs/version'

logs_api/lib/opentelemetry/logs.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,18 @@
44
#
55
# SPDX-License-Identifier: Apache-2.0
66

7-
require 'opentelemetry'
7+
require_relative 'logs/log_record'
8+
require_relative 'logs/logger'
9+
require_relative 'logs/logger_provider'
810

911
module OpenTelemetry
10-
# OpenTelemetry Logs API
12+
# The Logs API records a timestamped record with metadata.
13+
# In OpenTelemetry, any data that is not part of a distributed trace or a
14+
# metric is a log. For example, events are a specific type of log.
15+
#
16+
# This API is provided for logging library authors to build log
17+
# appenders/bridges. It should NOT be used directly by application
18+
# developers.
1119
module Logs
1220
end
1321
end
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# frozen_string_literal: true
2+
3+
# Copyright The OpenTelemetry Authors
4+
#
5+
# SPDX-License-Identifier: Apache-2.0
6+
7+
module OpenTelemetry
8+
module Logs
9+
# No-op implementation of an emitted log and its associated attributes.
10+
class LogRecord; end
11+
end
12+
end
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# frozen_string_literal: true
2+
3+
# Copyright The OpenTelemetry Authors
4+
#
5+
# SPDX-License-Identifier: Apache-2.0
6+
7+
module OpenTelemetry
8+
module Logs
9+
# No-op implementation of logger.
10+
class Logger
11+
# rubocop:disable Style/EmptyMethod
12+
13+
# Emit a {LogRecord} to the processing pipeline.
14+
#
15+
# @param timestamp [optional Float, Time] Time in nanoseconds since Unix
16+
# epoch when the event occurred measured by the origin clock, i.e. the
17+
# time at the source.
18+
# @param observed_timestamp [optional Float, Time] Time in nanoseconds
19+
# since Unix epoch when the event was observed by the collection system.
20+
# Intended default: Process.clock_gettime(Process::CLOCK_REALTIME)
21+
# @param context [optional Context] The Context to associate with the
22+
# LogRecord. Intended default: OpenTelemetry::Context.current
23+
# @param severity_number [optional Integer] Numerical value of the
24+
# severity. Smaller numerical values correspond to less severe events
25+
# (such as debug events), larger numerical values correspond to more
26+
# severe events (such as errors and critical events).
27+
# @param severity_text [optional String] Original string representation of
28+
# the severity as it is known at the source. Also known as log level.
29+
# @param body [optional String, Numeric, Boolean, Array<String, Numeric,
30+
# Boolean>, Hash{String => String, Numeric, Boolean, Array<String,
31+
# Numeric, Boolean>}] A value containing the body of the log record.
32+
# @param attributes [optional Hash{String => String, Numeric, Boolean,
33+
# Array<String, Numeric, Boolean>}] Additional information about the
34+
# event.
35+
#
36+
# @api public
37+
def emit(
38+
timestamp: nil,
39+
observed_timestamp: nil,
40+
context: nil,
41+
severity_number: nil,
42+
severity_text: nil,
43+
body: nil,
44+
attributes: nil
45+
)
46+
end
47+
# rubocop:enable Style/EmptyMethod
48+
end
49+
end
50+
end
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# frozen_string_literal: true
2+
3+
# Copyright The OpenTelemetry Authors
4+
#
5+
# SPDX-License-Identifier: Apache-2.0
6+
7+
module OpenTelemetry
8+
module Logs
9+
# No-op implementation of a logger provider.
10+
class LoggerProvider
11+
NOOP_LOGGER = OpenTelemetry::Logs::Logger.new
12+
private_constant :NOOP_LOGGER
13+
14+
# Returns an {OpenTelemetry::Logs::Logger} instance.
15+
#
16+
# @param [optional String] name Instrumentation package name
17+
# @param [optional String] version Instrumentation package version
18+
#
19+
# @return [OpenTelemetry::Logs::Logger]
20+
def logger(name = nil, version = nil)
21+
@logger ||= NOOP_LOGGER
22+
end
23+
end
24+
end
25+
end

logs_api/opentelemetry-logs-api.gemspec

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ Gem::Specification.new do |spec|
2727
spec.add_dependency 'opentelemetry-api', '~> 1.0'
2828

2929
spec.add_development_dependency 'bundler', '>= 1.17'
30-
spec.add_development_dependency 'minitest', '~> 5.0'
30+
spec.add_development_dependency 'minitest', '~> 5.19'
3131
spec.add_development_dependency 'rake', '~> 12.0'
32-
spec.add_development_dependency 'rubocop', '~> 1.3'
33-
spec.add_development_dependency 'simplecov', '~> 0.17'
32+
spec.add_development_dependency 'rubocop', '~> 1.55'
33+
spec.add_development_dependency 'simplecov', '~> 0.22'
3434
spec.add_development_dependency 'yard', '~> 0.9'
35-
spec.add_development_dependency 'yard-doctest', '~> 0.1.6'
35+
spec.add_development_dependency 'yard-doctest', '~> 0.1'
3636

3737
if spec.respond_to?(:metadata)
3838
spec.metadata['changelog_uri'] = "https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-logs-api/v#{OpenTelemetry::Logs::VERSION}/file.CHANGELOG.html"

logs_api/test/.rubocop.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
inherit_from: ../.rubocop.yml
2+
3+
Metrics/BlockLength:
4+
Enabled: false
5+
Metrics/LineLength:
6+
Enabled: false
7+
Metrics/AbcSize:
8+
Enabled: false
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# frozen_string_literal: true
2+
3+
# Copyright The OpenTelemetry Authors
4+
#
5+
# SPDX-License-Identifier: Apache-2.0
6+
7+
require 'test_helper'
8+
9+
describe OpenTelemetry::Logs::LoggerProvider do
10+
let(:logger_provider) { OpenTelemetry::Logs::LoggerProvider.new }
11+
let(:args) { { name: 'component', version: '1.0' } }
12+
let(:args2) { { name: 'component2', version: '1.0' } }
13+
14+
describe '#logger' do
15+
it 'returns the same no-op logger' do
16+
assert_same(
17+
logger_provider.logger(**args),
18+
logger_provider.logger(**args2)
19+
)
20+
end
21+
end
22+
end
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# frozen_string_literal: true
2+
3+
# Copyright The OpenTelemetry Authors
4+
#
5+
# SPDX-License-Identifier: Apache-2.0
6+
7+
require 'test_helper'
8+
9+
describe OpenTelemetry::Logs::Logger do
10+
let(:logger) { OpenTelemetry::Logs::Logger.new }
11+
12+
describe '#emit' do
13+
it 'returns nil, as it is a no-op method' do
14+
assert_nil(logger.emit)
15+
end
16+
end
17+
end

0 commit comments

Comments
 (0)