Mercurial
diff seobeo/LOGGING.md @ 96:70401cf61e97
[Seobeo] Added logging.
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Fri, 02 Jan 2026 19:16:17 -0800 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/seobeo/LOGGING.md Fri Jan 02 19:16:17 2026 -0800 @@ -0,0 +1,157 @@ +# Seobeo Logging System + +## Overview + +All `printf` statements in the seobeo library have been replaced with `Seobeo_Log()` calls for consistent, level-based logging with optional debug mode. + +## Log Levels + +```c +typedef enum { + SEOBEO_INFO = 0, // General information (server start, mode, etc.) + SEOBEO_WARNING, // Warnings (SSL not compiled, etc.) + SEOBEO_ERROR, // Errors (allocation failures, connection errors, etc.) + SEOBEO_DEBUG, // Debug messages (only shown in development mode) +} Seobeo_Log_Level; +``` + +## Usage + +```c +Seobeo_Log(SEOBEO_INFO, "Listening on port %s\n", port); +Seobeo_Log(SEOBEO_ERROR, "Failed to allocate %zu bytes\n", size); +Seobeo_Log(SEOBEO_DEBUG, "Request line (first %zu bytes)\n", len); +``` + +## Debug Mode Control + +Debug logs are controlled by the `SEOBEO_ENABLE_DEBUG` macro: + +- **Production builds**: Debug logs are disabled (not compiled in) +- **Development builds**: Debug logs are enabled via `-DSEOBEO_ENABLE_DEBUG` + +## Build Targets + +### Seobeo Library + +#### Production (No Debug Logs) +```bash +# macOS +//seobeo:seobeo_server_macos + +# Linux +//seobeo:seobeo_server_linux + +# Platform-agnostic alias +//seobeo:seobeo_server +``` + +#### Development (With Debug Logs) +```bash +# macOS +//seobeo:seobeo_server_macos_dev + +# Linux +//seobeo:seobeo_server_linux_dev + +# Platform-agnostic alias +//seobeo:seobeo_server_dev +``` + +### MrJuneJune Server + +#### Production Build +```bash +# Build +bazel build //mrjunejune:mrjunejune_server + +# Run +bazel run //mrjunejune:mrjunejune_server + +# Bundle (for deployment) +bazel build //mrjunejune:mrjunejune_server_bundle +``` + +#### Development Build (With Debug Logs) +```bash +# Build +bazel build //mrjunejune:mrjunejune_server_dev + +# Run +bazel run //mrjunejune:mrjunejune_server_dev + +# Bundle +bazel build //mrjunejune:mrjunejune_server_dev_bundle +``` + +## Log Output Format + +All logs are prefixed with their level: + +``` +[INFO] Listening on port 6969 +[INFO] Server mode: EDGE +[ERROR] Failed to allocate 1024 bytes for body +[DEBUG] Request line (first 200 bytes) +[DEBUG] sscanf returned 3 (method='GET', path='/', version='HTTP/1.1') +``` + +## Changes Summary + +### Files Modified + +1. **seobeo/s_web.c** + - Replaced 26 printf statements with Seobeo_Log + - Updated logging to use appropriate levels (INFO, ERROR, DEBUG) + +2. **seobeo/s_linux_network.c** + - Replaced 10 printf statements with Seobeo_Log + - Added proper error and debug logging for network operations + +3. **seobeo/s_ssl.c** + - Replaced 5 printf/fprintf statements with Seobeo_Log + - SSL errors now use SEOBEO_ERROR level + - SSL info uses SEOBEO_INFO level + +4. **seobeo/BUILD** + - Added `seobeo_server_dev` alias for development builds + - Added `seobeo_server_macos_dev` with `SEOBEO_ENABLE_DEBUG` + - Added `seobeo_server_linux_dev` with `SEOBEO_ENABLE_DEBUG` + +5. **mrjunejune/BUILD** + - Added `mrjunejune_server_dev` binary target + - Added `mrjunejune_server_dev_bundle` for development deployment + +## Benefits + +1. **Cleaner Production Logs**: Debug messages don't clutter production output +2. **Better Debugging**: Enable verbose logging during development +3. **Consistent Format**: All logs follow the same `[LEVEL] message` format +4. **Conditional Compilation**: Debug code is completely removed from production builds (zero runtime overhead) +5. **Easy Toggle**: Switch between dev and prod with different build targets + +## Examples + +### Running in Development Mode +```bash +$ bazel run //mrjunejune:mrjunejune_server_dev +[INFO] Listening on port 6969 +[INFO] Server mode: EDGE +[DEBUG] Request line (first 30 bytes) +[DEBUG] sscanf returned 3 (method='GET', path='/', version='HTTP/1.1') +[DEBUG] Allocating method_copy +[DEBUG] Allocating version_copy +[DEBUG] Map now has 2 entries +[DEBUG] File path: /index.html +Body Size: 1234 +[DEBUG] Request handled successfully +``` + +### Running in Production Mode +```bash +$ bazel run //mrjunejune:mrjunejune_server +[INFO] Listening on port 6969 +[INFO] Server mode: EDGE +``` + +Notice that debug messages are completely absent in production mode!