Using os_log to Log Messages

Episode #344 | 12 minutes | published on July 3, 2018 | Uses Xcode-10.0-beta2, swift-4.2
Subscribers Only
In this episode we show how you adopt the Unified Logging framework in code by using the OSLog type to define your log subsystems and categories, and how to use os_log to actually log events and messages.

Episode Links

Defining Shared OSLog instances

You will likely want to log statements and reuse the same subsystem and category throughout your application. For this, you can define a struct with a static member:

import os.log

struct Log {
    static var general = OSLog(subsystem: "com.myapp.my_target", category: "general")
}

Logging Messages

Then you can use the shared log instance to log messages with os_log:

os_log("The app did something interesting", 
    log: Log.general,
    type: .info)

Including values in your log messages

We can include values in our log messages by using one of the built-in formatting type specifiers:

%dIntegers
%.2fFloats
%sStrings
%@Objects

Sometimes we may want to give the system some information on how we want these values to be interpreted and formatted on display. One example is using time_t to get a formatted date to be displayed:

os_log("The record was modified at %{time_t}d", 
    log: Log.general, 
    type: .info, 
    time_t(date.timeIntervalSince1970))
blog comments powered by Disqus