# Logger _Path: en/lua/system/logger_ ## Table of Contents - Logging ## Content # Logging Structured logging with debug, info, warn, and error levels. ## Loading ```lua local logger = require("logger") ``` ### Debug ```lua logger:debug("message", {key = "value"}) ``` | Parameter | Type | Description | |-----------|------|-------------| | `message` | string | Log message | | `fields` | table? | Contextual key-value pairs | ### Info ```lua logger:info("message", {key = "value"}) ``` | Parameter | Type | Description | |-----------|------|-------------| | `message` | string | Log message | | `fields` | table? | Contextual key-value pairs | ### Warn ```lua logger:warn("message", {key = "value"}) ``` | Parameter | Type | Description | |-----------|------|-------------| | `message` | string | Log message | | `fields` | table? | Contextual key-value pairs | ### Error ```lua logger:error("message", {key = "value"}) ``` | Parameter | Type | Description | |-----------|------|-------------| | `message` | string | Log message | | `fields` | table? | Contextual key-value pairs | ### With Fields Create a child logger with persistent fields. ```lua local child = logger:with({request_id = id}) child:info("message") ``` | Parameter | Type | Description | |-----------|------|-------------| | `fields` | table | Fields to attach to all logs | **Returns:** `Logger` ### Named Logger Create a named child logger. ```lua local named = logger:named("auth") named:info("message") ``` | Parameter | Type | Description | |-----------|------|-------------| | `name` | string | Logger name | **Returns:** `Logger` ## Errors | Condition | Kind | Retryable | |-----------|------|-----------| | Empty name string | `errors.INVALID` | no | See [Error Handling](lua/core/errors.md) for working with errors. ## Navigation Previous: Environment (lua/system/env) Next: I/O (lua/system/io)