@@ -74,24 +74,69 @@ The library includes comprehensive telemetry support for monitoring Caddy operat
7474- ** File operations** : ` [:caddy, :file, :read] ` , ` [:caddy, :file, :write] `
7575- ** Validation** : ` [:caddy, :validation, :success] ` , ` [:caddy, :validation, :error] `
7676- ** Adaptation** : ` [:caddy, :adapt, :success] ` , ` [:caddy, :adapt, :error] `
77+ - ** Logging operations** : ` [:caddy, :log, :debug] ` , ` [:caddy, :log, :info] ` , ` [:caddy, :log, :warning] ` , ` [:caddy, :log, :error] `
78+ - ** Log buffer/store** : ` [:caddy, :log, :received] ` , ` [:caddy, :log, :buffered] ` , ` [:caddy, :log, :buffer_flush] ` , ` [:caddy, :log, :stored] ` , ` [:caddy, :log, :retrieved] `
79+
80+ ### Logging with Telemetry
81+
82+ All logging operations emit telemetry events. By default, a handler automatically forwards log events to Elixir's Logger:
83+
84+ ``` elixir
85+ # Use telemetry-based logging (instead of Logger directly)
86+ Caddy .Telemetry .log_debug (" Server starting" , module: MyApp )
87+ Caddy .Telemetry .log_info (" Configuration loaded" , config_id: 123 )
88+ Caddy .Telemetry .log_warning (" Deprecation warning" , function: " old_api" )
89+ Caddy .Telemetry .log_error (" Failed to connect" , reason: :timeout )
90+ ```
91+
92+ Configure logging behavior:
93+
94+ ``` elixir
95+ config :caddy ,
96+ attach_default_handler: true , # Auto-forward logs to Logger (default: true)
97+ log_level: :info # Minimum level to log (default: :debug)
98+ ```
99+
100+ ### Custom Telemetry Handlers
101+
102+ Attach custom handlers to process log events:
103+
104+ ``` elixir
105+ # Send errors to external monitoring service
106+ :telemetry .attach (" error_reporter" , [:caddy , :log , :error ],
107+ fn _event , _measurements , metadata, _config ->
108+ MyApp .ErrorReporter .report (metadata.message, metadata)
109+ end , %{})
110+
111+ # Monitor log buffer performance
112+ :telemetry .attach (" buffer_monitor" , [:caddy , :log , :buffered ],
113+ fn _event , measurements, _metadata , _config ->
114+ MyApp .Metrics .track_buffer_size (measurements.buffer_size)
115+ end , %{})
116+ ```
77117
78118### Usage Example
79119
80120``` elixir
81121# Attach telemetry handler
82122:telemetry .attach_many (" caddy_handler" , [
83123 [:caddy , :config , :set ],
84- [:caddy , :server , :start ]
124+ [:caddy , :server , :start ],
125+ [:caddy , :log , :error ]
85126], fn event_name, measurements, metadata, _config ->
86127 IO .inspect ({event_name, measurements, metadata})
87128end , %{})
88129
89- # Start telemetry poller
130+ # Start telemetry poller for system metrics
90131Caddy .Telemetry .start_poller (30_000 )
91132```
92133
93134### Available Functions
94135
136+ - ` Caddy.Telemetry.log_debug/2 ` - Emit debug log event
137+ - ` Caddy.Telemetry.log_info/2 ` - Emit info log event
138+ - ` Caddy.Telemetry.log_warning/2 ` - Emit warning log event
139+ - ` Caddy.Telemetry.log_error/2 ` - Emit error log event
95140- ` Caddy.Telemetry.emit_config_change/3 ` - Configuration change events
96141- ` Caddy.Telemetry.emit_server_event/3 ` - Server lifecycle events
97142- ` Caddy.Telemetry.emit_api_event/3 ` - API operation events
0 commit comments