Beside obvious benefit for unit testing (see `NullLogger`), having loose coupling to a logging framework makes it easy to log messages into multiple logging systems at once (see `AgregateLogger`).
## Usage
`Logger` protocol provides simple interface utilizing log levels defined by [The Syslog Protocol - RFC5424](https://www.rfc-editor.org/info/rfc5424).
```swift
logger.log("message", level: .emergency)
logger.log("message", level: .alert)
logger.log("message", level: .critical)
logger.log("message", level: .error)
logger.log("message", level: .warning)
logger.log("message", level: .notice)
logger.log("message", level: .informational)
logger.log("message", level: .debug)
```
Log calls capture time, file name, method name and line number automatically. This way it is possible to compose log messages similar to the one presented below.