Skip to content

Commit dc64ce0

Browse files
committed
docs: update documentation for telemetry logging features
- Added comprehensive logging telemetry section to README - Documented new log event types and handlers - Added usage examples for custom telemetry handlers - Updated CLAUDE.md with logging telemetry information - Included configuration options for default handler All documentation now reflects the telemetry-based logging system.
1 parent 3fc272d commit dc64ce0

File tree

2 files changed

+67
-2
lines changed

2 files changed

+67
-2
lines changed

CLAUDE.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,5 +157,25 @@ The library emits telemetry events for monitoring:
157157
- File operations: `[:caddy, :file, :read]`, `[:caddy, :file, :write]`
158158
- Validation: `[:caddy, :validation, :success]`, `[:caddy, :validation, :error]`
159159
- Adaptation: `[:caddy, :adapt, :success]`, `[:caddy, :adapt, :error]`
160+
- Logging operations: `[:caddy, :log, :debug]`, `[:caddy, :log, :info]`, `[:caddy, :log, :warning]`, `[:caddy, :log, :error]`
161+
- Log buffer/store: `[:caddy, :log, :received]`, `[:caddy, :log, :buffered]`, `[:caddy, :log, :buffer_flush]`, `[:caddy, :log, :stored]`, `[:caddy, :log, :retrieved]`
162+
163+
### Telemetry-Based Logging
164+
165+
All logging throughout the codebase uses telemetry events instead of direct Logger calls:
166+
167+
```elixir
168+
# Application code uses telemetry for logging
169+
Caddy.Telemetry.log_debug("Server starting", module: __MODULE__)
170+
Caddy.Telemetry.log_info("Configuration loaded", config_id: 123)
171+
Caddy.Telemetry.log_warning("Deprecation notice", function: "old_api")
172+
Caddy.Telemetry.log_error("Operation failed", reason: :timeout)
173+
```
174+
175+
A default handler (`Caddy.Logger.Handler`) automatically forwards log events to Elixir's Logger. This can be disabled:
176+
177+
```elixir
178+
config :caddy, attach_default_handler: false
179+
```
160180

161181
Use `Caddy.Telemetry.list_events/0` to see all available events.

README.md

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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})
87128
end, %{})
88129

89-
# Start telemetry poller
130+
# Start telemetry poller for system metrics
90131
Caddy.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

Comments
 (0)