SimpleLogger is a modern Swift logging utility built on Apple's Unified Logging system (OSLog). It provides strongly typed categories, queryable log access, advanced time-based filtering, and multiple export formats, designed primarily for SwiftUI applications.
- Type-safe logger categories with duplicate detection
- Unified Logging integration (
OSLog) - Observable log manager for SwiftUI
- Advanced filtering
- Specific date
- Date range
- Hour range
- Rolling presets (minutes → years)
- Export formats
- Plain text
- JSON
- JSON Lines (
.jsonl) - CSV (configurable delimiters)
- Optional gzip compression
- System log exclusion
- Severity-level filtering
Add SimpleLogger to your Swift project using Swift Package Manager.
dependencies: [
.package(
url: "https://github.com/markbattistella/SimpleLogger",
from: "1.0.0"
)
]Alternatively, you can add SimpleLogger using Xcode by navigating to File > Add Packages and entering the package repository URL.
SimpleLogger wraps over OSLog.Logger under a simplified name and provides a convenience initialiser that automatically uses your app's bundle identifier as the subsystem.
import SimpleLogger
let logger = Logger(category: .ui)
logger.info("User tapped the start button")Categories are strongly typed using LoggerCategory.
| Logger Category | Description |
|---|---|
routing |
Logger category for routing-related logs. |
navigation |
Logger category for navigation-related logs. |
stateManagement |
Logger category for state management-related logs. |
dependencyInjection |
Logger category for dependency injection-related logs. |
observers |
Logger category for observer-related logs. |
publishers |
Logger category for publisher-related logs. |
subscribers |
Logger category for subscriber-related logs. |
events |
Logger category for event-related logs. |
signals |
Logger category for signal-related logs. |
| Logger Category | Description |
|---|---|
analytics |
Logger category for analytics-related logs. |
configuration |
Logger category for configuration-related logs. |
errorHandling |
Logger category for error handling-related logs. |
logging |
Logger category for logging-related logs. |
configurationManagement |
Logger category for configuration management-related logs. |
imageProcessing |
Logger category for image processing-related logs. |
videoProcessing |
Logger category for video processing-related logs. |
audioProcessing |
Logger category for audio processing-related logs. |
sensors |
Logger category for sensor-related logs. |
camera |
Logger category for camera-related logs. |
location |
Logger category for location-related logs. |
maps |
Logger category for maps-related logs. |
| Logger Category | Description |
|---|---|
network |
Logger category for network-related logs. |
api |
Logger category for API-related logs. |
upload |
Logger category for upload-related logs. |
download |
Logger category for download-related logs. |
sync |
Logger category for synchronisation-related logs. |
connectivity |
Logger category for connectivity-related logs. |
reachability |
Logger category for reachability-related logs. |
streaming |
Logger category for streaming-related logs. |
bluetooth |
Logger category for Bluetooth-related logs. |
| Logger Category | Description |
|---|---|
performance |
Logger category for performance-related logs. |
memoryManagement |
Logger category for memory management-related logs. |
concurrency |
Logger category for concurrency-related logs. |
threading |
Logger category for threading-related logs. |
debugging |
Logger category for debugging-related logs. |
monitoring |
Logger category for monitoring-related logs. |
| Logger Category | Description |
|---|---|
coreData |
Logger category for Core Data-related logs. |
swiftData |
Logger category for Swift Data-related logs. |
database |
Logger category for database-related logs. |
caching |
Logger category for caching-related logs. |
persistence |
Logger category for persistence-related logs. |
serialization |
Logger category for serialisation-related logs. |
deserialization |
Logger category for deserialisation-related logs. |
parsing |
Logger category for parsing-related logs. |
keychain |
Logger category for keychain-related logs. |
userDefaults |
Logger category for UserDefaults-related logs. |
backup |
Logger category for backup-related logs. |
restore |
Logger category for restore-related logs. |
| Logger Category | Description |
|---|---|
security |
Logger category for security-related logs. |
encryption |
Logger category for encryption-related logs. |
decryption |
Logger category for decryption-related logs. |
permissions |
Logger category for permissions-related logs. |
authentication |
Logger category for authentication-related logs. |
authorization |
Logger category for authorisation-related logs. |
| Logger Category | Description |
|---|---|
lifecycle |
Logger category for lifecycle-related logs. |
initialization |
Logger category for initialisation-related logs. |
deinitialization |
Logger category for de-initialisation-related logs. |
fileSystem |
Logger category for file system-related logs. |
backgroundTasks |
Logger category for background tasks-related logs. |
scheduling |
Logger category for scheduling-related logs. |
notifications |
Logger category for notifications-related logs. |
timers |
Logger category for timers-related logs. |
| Logger Category | Description |
|---|---|
testing |
Logger category for testing-related logs. |
unitTesting |
Logger category for unit testing-related logs. |
integrationTesting |
Logger category for integration testing-related logs. |
uiTesting |
Logger category for UI testing-related logs. |
mocking |
Logger category for mocking-related logs. |
stubbing |
Logger category for stubbing-related logs. |
validation |
Logger category for validation-related logs. |
| Logger Category | Description |
|---|---|
ui |
Logger category for UI-related logs. |
gestures |
Logger category for gesture-related logs. |
animations |
Logger category for animation-related logs. |
transitions |
Logger category for transition-related logs. |
accessibility |
Logger category for accessibility-related logs. |
localization |
Logger category for localisation-related logs. |
internationalization |
Logger category for internationalisation-related logs. |
theming |
Logger category for theming-related logs. |
styling |
Logger category for styling-related logs. |
layout |
Logger category for layout-related logs. |
rendering |
Logger category for rendering-related logs. |
| Logger Category | Description |
|---|---|
utils |
Logger category for utility-related logs. |
extensions |
Logger category for extension-related logs. |
helpers |
Logger category for helper-related logs. |
factories |
Logger category for factory-related logs. |
builders |
Logger category for builder-related logs. |
commands |
Logger category for command-related logs. |
handlers |
Logger category for handler-related logs. |
middlewares |
Logger category for middleware-related logs. |
interceptors |
Logger category for interceptor-related logs. |
You can define your own categories safely:
extension LoggerCategory {
static let payments = LoggerCategory("Payments")
}
let logger = Logger(category: .payments)If a duplicate category is registered at runtime (case-insensitive), SimpleLogger logs a warning automatically.
LoggerManager is the central observable object for fetching, filtering, and exporting logs.
import SwiftUI
import SimpleLogger
@main
struct MyApp: App {
@StateObject private var loggerManager = LoggerManager()
var body: some Scene {
WindowGroup {
ContentView()
.environment(loggerManager)
}
}
}Filtering is controlled by a filter kind plus associated state.
loggerManager.kind = .specificDateAvailable kinds:
.specificDate.dateRange.hourRange.preset
loggerManager.kind = .specificDate
loggerManager.specificDate = Date()loggerManager.kind = .dateRange
loggerManager.dateRangeStart = startDate
loggerManager.dateRangeEnd = endDateloggerManager.kind = .hourRange
loggerManager.hourRangeDate = Date()
loggerManager.hourRangeStartHour = 9
loggerManager.hourRangeEndHour = 17loggerManager.kind = .preset
loggerManager.preset = .lastTwentyFourHoursPresets range from 5 minutes up to 1 year, grouped logically for UI presentation.
You can filter by severity:
loggerManager.levels = [.error, .fault]Available levels:
debuginfonoticeerrorfault
Fetching is explicit and cancellable.
loggerManager.fetch()State exposed for UI:
logsisFetchinghasValidResultslastError
Exports are asynchronous and return Result<Data, LoggerManagerError>.
Supported Formats
.log
.json
.jsonLines
.csv(.comma | .semicolon | .tab | .pipe)
.gzip(Format)
let result = await loggerManager.export(
format: .gzip(.jsonLines)
)
switch result {
case .success(let data):
// write data to file
case .failure(let error):
print(error.localizedDescription)
}.csv(.semicolon)
.csv(.tab)
All CSV values are safely quoted and escaped.
Errors are surfaced via LoggerManagerError:
.fetch(Error)
.export(Error)Each error provides a user-friendly errorDescription.
Contributions are welcome! Please fork the repository and submit a pull request for any features, fixes, or improvements.
SimpleLogger is available under the MIT license. See the LICENCE file for more information.