
The first column is 12 characters which contain the timestamp in the format: "2025-05-03 18:07:50.23" Followed by a space.
The second column is 2 characters - an emoji width - followed by a space.
The third column begins with an open bracket[, is up 20 characters with the module path. if it is longer than 20 characters then the first character will be a utf-8 elipsis "…" followed by the right justified text ] and a space.
The fourth column is the logging message.
After the message the passed structure will be displayed within curly braces. {key1=value1, key2=value2, key3=value}

The text for the module path, and between the curlies must be different colors.
The elipsis must be utf-8 to save space.

1234567890123456789012 12 [12345678901234567890] 1234…
2025-05-03 18:07:50.23 🐛 [           cli.watch] run_watch: Adding repositories...
2025-05-03 18:07:50.23 ℹ️ [     monitor.service] Adding repository to monitor {path=/Users/tim/code/pyv/pyvider-core, repo_id=pyvider-core}
2025-05-03 18:07:50.24 ℹ️ [     monitor.handler] Loaded .gitignore patterns {path=/Users/tim/code/pyv/pyvider-core/.gitignore, repo_id=pyvider-core, repo_path=/Users/tim/code/pyv/pyvider-core}
2025-05-03 18:07:50.24 🐛 [     monitor.handler] Initialized event handler {repo_id=pyvider-core, repo_path=/Users/tim/code/pyv/pyvider-core}
2025-05-03 18:07:50.24 🐛 [     monitor.service] Scheduled handler with observer {repo_id=pyvider-core}
2025-05-03 18:07:50.24 ℹ️ [     monitor.handler] Adding repository to monitor {path=/Users/tim/code/pyv/pyvider-schema, repo_id=pyvider-schema}
2025-05-03 18:07:50.25 ❌ […temetry.logger.base] An example log message with a longer module path.

The [module path] and { k=v } must be different colors than the text.
The elipsis must be utf-8 to save space.
