Custom Format & Context
You can fully customize your logging output by adjusting the .format
property of a destination. A simple but powerful variable-based syntax helps to achieve astonishing formatting, including JSON and color.
The character $
marks the start of "variable" followed by a case-sensitive letter.
Basic Example
let console = ConsoleDestination() console.format = "$L: $M" // loglevel: message log.addDestination(console) log.debug("Hello World") // log output: DEBUG: Hello World
Setting the correct variables in .format
gives you full customization.
For example, you can adjust the date format by setting it between $D
and $d
using the standard Swift datetime format syntax. You can also colorize content of supported destinations by wrapping it with $C
and $c
. The used color depends on the log level.
More Examples, Including JSON
// log hour, minute and second, filename, function, line, log level & message console.format = "$DHH:mm:ss$d $N.$F():$l $L: $M" // log output: 10:06:31 MyViewController.myFunction():123 DEBUG: a debug message // log thread, date, time in milliseconds, level & message console.format = "$Dyyyy-MM-dd HH:mm:ss.SSS$d $T $L: $M" // log output: 2016-09-08 10:06:31.113 myThread DEBUG: My debug message // log everything to a JSON string: console.format = "$J" // log output is JSON: {"thread": "main", "file": "MyViewController.swift", "level": 1, "timestamp": 1487680870.503811, "message": "Hello World", "function": "myFunction()", "line": 123}
Format Variables
Each variable represents a particular data from the logging event and starts with a $
:
Variable | Description |
---|---|
$L | Level, for example "VERBOSE" |
$M | Message, for example the foo in log.debug("foo") |
$J | JSON-encoded logging object (can not be combined with other format variables!) |
$N | Name of file without suffix |
$n | Name of file with suffix |
$F | Function |
$l | Line (lower-case l) |
$D | Datetime, followed by standard Swift datetime syntax |
$d | Datetime format end |
$T | Thread |
$C | Color start, is just supported by certain destinations and is ignored if unsupported |
$c | Color end |
$U | Uptime in the format HH:MM:SS |
$X | Optional context value of any type (see below) |
Default Format
If you do not adjust your format then the following pattern will be used (including color where possible):
.format = "$DHH:mm:ss.SSS$d $C$L$c $N.$F:$l - $M" // log output (DEBUG is in color): 2016-09-08 10:06:31.113 DEBUG MyViewController.myFunction():123 - My debug message
Context
Optionally you can add context data to each log message of any type. On output it is added to the end of the log message:
.format = "$L: $M $X" // show level, message and context value<br>// add context log.debug("Message 1") log.debug("Message 2", context: nil) log.debug("Message 3", context: " yeah!") log.debug("Message 4", context: 567) log.debug("Message 5", context: [1, "a", 2]) // log output: DEBUG: Message 1 DEBUG: Message 2 DEBUG: Message 3 yeah! DEBUG: Message 4 567 DEBUG: Message 5 [1, \"a\", 2]