open-telemetry / opentelemetry-specification

Specifications for OpenTelemetry
https://opentelemetry.io
Apache License 2.0
3.74k stars 888 forks source link

Add EventName parameter to Logger.Enabled #4220

Open pellared opened 1 month ago

pellared commented 1 month ago

There is a an open question whether EventName (or EventID) should be added as an optional parameter to Logger.Enabled.

Regd. EventName being used for EnabledCheck:

  1. It is very important (actually the EventId, the numerical, machine friendly version of EventName that is most important to do ultra fast checks!) for scenarios we are working on in OTel Rust, C++. I don't know if it is something every language/implementation cares about. Given spec does not prohibit an implementation from allowing more parameters, I am totally okay if spec does not mention it, as OTel C++/Rust can offer this as extras.
  2. From the Event Oteps, there were mention of scenarios where Loggers can filter based on EventName, route things to different places based on EventName etc. It'd be good to wait to see the progress on Events before we can really say if EventName is a important parameter for the Enabled check.

_Originally posted by @cijothomas in https://github.com/open-telemetry/opentelemetry-specification/pull/4203#discussion_r1768896732_

pellared commented 1 month ago

Notes from 2023-09-20 Events/Logs SIG meeting:

@lmolkova, pointed out that if we would like to filter by event name then we would need to store a map (set) of disabled (or enabled) event names which can be inefficient (memory overhead).

@MSNev, had a remark that it is better to filter out events by severity rather than by name.

@pellared, said that on top of that each Logger can have its own severity threshold so each instrumentation library can have a distinct severity level.

@cijothomas, agreed that probably it is indeed better to keep the parameters small and just accept context and severity.

I am planning to discuss it during the next Specification SIG meeting. If there will be no objections then I plan to close this issue. We can reopen it in future if needed.

pellared commented 1 month ago

Spec SIG meeting notes: The event name may be added before stabilizing the API.

pellared commented 1 month ago

I am against this proposal as I do not think that handling event.name for Enabled is more important than for other attributes. Passing all attributes "destroys" the idea of Enabled which is supposed to be used by the user to check whether it makes sense to build and emit a log records (performance tuning). The parameters accepted by Logger.Enabled should be "cheap" to construct.

The SDK's Enabled implementation would get the context, severity level, instrumentation scope that should be enough.

Side note: I think that instrumentation libraries emitting events could add a event.namespace instrumentation scope attribute instead of putting the namespace to each event.name value as a prefix. EDIT: I created https://github.com/open-telemetry/opentelemetry-specification/issues/4239

trask commented 1 month ago

I am against this proposal as I do not think that handling event.name for Enabled is more important than for other attributes.

I'm not sure I agree, but even if we decide we want event name, I think it would be fine (maybe even better?) to introduce a new method EventEnabled (possibly taking both event name and severity), which I think would remove Go's worry about introducing a new parameter to the Enabled method(?)

pellared commented 1 month ago

As for Go SIG we are not worried about adding a parameter in future. We decided to favor future-compatibilty instead of slightly better ergonomics.

I am not sure if this issue should be a blocker for stabilizing Logger.Enabled.

cijothomas commented 1 month ago

I am against this proposal as I do not think that handling event.name for Enabled is more important than for other attributes. Passing all attributes "destroys" the idea of Enabled which is supposed to be used by the user to check whether it makes sense to build and emit a log records (performance tuning). The parameters accepted by Logger.Enabled should be "cheap" to construct.

The SDK's Enabled implementation would get the context, severity level, instrumentation scope that should be enough.

Side note: I think that instrumentation libraries emitting events could add a event.namespace instrumentation scope attribute instead of putting the namespace to each event.name value as a prefix. EDIT: I created #4239

If "event.name" is an attribute, then I totally agree! (Which is why OTel .NET, C++, Rust all decided to put EventName as a top-level field in LogRecord, and not inside Attributes)

pellared commented 2 weeks ago

It is possible that it will be a parameter for a dedicated enabled method for events (and not for log records):