# `Minga.Log`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga/log.ex#L1)

Per-subsystem logging with configurable log levels.

Wraps `Logger` with subsystem-aware filtering. Each subsystem has its
own log level option (e.g., `:log_level_render`) that defaults to
`:default`, meaning "inherit from the global `:log_level` option."

## Subsystems

| Subsystem  | Option              | What it covers                           |
|------------|---------------------|------------------------------------------|
| `:render`  | `:log_level_render` | Render pipeline stage timing             |
| `:lsp`     | `:log_level_lsp`    | LSP client communication and errors      |
| `:agent`   | `:log_level_agent`  | AI agent providers and sessions          |
| `:editor`  | `:log_level_editor` | General editor operations and commands   |
| `:config`  | `:log_level_config` | Config loading, hooks, advice, extensions|
| `:port`    | `:log_level_port`   | Port/parser process management            |

## Usage

    Minga.Log.debug(:render, "[render:content] 24µs")
    Minga.Log.info(:agent, "[Agent] session started")
    Minga.Log.warning(:lsp, "LSP server crashed")

## Configuration

In your `config.exs`:

    # Global default: suppress debug logs
    set :log_level, :info

    # Turn on debug logging just for the render pipeline
    set :log_level_render, :debug

# `level`

```elixir
@type level() :: :debug | :info | :warning | :error
```

# `subsystem`

```elixir
@type subsystem() :: :render | :lsp | :agent | :editor | :config | :port
```

# `debug`

```elixir
@spec debug(subsystem(), String.t() | (-&gt; String.t())) :: :ok
```

Logs a debug message for the given subsystem (if its level permits).

# `effective_level`

```elixir
@spec effective_level(subsystem()) :: :debug | :info | :warning | :error | :none
```

Returns the effective log level for a subsystem.

If the subsystem's option is `:default`, falls back to the global
`:log_level` option.

# `error`

```elixir
@spec error(subsystem(), String.t() | (-&gt; String.t())) :: :ok
```

Logs an error message for the given subsystem (if its level permits).

# `info`

```elixir
@spec info(subsystem(), String.t() | (-&gt; String.t())) :: :ok
```

Logs an info message for the given subsystem (if its level permits).

# `warning`

```elixir
@spec warning(subsystem(), String.t() | (-&gt; String.t())) :: :ok
```

Logs a warning message for the given subsystem (if its level permits).

---

*Consult [api-reference.md](api-reference.md) for complete listing*
