-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
101 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,86 @@ | ||
// Copyright The OpenTelemetry Authors | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
// Package log provides the OpenTelemetry Bridge API. | ||
// | ||
// TODO: comment. | ||
/* | ||
Package log defines the OpenTelemetry Bridge API. | ||
Application code should not call this API directly. | ||
The API is supposed to be used by a log bridge implementation, | ||
which is an adapter between an existing logging library and the OpenTelemetry. | ||
Existing logging libraries generally provide a much richer set of features | ||
than what is defined in OpenTelemetry. | ||
It is not a goal of OpenTelemetry to ship a feature-rich logging library. | ||
# Bridge Implementations | ||
The bridge implementation should allow passing | ||
the [context.Context] containing the trace context from the caller | ||
to [Logger]'s Emit method. | ||
The log bridges can use [sync.Pool] | ||
for reducing the number of allocations when mapping attributes. | ||
# API Implementations | ||
This package does not conform to the standard Go versioning policy, all of its | ||
interfaces may have methods added to them without a package major version bump. | ||
This non-standard API evolution could surprise an uninformed implementation | ||
author. They could unknowingly build their implementation in a way that would | ||
result in a runtime panic for their users that update to the new API. | ||
The API is designed to help inform an instrumentation author about this | ||
non-standard API evolution. It requires them to choose a default behavior for | ||
unimplemented interface methods. There are three behavior choices they can | ||
make: | ||
- Compilation failure | ||
- Panic | ||
- Default to another implementation | ||
All interfaces in this API embed a corresponding interface from | ||
[go.opentelemetry.io/otel/log/embedded]. If an author wants the default | ||
behavior of their implementations to be a compilation failure, signaling to | ||
their users they need to update to the latest version of that implementation, | ||
they need to embed the corresponding interface from | ||
[go.opentelemetry.io/otel/log/embedded] in their implementation. For | ||
example, | ||
import "go.opentelemetry.io/otel/log/embedded" | ||
type LoggerProvider struct { | ||
embedded.LoggerProvider | ||
// ... | ||
} | ||
If an author wants the default behavior of their implementations to a panic, | ||
they need to embed the API interface directly. | ||
import "go.opentelemetry.io/otel/log" | ||
type LoggerProvider struct { | ||
log.LoggerProvider | ||
// ... | ||
} | ||
This is not a recommended behavior as it could lead to publishing packages that | ||
contain runtime panics when users update other package that use newer versions | ||
of [go.opentelemetry.io/otel/log]. | ||
Finally, an author can embed another implementation in theirs. The embedded | ||
implementation will be used for methods not defined by the author. For example, | ||
an author who wants to default to silently dropping the call can use | ||
[go.opentelemetry.io/otel/log/noop]: | ||
import "go.opentelemetry.io/otel/log/noop" | ||
type LoggerProvider struct { | ||
noop.LoggerProvider | ||
// ... | ||
} | ||
It is strongly recommended that authors only embed | ||
[go.opentelemetry.io/otel/log/noop] if they choose this default behavior. | ||
That implementation is the only one OpenTelemetry authors can guarantee will | ||
fully implement all the API interfaces when a user updates their API. | ||
*/ | ||
package log // import "go.opentelemetry.io/otel/log" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters