Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
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
51 changes: 48 additions & 3 deletions content/en/docs/languages/cpp/instrumentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -233,9 +233,54 @@ p->AddView(std::move(observable_instrument_selector), std::move(observable_meter

## Logs

The documentation for the logs API & SDK is missing, you can help make it
available by
[editing this page](https://github.com/open-telemetry/opentelemetry.io/edit/main/content/en/docs/languages/cpp/instrumentation.md).
### Initialize exporter and processor

Initialize an exporter and processor. In this case, you initialize an OStream
Exporter that prints log records to stdout by default. The processor is
responsible for conversion of LogRecords to exportable representation before
they reach the exporter.

```cpp
auto exporter = std::unique_ptr<opentelemetry::sdk::logs::LogRecordExporter>(
Comment thread
vitorvasc marked this conversation as resolved.
Outdated
new opentelemetry::exporters::logs::OStreamLogRecordExporter());
auto processor = std::unique_ptr<opentelemetry::sdk::logs::LogRecordProcessor>(
new opentelemetry::sdk::logs::SimpleLogRecordExportProcessor(
std::move(exporter)));
```

### Register a logger provider

Create a `LoggerProvider` and register it as the global provider. Use it to
obtain `Logger` objects. Loggers can be named to identify the emitting
components.

```cpp
auto provider = std::shared_ptr<opentelemetry::logs::LoggerProvider>(
Comment thread
vitorvasc marked this conversation as resolved.
Outdated
new opentelemetry::sdk::logs::LoggerProvider(std::move(processor)));
opentelemetry::logs::Provider::SetLoggerProvider(provider);
auto logger = provider->GetLogger(name, "1.0.0");
```

### Emit a log record

Use the acquired logger to emit structured log records. Optionally, enrich the
log records with trace context by passing the trace ID, span ID, and flags, or
Comment thread
vitorvasc marked this conversation as resolved.
Outdated
other attributes explicitly. The supported severity values include: `kTrace`,
`kDebug`, `kInfo`, `kWarn`, `kError`, `kFatal`.

```cpp
logger->Info("Handling request");
auto span = get_tracer()->StartSpan("HandleRequest");
auto ctx = span->GetContext();
// enrich log with the trace context
logger->Info("Request failed", ctx.trace_id(), ctx.span_id(), ctx.trace_flags());
```

### Further reading

Comment thread
vitorvasc marked this conversation as resolved.
- [Logs API](https://opentelemetry.io/docs/specs/otel/logs/api/)
- [Logs SDK](https://opentelemetry.io/docs/specs/otel/logs/sdk/)
- [Sample Logs Example](https://github.com/open-telemetry/opentelemetry-cpp/tree/main/examples/logs_simple)
Comment thread
hxiao87 marked this conversation as resolved.
Outdated

## Next steps

Expand Down
12 changes: 12 additions & 0 deletions static/refcache.json
Original file line number Diff line number Diff line change
Expand Up @@ -10783,6 +10783,10 @@
"StatusCode": 206,
"LastSeen": "2026-03-25T09:53:21.88673217Z"
},
"https://github.com/open-telemetry/opentelemetry-cpp/tree/main/examples/logs_simple": {
"StatusCode": 206,
"LastSeen": "2026-04-20T17:06:33.412609523Z"
},
"https://github.com/open-telemetry/opentelemetry-cpp/tree/main/examples/metrics_simple": {
"StatusCode": 206,
"LastSeen": "2026-04-15T10:02:58.874605895Z"
Expand Down Expand Up @@ -19995,6 +19999,14 @@
"StatusCode": 200,
"LastSeen": "2026-03-17T09:54:46.661625915Z"
},
"https://opentelemetry.io/docs/specs/otel/logs/api/": {
"StatusCode": 206,
"LastSeen": "2026-04-22T00:26:10.396607883Z"
},
"https://opentelemetry.io/docs/specs/otel/logs/sdk/": {
"StatusCode": 206,
"LastSeen": "2026-04-22T00:26:13.174774163Z"
},
"https://opentelemetry.io/docs/specs/otlp/": {
"StatusCode": 206,
"LastSeen": "2026-03-26T17:19:30.535671199Z"
Expand Down
Loading