Add plain text and coloured logging to the Client
Logs websocket events (connect, message, error and close events)
This commit is contained in:
66
adr/0004-default-logging-activation.md
Normal file
66
adr/0004-default-logging-activation.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# 3. Default Logging Activation
|
||||
|
||||
Date: 2024-03-19
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
Logging provides visibility into the gem's behavior and helps to diagnose issues. The decision centered on whether
|
||||
to enable logging by default or require manual activation.
|
||||
|
||||
### Option 1: On-demand Logging
|
||||
|
||||
```ruby
|
||||
client = Nostr::Client.new
|
||||
logger = Nostr::ClientLogger.new
|
||||
logger.attach_to(client)
|
||||
```
|
||||
|
||||
#### Advantages:
|
||||
|
||||
- Offers users flexibility and control over logging.
|
||||
- Conserves resources by logging only when needed.
|
||||
|
||||
#### Disadvantages:
|
||||
|
||||
- Potential to miss critical logs if not enabled.
|
||||
- Requires users to read and understand documentation to enable logging.
|
||||
- Requires users to manually activate and configure logging.
|
||||
|
||||
### Option 2: Automatic Logging
|
||||
|
||||
```ruby
|
||||
class Client
|
||||
def initialize(logger: ClientLogger.new)
|
||||
@logger = logger
|
||||
logger&.attach_to(self)
|
||||
end
|
||||
end
|
||||
|
||||
client = Nostr::Client.new
|
||||
```
|
||||
|
||||
#### Advantages:
|
||||
|
||||
- Ensures comprehensive logging without user intervention.
|
||||
- Simplifies debugging and monitoring.
|
||||
- Balances logging detail with performance impact.
|
||||
|
||||
#### Disadvantages:
|
||||
|
||||
- Needs additional steps to disable logging.
|
||||
|
||||
## Decision
|
||||
|
||||
Logging will be enabled by default. Users can disable logging by passing a `nil` logger to the client:
|
||||
|
||||
```ruby
|
||||
client = Nostr::Client.new(logger: nil)
|
||||
```
|
||||
|
||||
## Consequences
|
||||
|
||||
Enabling logging by default favors ease of use and simplifies the developer's experience.
|
||||
Reference in New Issue
Block a user