# Logging and debugging The `Nostr::Client` class provides built-in logging functionality to help you debug and monitor client interactions with relays. By default, the client uses the `ColorLogger`, which logs events in color. However, you can customize the logging behavior or disable it entirely. ## Disabling logging To instantiate a client without any logging, simply pass `logger: nil` when creating the client instance: ```ruby client = Nostr::Client.new(logger: nil) ``` This will disable all logging for the client. ## Formatting the logging The `Nostr::Client::Logger` class is the base class for logging functionality. It defines the following methods for logging different events: - `on_connect(relay)`: Logs when the client connects to a relay. - `on_message(message)`: Logs a message received from the relay. - `on_send(message)`: Logs a message sent to the relay. - `on_error(message)`: Logs an error message. - `on_close(code, reason)`: Logs when the connection with a relay is closed. You can create your own logger by subclassing `Nostr::Client::Logger` and overriding these methods to customize the logging format. The `Nostr::Client::ColorLogger` is a built-in logger that logs events in color. It uses ANSI escape codes to add color to the log output. Here's an example of how the ColorLogger formats the log messages: - Connection: `"\u001b[32m\u001b[1mConnected to the relay\u001b[22m #{relay.name} (#{relay.url})\u001b[0m"` - Message received: `"\u001b[32m\u001b[1mâ—„-\u001b[0m #{message}"` - Message sent: `"\u001b[32m\u001b[1m-â–º\u001b[0m #{message}"` - Error: `"\u001b[31m\u001b[1mError: \u001b[22m#{message}\u001b[0m"` - Connection closed: `"\u001b[31m\u001b[1mConnection closed: \u001b[22m#{reason} (##{code})\u001b[0m"` ## Plain text logging If you prefer plain text logging without colors, you can use the `Nostr::Client::PlainLogger`. This logger formats the log messages in a simple, readable format without any ANSI escape codes. To use the `PlainLogger`, pass it as the `logger` option when creating the client instance: ```ruby client = Nostr::Client.new(logger: Nostr::Client::PlainLogger.new) ``` The `PlainLogger` formats the log messages as follows: - Connection: `"Connected to the relay #{relay.name} (#{relay.url})"` - Message received: `"â—„- #{message}"` - Message sent: `"-â–º #{message}"` - Error: `"Error: #{message}"` - Connection closed: `"Connection closed: #{reason} (##{code})"` By using the appropriate logger or creating your own custom logger, you can effectively debug and monitor your Nostr client's interactions with relays.