Adds docs/configuration.md detailing the YAML config structure, environment variable overrides, and logging features.
2.2 KiB
Configuration and Logging
This application uses a flexible configuration system that supports YAML files and environment variable overrides. It also features a structured logging setup.
Configuration
The configuration is loaded from a YAML file. By default, the application looks for config/config.yaml. You can specify a different configuration file using the -config CLI flag.
./app -config /path/to/my-config.yaml
Configuration Structure
The configuration file supports the following structure:
# Logging configuration
logging:
# Log Level: debug, info, warn, error
level: "info"
# Server configuration
server:
host: "localhost"
port: 8080
Environment Variables
All configuration values can be overridden using environment variables. The application uses the APP_ prefix for all environment variables. The variable name is constructed by capitalizing the path to the configuration value and replacing dots/nesting with underscores.
| YAML Path | Environment Variable | Description |
|---|---|---|
logging.level |
APP_LOGGING_LEVEL |
Sets the logging level (debug, info, warn, error) |
server.host |
APP_SERVER_HOST |
Sets the server host address |
server.port |
APP_SERVER_PORT |
Sets the server listening port |
Example:
To start the application with debug logging and listening on port 9090:
APP_LOGGING_LEVEL=debug APP_SERVER_PORT=9090 ./app
Logging
The application uses structured logging (JSON format) via the standard library's log/slog package.
Log Levels
The supported log levels are:
debug: Detailed information for debugging purposes.info: General operational events (startup, shutdown, etc.).warn: Non-critical errors or potential issues.error: Critical errors that require attention.
The log level is configured via the logging.level setting in the configuration file or the APP_LOGGING_LEVEL environment variable.
Log Output
Logs are output to stdout in JSON format to facilitate parsing by log management systems.
Example Log Entry:
{"time":"2023-10-27T10:00:00.123Z","level":"INFO","msg":"Starting application..."}