79 .adapter_mem = adapter_mem,
115 static const char TIMESTAMP_ERROR[] =
"[timestamp error] ";
125 sizeof(TIMESTAMP_ERROR) - 1u,
129 n !=
sizeof(TIMESTAMP_ERROR) - 1u) {
143 sizeof(TIMESTAMP_ERROR) - 1u,
147 n !=
sizeof(TIMESTAMP_ERROR) - 1u) {
159 "[%04" PRId32
"-%02" PRId32
"-%02" PRId32
160 " %02" PRId32
":%02" PRId32
":%02" PRId32
170 if (len < 0 || (
size_t)len >=
sizeof(buf)) {
175 size_t n =
stream_write(stream, buf, (
size_t)len, &write_st);
226 return write_timestamp_st;
274 logger_default->
mem->
free(logger_default);
319 if (!out || !cfg || !env) {
#define LEXLEO_ASSERT(expr)
Adapter-side API for constructing and binding logger_t objects.
logger_status_t logger_create(logger_t **out, const logger_vtbl_t *vtbl, void *backend, const logger_env_t *env)
Create a generic logger handle from adapter-provided backend bindings.
static const logger_vtbl_t DEFAULT_VTBL
Private backend vtable for logger_default.
static void logger_default_destroy(void *backend)
Private destroy implementation for the logger_default backend.
static logger_status_t logger_default_write_timestamp(stream_t *stream, const osal_time_ops_t *time_ops)
Write the logger_default timestamp prefix to the target stream.
logger_default_env_t logger_default_default_env(stream_t *stream, const osal_time_ops_t *time_ops, const osal_mem_ops_t *adapter_mem, const logger_env_t *port_env)
Build a default environment for the logger_default adapter.
static logger_status_t logger_default_log(void *backend, const char *message)
Private log implementation for the logger_default backend.
logger_status_t logger_default_create_logger(logger_t **out, const logger_default_cfg_t *cfg, const logger_default_env_t *env)
Create a logger instance backed by the logger_default adapter.
logger_default_cfg_t logger_default_default_cfg(void)
Return the default configuration for the logger_default adapter.
Composition Root API for wiring the logger_default adapter.
Private backend handle definition for the logger_default adapter.
bool logger_default_epoch_time_to_date(logger_default_utc_timestamp_t *out, const osal_time_t *time)
Convert an epoch-time value to a decomposed UTC timestamp.
Private UTC timestamp conversion helpers for the logger_default adapter.
size_t osal_strlen(const char *s)
Borrower-facing runtime operations for the stream port.
size_t stream_write(stream_t *s, const void *buf, size_t n, stream_status_t *st)
Write bytes to a stream.
stream_status_t
Public status codes used by the stream port.
Configuration type for the logger_default adapter.
bool append_newline
Whether the adapter appends a trailing newline to emitted messages.
Injected dependencies for the logger_default adapter.
logger_env_t port_env
Borrowed logger port environment.
const osal_mem_ops_t * adapter_mem
Borrowed memory operations used for adapter-backend allocation.
stream_t * stream
Borrowed target stream used by the adapter.
const osal_time_ops_t * time_ops
Borrowed time operations used for timestamp generation.
Private backend handle for the logger_default adapter.
const osal_mem_ops_t * mem
const osal_time_ops_t * time_ops
Private UTC timestamp representation used by logger_default.
Runtime environment for the logger port.
Private handle structure for a logger_t.
Adapter dispatch table bound to a logger_t instance.
logger_status_t(* log)(void *backend, const char *message)
void *(* malloc)(size_t size)
osal_time_status_t(* now)(osal_time_t *out)
Private handle structure for a stream_t.