-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathstd_log_basic.zig
More file actions
72 lines (55 loc) · 2.4 KB
/
std_log_basic.zig
File metadata and controls
72 lines (55 loc) · 2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
const std = @import("std");
const sdk = @import("opentelemetry-sdk");
// Override std.log to use OpenTelemetry bridge
pub const std_options: std.Options = .{
.logFn = sdk.logs.std_log_bridge.logFn,
};
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
std.debug.print("OpenTelemetry std.log Bridge - Basic Example\n", .{});
std.debug.print("=============================================\n\n", .{});
// Create a stdout exporter
const stdout_file = std.fs.File.stdout();
var stdout_exporter = sdk.logs.StdoutExporter.init(stdout_file.deprecatedWriter());
const exporter = stdout_exporter.asLogRecordExporter();
// Create a simple processor
var simple_processor = sdk.logs.SimpleLogRecordProcessor.init(allocator, exporter);
const processor = simple_processor.asLogRecordProcessor();
// Create a logger provider
var provider = try sdk.logs.LoggerProvider.init(allocator, null);
defer provider.deinit();
// Add the processor
try provider.addLogRecordProcessor(processor);
// Configure the std.log bridge
try sdk.logs.std_log_bridge.configure(.{
.provider = provider,
.also_log_to_stderr = false, // Only log to OpenTelemetry
.include_scope_attribute = true,
.include_source_location = true,
});
defer sdk.logs.std_log_bridge.shutdown();
std.debug.print("Using std.log (routed to OpenTelemetry)...\n\n", .{});
// Now use standard std.log functions - they'll go to OpenTelemetry!
std.log.info("Application started successfully", .{});
std.log.debug("Debug information: processing {d} items", .{42});
std.log.warn("Low memory warning: {d}% available", .{15});
// Simulate some application work
processRequest("user-123") catch |err| {
std.log.err("Failed to process request: {}", .{err});
};
std.debug.print("\n\nShutting down...\n", .{});
// Shutdown (flushes all pending logs)
try provider.shutdown();
std.debug.print("Done!\n", .{});
}
fn processRequest(user_id: []const u8) !void {
std.log.info("Processing request for user: {s}", .{user_id});
// Simulate some work
std.log.debug("Validating user credentials", .{});
std.log.debug("Loading user profile", .{});
// Simulate an error
std.log.err("Database connection timeout", .{});
return error.DatabaseTimeout;
}