Event Log
JSONL-based event logging for external program integration. Events mirror database event creation and enable hooks similar to Claude Code's event system.
Purpose
- Emit structured events for external consumers
- Enable hook-based integrations
- Mirror the database event stream
Log Location
- Default:
.ikigai/logs/current.log - Override:
$IKIGAI_LOG_DIR/current.log
APIs
DI-Based (Preferred)
#include "logger.h"
// Create logger with explicit context
ik_logger_t *logger = ik_logger_create(ctx, working_dir);
// Create and emit event
yyjson_mut_doc *doc = ik_log_create();
yyjson_mut_val *root = yyjson_mut_doc_get_root(doc);
yyjson_mut_obj_add_str(doc, root, "event", "chunk_received");
yyjson_mut_obj_add_int(doc, root, "bytes", len);
ik_logger_debug_json(logger, doc); // Takes ownership, frees doc
Legacy Global (Migration)
// Initialize once
ik_log_init(working_dir);
// Emit events
yyjson_mut_doc *doc = ik_log_create();
// ... populate doc ...
ik_log_debug_json(doc); // Takes ownership
// Shutdown
ik_log_shutdown();
Log Levels
| Level | Function | Purpose |
|-------|----------|---------|
| debug | ik_logger_debug_json() | Verbose event tracing |
| info | ik_logger_info_json() | Normal operations |
| warn | ik_logger_warn_json() | Recoverable issues |
| error | ik_logger_error_json() | Failures |
| fatal | ik_logger_fatal_json() | Calls exit(1) after logging |
Output Format
Each line is a JSON object:
{"level":"debug","timestamp":"2025-01-15T10:30:00.123-05:00","logline":{"event":"chunk_received","bytes":1024}}
Inspecting Events
tail -f .ikigai/logs/current.log
Source Files
src/logger.h- API declarationssrc/logger.c- Implementation