Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
6 changes: 3 additions & 3 deletions examples/logs-basic/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ publish = false
opentelemetry = { path = "../../opentelemetry", features = ["logs"] }
opentelemetry_sdk = { path = "../../opentelemetry-sdk", features = ["logs"] }
opentelemetry-stdout = { path = "../../opentelemetry-stdout", features = ["logs"]}
opentelemetry-appender-log = { path = "../../opentelemetry-appender-log", default-features = false}
opentelemetry-appender-tracing = { path = "../../opentelemetry-appender-tracing", default-features = false}
opentelemetry-semantic-conventions = { path = "../../opentelemetry-semantic-conventions" }
log = { workspace = true }
serde_json = { workspace = true }
tracing = { workspace = true, features = ["std"]}
tracing-subscriber = { workspace = true, features = ["registry", "std"] }
8 changes: 4 additions & 4 deletions examples/logs-basic/README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# OpenTelemetry Log Appender for log - Example
# OpenTelemetry Log Appender for tracing - Example

This example shows how to use the opentelemetry-appender-log crate, which is a
This example shows how to use the opentelemetry-appender-tracing crate, which is a
[logging
appender](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/glossary.md#log-appender--bridge)
that bridges logs from the [log crate](https://docs.rs/log/latest/log/) to
that bridges logs from the [tracing crate](https://tracing.rs/tracing/#events) to
OpenTelemetry. The example setups a LoggerProvider with stdout exporter, so logs
are emitted to stdout.

## Usage

Run the following, and Logs emitted using [log](https://docs.rs/log/latest/log/)
Run the following, and Logs emitted using [tracing](https://docs.rs/tracing/latest/tracing/)
will be written out to stdout.

```shell
Expand Down
27 changes: 11 additions & 16 deletions examples/logs-basic/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,27 +1,22 @@
use log::{error, Level};
use opentelemetry::KeyValue;
use opentelemetry_appender_log::OpenTelemetryLogBridge;
use opentelemetry_appender_tracing::layer;
use opentelemetry_sdk::logs::LoggerProvider;
use opentelemetry_sdk::Resource;
use opentelemetry_semantic_conventions::resource::SERVICE_NAME;
use tracing::error;
use tracing_subscriber::prelude::*;

fn main() {
// Setup LoggerProvider with a stdout exporter
let exporter = opentelemetry_stdout::LogExporter::default();
let logger_provider = LoggerProvider::builder()
.with_resource(Resource::new([KeyValue::new(
SERVICE_NAME,
"logs-basic-example",
let provider: LoggerProvider = LoggerProvider::builder()
.with_resource(Resource::new(vec![KeyValue::new(
"service.name",
"log-appender-tracing-example",
)]))
.with_simple_exporter(exporter)
.build();
let layer = layer::OpenTelemetryTracingBridge::new(&provider);
tracing_subscriber::registry().with(layer).init();

// Setup Log Appender for the log crate.
let otel_log_appender = OpenTelemetryLogBridge::new(&logger_provider);
log::set_boxed_logger(Box::new(otel_log_appender)).unwrap();
log::set_max_level(Level::Error.to_level_filter());

// Emit logs using macros from the log crate.
// These logs gets piped through OpenTelemetry bridge and gets exported to stdout.
error!(target: "my-target", "hello from {}. My price is {}", "apple", 2.99);
error!(name: "my-event-name", target: "my-system", event_id = 20, user_name = "otel", user_email = "[email protected]", message = "This is an example message");
let _ = provider.shutdown();
}
Loading