|
96
|
1 # Seobeo Logging System
|
|
|
2
|
|
|
3 ## Overview
|
|
|
4
|
|
|
5 All `printf` statements in the seobeo library have been replaced with `Seobeo_Log()` calls for consistent, level-based logging with optional debug mode.
|
|
|
6
|
|
|
7 ## Log Levels
|
|
|
8
|
|
|
9 ```c
|
|
|
10 typedef enum {
|
|
|
11 SEOBEO_INFO = 0, // General information (server start, mode, etc.)
|
|
|
12 SEOBEO_WARNING, // Warnings (SSL not compiled, etc.)
|
|
|
13 SEOBEO_ERROR, // Errors (allocation failures, connection errors, etc.)
|
|
|
14 SEOBEO_DEBUG, // Debug messages (only shown in development mode)
|
|
|
15 } Seobeo_Log_Level;
|
|
|
16 ```
|
|
|
17
|
|
|
18 ## Usage
|
|
|
19
|
|
|
20 ```c
|
|
|
21 Seobeo_Log(SEOBEO_INFO, "Listening on port %s\n", port);
|
|
|
22 Seobeo_Log(SEOBEO_ERROR, "Failed to allocate %zu bytes\n", size);
|
|
|
23 Seobeo_Log(SEOBEO_DEBUG, "Request line (first %zu bytes)\n", len);
|
|
|
24 ```
|
|
|
25
|
|
|
26 ## Debug Mode Control
|
|
|
27
|
|
|
28 Debug logs are controlled by the `SEOBEO_ENABLE_DEBUG` macro:
|
|
|
29
|
|
|
30 - **Production builds**: Debug logs are disabled (not compiled in)
|
|
|
31 - **Development builds**: Debug logs are enabled via `-DSEOBEO_ENABLE_DEBUG`
|
|
|
32
|
|
|
33 ## Build Targets
|
|
|
34
|
|
|
35 ### Seobeo Library
|
|
|
36
|
|
|
37 #### Production (No Debug Logs)
|
|
|
38 ```bash
|
|
|
39 # macOS
|
|
|
40 //seobeo:seobeo_server_macos
|
|
|
41
|
|
|
42 # Linux
|
|
|
43 //seobeo:seobeo_server_linux
|
|
|
44
|
|
|
45 # Platform-agnostic alias
|
|
|
46 //seobeo:seobeo_server
|
|
|
47 ```
|
|
|
48
|
|
|
49 #### Development (With Debug Logs)
|
|
|
50 ```bash
|
|
|
51 # macOS
|
|
|
52 //seobeo:seobeo_server_macos_dev
|
|
|
53
|
|
|
54 # Linux
|
|
|
55 //seobeo:seobeo_server_linux_dev
|
|
|
56
|
|
|
57 # Platform-agnostic alias
|
|
|
58 //seobeo:seobeo_server_dev
|
|
|
59 ```
|
|
|
60
|
|
|
61 ### MrJuneJune Server
|
|
|
62
|
|
|
63 #### Production Build
|
|
|
64 ```bash
|
|
|
65 # Build
|
|
|
66 bazel build //mrjunejune:mrjunejune_server
|
|
|
67
|
|
|
68 # Run
|
|
|
69 bazel run //mrjunejune:mrjunejune_server
|
|
|
70
|
|
|
71 # Bundle (for deployment)
|
|
|
72 bazel build //mrjunejune:mrjunejune_server_bundle
|
|
|
73 ```
|
|
|
74
|
|
|
75 #### Development Build (With Debug Logs)
|
|
|
76 ```bash
|
|
|
77 # Build
|
|
|
78 bazel build //mrjunejune:mrjunejune_server_dev
|
|
|
79
|
|
|
80 # Run
|
|
|
81 bazel run //mrjunejune:mrjunejune_server_dev
|
|
|
82
|
|
|
83 # Bundle
|
|
|
84 bazel build //mrjunejune:mrjunejune_server_dev_bundle
|
|
|
85 ```
|
|
|
86
|
|
|
87 ## Log Output Format
|
|
|
88
|
|
|
89 All logs are prefixed with their level:
|
|
|
90
|
|
|
91 ```
|
|
|
92 [INFO] Listening on port 6969
|
|
|
93 [INFO] Server mode: EDGE
|
|
|
94 [ERROR] Failed to allocate 1024 bytes for body
|
|
|
95 [DEBUG] Request line (first 200 bytes)
|
|
|
96 [DEBUG] sscanf returned 3 (method='GET', path='/', version='HTTP/1.1')
|
|
|
97 ```
|
|
|
98
|
|
|
99 ## Changes Summary
|
|
|
100
|
|
|
101 ### Files Modified
|
|
|
102
|
|
|
103 1. **seobeo/s_web.c**
|
|
|
104 - Replaced 26 printf statements with Seobeo_Log
|
|
|
105 - Updated logging to use appropriate levels (INFO, ERROR, DEBUG)
|
|
|
106
|
|
|
107 2. **seobeo/s_linux_network.c**
|
|
|
108 - Replaced 10 printf statements with Seobeo_Log
|
|
|
109 - Added proper error and debug logging for network operations
|
|
|
110
|
|
|
111 3. **seobeo/s_ssl.c**
|
|
|
112 - Replaced 5 printf/fprintf statements with Seobeo_Log
|
|
|
113 - SSL errors now use SEOBEO_ERROR level
|
|
|
114 - SSL info uses SEOBEO_INFO level
|
|
|
115
|
|
|
116 4. **seobeo/BUILD**
|
|
|
117 - Added `seobeo_server_dev` alias for development builds
|
|
|
118 - Added `seobeo_server_macos_dev` with `SEOBEO_ENABLE_DEBUG`
|
|
|
119 - Added `seobeo_server_linux_dev` with `SEOBEO_ENABLE_DEBUG`
|
|
|
120
|
|
|
121 5. **mrjunejune/BUILD**
|
|
|
122 - Added `mrjunejune_server_dev` binary target
|
|
|
123 - Added `mrjunejune_server_dev_bundle` for development deployment
|
|
|
124
|
|
|
125 ## Benefits
|
|
|
126
|
|
|
127 1. **Cleaner Production Logs**: Debug messages don't clutter production output
|
|
|
128 2. **Better Debugging**: Enable verbose logging during development
|
|
|
129 3. **Consistent Format**: All logs follow the same `[LEVEL] message` format
|
|
|
130 4. **Conditional Compilation**: Debug code is completely removed from production builds (zero runtime overhead)
|
|
|
131 5. **Easy Toggle**: Switch between dev and prod with different build targets
|
|
|
132
|
|
|
133 ## Examples
|
|
|
134
|
|
|
135 ### Running in Development Mode
|
|
|
136 ```bash
|
|
|
137 $ bazel run //mrjunejune:mrjunejune_server_dev
|
|
|
138 [INFO] Listening on port 6969
|
|
|
139 [INFO] Server mode: EDGE
|
|
|
140 [DEBUG] Request line (first 30 bytes)
|
|
|
141 [DEBUG] sscanf returned 3 (method='GET', path='/', version='HTTP/1.1')
|
|
|
142 [DEBUG] Allocating method_copy
|
|
|
143 [DEBUG] Allocating version_copy
|
|
|
144 [DEBUG] Map now has 2 entries
|
|
|
145 [DEBUG] File path: /index.html
|
|
|
146 Body Size: 1234
|
|
|
147 [DEBUG] Request handled successfully
|
|
|
148 ```
|
|
|
149
|
|
|
150 ### Running in Production Mode
|
|
|
151 ```bash
|
|
|
152 $ bazel run //mrjunejune:mrjunejune_server
|
|
|
153 [INFO] Listening on port 6969
|
|
|
154 [INFO] Server mode: EDGE
|
|
|
155 ```
|
|
|
156
|
|
|
157 Notice that debug messages are completely absent in production mode!
|