Swiftpack.co - EricRabil/Swog as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by EricRabil.
EricRabil/Swog 1.0.2
Apple, I got a bone to pick with you
⭐️ 1
🕓 3 weeks ago
iOS macOS
.package(url: "https://github.com/EricRabil/Swog.git", from: "1.0.2")

Swog

Apple, I got a bone to pick with you

Swog is an opionated wrapper around OSLog that uses internal APIs (that frankly should be public since they allowed you to pass an array of CVarArg and a DSOHandle, working around the artificial limitations they leave).

It is mostly inlinable, and aims to be as lightweight of an abstraction as possible. You shouldn't have to type out hieroglyphics to get decent logging, and you shouldn't need to support iOS 14 and up to get logging systems we should've had at iOS 8.

Swog has a driver approach, allowing you to connect it to multiple outlets. It comes with an OSLog and Console driver, but you're welcome to add your own.

LoggingDriver

The LoggingDriver lies at the heart of Swog, and allows you to quickly plug-n-play any logging outlets you need.

It currently has two outlet methods - one that formats string using traditional static strings and CVarArgs, and one that constructs a C string and CVarArgs from a backported implementation of OSLogMessage.

import Foundation

public protocol LoggingDriver {
    func log(level: LoggingLevel, fileID: StaticString, line: Int, function: StaticString, dso: UnsafeRawPointer, category: StaticString, message: StaticString, args: [CVarArg])
    func log(level: LoggingLevel, fileID: StaticString, line: Int, function: StaticString, dso: UnsafeRawPointer, category: StaticString, message: BackportedOSLogMessage)
}

LoggingDrivers can be installed by directly mutating the exported LoggingDrivers array. This is done for performance purposes, as all logging calls are inlined down to an iteration over this array.

Currently, there are two logging drivers that ship with Swog:

  • OSLogDriver
  • ConsoleDriver

The default value of LoggingDrivers in debug builds is ConsoleDriver, and OSLogDriver in production. Both can run concurrently as well, or with any other configuration.

OSLogInterpolation

Swog has backported OSLogInterpolation/OSLogMessage to allow its usage before Big Sur. This is also supported for the Console driver, and it allows privacy specifier enforcement when printing to stdout.

Swog does it's best to maintain performance with this backport, and leverages low-level optimization strategies like _transparent, inline(__always), and _optimize(speed) wherever possible/rational. It is routinely checked in both a disassembler and benchmark tests to ensure thin code output and consistently minimal overhead.

GitHub

link
Stars: 1
Last commit: 6 days ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Release Notes

1.0.2
3 weeks ago

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics