Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 45 additions & 7 deletions specification/logs/sdk.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,8 @@ accommodate common use cases:
* Select one or more loggers by name, with exact match or pattern matching.
* Disable one or more specific loggers.
* Disable all loggers, and selectively enable one or more specific loggers.
* Set the minimum severity levels for specific loggers or logger patterns.
* Enable trace-based filtering for specific loggers or logger patterns.

### Shutdown

Expand Down Expand Up @@ -192,24 +194,60 @@ It consists of the following parameters:
If a `Logger` is disabled, it MUST behave equivalently
to [No-op Logger](./noop.md#logger).

The value of `disabled` MUST be used to resolve whether a `Logger`
is [Enabled](./api.md#enabled). If `disabled` is `true`, `Enabled`
returns `false`. If `disabled` is `false`, `Enabled` returns `true`. It is not
necessary for implementations to ensure that changes to `disabled` are
immediately visible to callers of `Enabled`.
* `minimum_severity`: A [SeverityNumber](./data-model.md#field-severitynumber)
indicating the minimum severity level for log records to be processed.

If not explicitly set, the `minimum_severity` parameter SHOULD default to `0`.

If a log record's [SeverityNumber](./data-model.md#field-severitynumber) is
specified and less than the configured `minimum_severity`, the log record MUST
be dropped by the `Logger`. Log records with an unspecified severity are not
affected by this parameter.

* `trace_based`: A boolean indication of whether the logger should
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe a more explicit name? is trace_sample_based too mouthful? Not a strong feeling but trace_based may not be clear/obvious for new users.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there was some prior discussion around this name: #4290 (comment)

though certainly we can change it if others feel similarly

only process log records associated with sampled traces.

If not explicitly set, the `trace_based` parameter SHOULD default to `false`.

If `trace_based` is `true`, log records associated with unsampled traces MUST
be dropped by the `Logger`. Log records that aren't associated with a trace
context are not affected by this parameter.

It is not necessary for implementations to ensure that changes to any of these
parameters are immediately visible to callers of `Enabled`.

### Emit a LogRecord

Before processing a log record, the implementation MUST apply the filtering
rules defined by the [LoggerConfig](#loggerconfig) (in case `Enabled` was not
called prior to emitting the record):

1. **Minimum severity**: If the log record's
[SeverityNumber](./data-model.md#field-severitynumber) is specified
(i.e. not `0`) and is less than the configured `minimum_severity`, the log
record MUST be dropped.

2. **Trace-based**: If `trace_based` is `true`, and if the log record has a
[`SpanId`](./data-model.md#field-spanid) and the
[`TraceFlags`](./data-model.md#field-traceflags) SAMPLED flag is unset,
the log record MUST be dropped.

If [Observed Timestamp](./data-model.md#field-observedtimestamp) is unspecified,
the implementation SHOULD set it equal to the current time.

### Enabled

`Enabled` MUST return `false` when either:

- there are no registered [`LogRecordProcessors`](#logrecordprocessor),
- there are no registered [`LogRecordProcessors`](#logrecordprocessor).
- **Status**: [Development](../document-status.md) - `Logger` is disabled
([`LoggerConfig.disabled`](#loggerconfig) is `true`),
([`LoggerConfig.disabled`](#loggerconfig) is `true`).
- **Status**: [Development](../document-status.md) - the provided severity
(if specified) is less than the configured `minimum_severity` in the
[`LoggerConfig`](#loggerconfig).
- **Status**: [Development](../document-status.md) - `trace_based` is
`true` in the [`LoggerConfig`](#loggerconfig) and the current context is
associated with an unsampled trace.
- **Status**: [Development](../document-status.md) - all registered
`LogRecordProcessors` implement [`Enabled`](#enabled-1),
and a call to `Enabled` on each of them returns `false`.
Expand Down