# Logging {#logging}

The CLI embraces the [swift-log](https://github.com/apple/swift-log) interface
for logging. The package abstracts away the implementation details of logging,
allowing the CLI to be agnostic to the logging backend. The logger is
dependency-injected using task locals and can be accessed anywhere using:

```bash
Logger.current
```

> [!NOTE]
> Task locals don't propagate the value when using `Dispatch` or detached tasks,
> so if you use them, you'll need to get it and pass it to the asynchronous
> operation.


## What to log {#what-to-log}

Logs are not the CLI's UI. They are a tool to diagnose issues when they arise.
Therefore, the more information you provide, the better. When building new
features, put yourself in the shoes of a developer coming across unexpected
behavior, and think about what information would be helpful to them. Ensure you
you use the right [log
level](https://www.swift.org/documentation/server/guides/libraries/log-levels.html).
Otherwise developers won't be able to filter out the noise.
