{"id":15170586,"url":"https://github.com/markbattistella/simplelogger","last_synced_at":"2025-12-29T02:06:07.907Z","repository":{"id":239119581,"uuid":"798596702","full_name":"markbattistella/SimpleLogger","owner":"markbattistella","description":"SimpleLogger is a robust and flexible logging framework designed for Swift applications across multiple platforms, including iOS, macOS, tvOS, and watchOS. It provides extensive functionality for managing, filtering, and exporting logs with ease and precision.","archived":false,"fork":false,"pushed_at":"2024-11-16T23:35:37.000Z","size":36,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-31T10:11:33.203Z","etag":null,"topics":["appkit","hacktoberfest","ios","ipados","logger","oslog","swift","swiftui","tvos","uikit","visionos","watchos"],"latest_commit_sha":null,"homepage":"https://swiftpackageindex.com/markbattistella/SimpleLogger/documentation","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/markbattistella.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-10T05:07:50.000Z","updated_at":"2025-01-27T04:12:40.000Z","dependencies_parsed_at":"2024-05-10T06:25:47.369Z","dependency_job_id":"622fbbfc-f6cb-4bff-a535-30a723f21599","html_url":"https://github.com/markbattistella/SimpleLogger","commit_stats":null,"previous_names":["markbattistella/simplelogger"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markbattistella%2FSimpleLogger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markbattistella%2FSimpleLogger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markbattistella%2FSimpleLogger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markbattistella%2FSimpleLogger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/markbattistella","download_url":"https://codeload.github.com/markbattistella/SimpleLogger/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238200768,"owners_count":19433098,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appkit","hacktoberfest","ios","ipados","logger","oslog","swift","swiftui","tvos","uikit","visionos","watchos"],"created_at":"2024-09-27T08:04:10.293Z","updated_at":"2025-12-29T02:06:07.900Z","avatar_url":"https://github.com/markbattistella.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable MD033 MD041 --\u003e\n\u003cdiv align=\"center\"\u003e\n\n# SimpleLogger\n\n![Swift Versions](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fmarkbattistella%2FSimpleLogger%2Fbadge%3Ftype%3Dswift-versions)\n\n![Platforms](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fmarkbattistella%2FSimpleLogger%2Fbadge%3Ftype%3Dplatforms)\n\n![Licence](https://img.shields.io/badge/Licence-MIT-white?labelColor=blue\u0026style=flat)\n\n\u003c/div\u003e\n\n`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.\n\n## Features\n\n- Type-safe logger categories with duplicate detection\n- Unified Logging integration (`OSLog`)\n- Observable log manager for SwiftUI\n- Advanced filtering\n  - Specific date\n  - Date range\n  - Hour range\n  - Rolling presets (minutes → years)\n- Export formats\n  - Plain text\n  - JSON\n  - JSON Lines (`.jsonl`)\n  - CSV (configurable delimiters)\n  - Optional gzip compression\n- System log exclusion\n- Severity-level filtering\n\n## Installation\n\nAdd `SimpleLogger` to your Swift project using Swift Package Manager.\n\n```swift\ndependencies: [\n  .package(\n    url: \"https://github.com/markbattistella/SimpleLogger\", \n    from: \"1.0.0\"\n  )\n]\n```\n\nAlternatively, you can add `SimpleLogger` using Xcode by navigating to `File \u003e Add Packages` and entering the package repository URL.\n\n## Usage\n\n### Basic Usage\n\n`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.\n\n```swift\nimport SimpleLogger\n\nlet logger = Logger(category: .ui)\nlogger.info(\"User tapped the start button\")\n```\n\n#### Logger Categories\n\nCategories are strongly typed using `LoggerCategory`.\n\n##### Architecture and Patterns\n\n| Logger Category | Description |\n| - | - |\n| `routing` | Logger category for routing-related logs. |\n| `navigation` | Logger category for navigation-related logs. |\n| `stateManagement` | Logger category for state management-related logs. |\n| `dependencyInjection` | Logger category for dependency injection-related logs. |\n| `observers` | Logger category for observer-related logs. |\n| `publishers` | Logger category for publisher-related logs. |\n| `subscribers` | Logger category for subscriber-related logs. |\n| `events` | Logger category for event-related logs. |\n| `signals` | Logger category for signal-related logs. |\n\n##### Miscellaneous\n\n| Logger Category | Description |\n| - | - |\n| `analytics` | Logger category for analytics-related logs. |\n| `configuration` | Logger category for configuration-related logs. |\n| `errorHandling` | Logger category for error handling-related logs. |\n| `logging` | Logger category for logging-related logs. |\n| `configurationManagement` | Logger category for configuration management-related logs. |\n| `imageProcessing` | Logger category for image processing-related logs. |\n| `videoProcessing` | Logger category for video processing-related logs. |\n| `audioProcessing` | Logger category for audio processing-related logs. |\n| `sensors` | Logger category for sensor-related logs. |\n| `camera` | Logger category for camera-related logs. |\n| `location` | Logger category for location-related logs. |\n| `maps` | Logger category for maps-related logs. |\n\n##### Networking and Connectivity\n\n| Logger Category | Description |\n| - | - |\n| `network` | Logger category for network-related logs. |\n| `api` | Logger category for API-related logs. |\n| `upload` | Logger category for upload-related logs. |\n| `download` | Logger category for download-related logs. |\n| `sync` | Logger category for synchronisation-related logs. |\n| `connectivity` | Logger category for connectivity-related logs. |\n| `reachability` | Logger category for reachability-related logs. |\n| `streaming` | Logger category for streaming-related logs. |\n| `bluetooth` | Logger category for Bluetooth-related logs. |\n\n##### Performance and Optimisation\n\n| Logger Category | Description |\n| - | - |\n| `performance` | Logger category for performance-related logs. |\n| `memoryManagement` | Logger category for memory management-related logs. |\n| `concurrency` | Logger category for concurrency-related logs. |\n| `threading` | Logger category for threading-related logs. |\n| `debugging` | Logger category for debugging-related logs. |\n| `monitoring` | Logger category for monitoring-related logs. |\n\n##### Data Management and Persistence\n\n| Logger Category | Description |\n| - | - |\n| `coreData` | Logger category for Core Data-related logs. |\n| `swiftData` | Logger category for Swift Data-related logs. |\n| `database` | Logger category for database-related logs. |\n| `caching` | Logger category for caching-related logs. |\n| `persistence` | Logger category for persistence-related logs. |\n| `serialization` | Logger category for serialisation-related logs. |\n| `deserialization` | Logger category for deserialisation-related logs. |\n| `parsing` | Logger category for parsing-related logs. |\n| `keychain` | Logger category for keychain-related logs. |\n| `userDefaults` | Logger category for UserDefaults-related logs. |\n| `backup` | Logger category for backup-related logs. |\n| `restore` | Logger category for restore-related logs. |\n\n##### Security and Permissions\n\n| Logger Category | Description |\n| - | - |\n| `security` | Logger category for security-related logs. |\n| `encryption` | Logger category for encryption-related logs. |\n| `decryption` | Logger category for decryption-related logs. |\n| `permissions` | Logger category for permissions-related logs. |\n| `authentication` | Logger category for authentication-related logs. |\n| `authorization` | Logger category for authorisation-related logs. |\n\n##### System and OS\n\n| Logger Category | Description |\n| - | - |\n| `lifecycle` | Logger category for lifecycle-related logs. |\n| `initialization` | Logger category for initialisation-related logs. |\n| `deinitialization` | Logger category for de-initialisation-related logs. |\n| `fileSystem` | Logger category for file system-related logs. |\n| `backgroundTasks` | Logger category for background tasks-related logs. |\n| `scheduling` | Logger category for scheduling-related logs. |\n| `notifications` | Logger category for notifications-related logs. |\n| `timers` | Logger category for timers-related logs. |\n\n##### Testing and Validation\n\n| Logger Category | Description |\n| - | - |\n| `testing` | Logger category for testing-related logs. |\n| `unitTesting` | Logger category for unit testing-related logs. |\n| `integrationTesting` | Logger category for integration testing-related logs. |\n| `uiTesting` | Logger category for UI testing-related logs. |\n| `mocking` | Logger category for mocking-related logs. |\n| `stubbing` | Logger category for stubbing-related logs. |\n| `validation` | Logger category for validation-related logs. |\n\n##### UI and User Interaction\n\n| Logger Category | Description |\n| - | - |\n| `ui` | Logger category for UI-related logs. |\n| `gestures` | Logger category for gesture-related logs. |\n| `animations` | Logger category for animation-related logs. |\n| `transitions` | Logger category for transition-related logs. |\n| `accessibility` | Logger category for accessibility-related logs. |\n| `localization` | Logger category for localisation-related logs. |\n| `internationalization` | Logger category for internationalisation-related logs. |\n| `theming` | Logger category for theming-related logs. |\n| `styling` | Logger category for styling-related logs. |\n| `layout` | Logger category for layout-related logs. |\n| `rendering` | Logger category for rendering-related logs. |\n\n##### Utilities and Helpers\n\n| Logger Category | Description |\n| - | - |\n| `utils` | Logger category for utility-related logs. |\n| `extensions` | Logger category for extension-related logs. |\n| `helpers` | Logger category for helper-related logs. |\n| `factories` | Logger category for factory-related logs. |\n| `builders` | Logger category for builder-related logs. |\n| `commands` | Logger category for command-related logs. |\n| `handlers` | Logger category for handler-related logs. |\n| `middlewares` | Logger category for middleware-related logs. |\n| `interceptors` | Logger category for interceptor-related logs. |\n\n#### Custom Categories\n\nYou can define your own categories safely:\n\n```swift\nextension LoggerCategory {\n  static let payments = LoggerCategory(\"Payments\")\n}\n\nlet logger = Logger(category: .payments)\n```\n\nIf a duplicate category is registered at runtime (case-insensitive), `SimpleLogger` logs a warning automatically.\n\n### LoggerManager\n\n`LoggerManager` is the central observable object for fetching, filtering, and exporting logs.\n\n```swift\nimport SwiftUI\nimport SimpleLogger\n\n@main\nstruct MyApp: App {\n  @StateObject private var loggerManager = LoggerManager()\n\n  var body: some Scene {\n    WindowGroup {\n      ContentView()\n        .environment(loggerManager)\n    }\n  }\n}\n```\n\n### Filtering Logs\n\nFiltering is controlled by a filter kind plus associated state.\n\n#### Filter Kinds\n\n```swift\nloggerManager.kind = .specificDate\n```\n\nAvailable kinds:\n\n- `.specificDate`\n- `.dateRange`\n- `.hourRange`\n- `.preset`\n\n#### Specific Date\n\n```swift\nloggerManager.kind = .specificDate\nloggerManager.specificDate = Date()\n```\n\n#### Date Range\n\n```swift\nloggerManager.kind = .dateRange\nloggerManager.dateRangeStart = startDate\nloggerManager.dateRangeEnd = endDate\n```\n\n#### Hour Range\n\n```swift\nloggerManager.kind = .hourRange\nloggerManager.hourRangeDate = Date()\nloggerManager.hourRangeStartHour = 9\nloggerManager.hourRangeEndHour = 17\n```\n\n#### Presets\n\n```swift\nloggerManager.kind = .preset\nloggerManager.preset = .lastTwentyFourHours\n```\n\nPresets range from 5 minutes up to 1 year, grouped logically for UI presentation.\n\n### Log Levels\n\nYou can filter by severity:\n\n```swift\nloggerManager.levels = [.error, .fault]\n```\n\nAvailable levels:\n\n- `debug`\n- `info`\n- `notice`\n- `error`\n- `fault`\n\n### Fetching Logs\n\nFetching is explicit and cancellable.\n\n```swift\nloggerManager.fetch()\n```\n\nState exposed for UI:\n\n- `logs`\n- `isFetching`\n- `hasValidResults`\n- `lastError`\n\n### Exporting Logs\n\nExports are asynchronous and return `Result\u003cData, LoggerManagerError\u003e`.\n\nSupported Formats\n\n```text\n.log\n.json\n.jsonLines\n.csv(.comma | .semicolon | .tab | .pipe)\n.gzip(Format)\n```\n\n#### Example\n\n```swift\nlet result = await loggerManager.export(\n  format: .gzip(.jsonLines)\n)\n\nswitch result {\n  case .success(let data):\n    // write data to file\n  case .failure(let error):\n    print(error.localizedDescription)\n}\n```\n\n#### CSV Delimiters\n\n```text\n.csv(.semicolon)\n.csv(.tab)\n```\n\nAll CSV values are safely quoted and escaped.\n\n### Error Handling\n\nErrors are surfaced via `LoggerManagerError`:\n\n```swift\n.fetch(Error)\n.export(Error)\n```\n\nEach error provides a user-friendly `errorDescription`.\n\n## Contributing\n\nContributions are welcome! Please fork the repository and submit a pull request for any features, fixes, or improvements.\n\n## License\n\n`SimpleLogger` is available under the MIT license. See the LICENCE file for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkbattistella%2Fsimplelogger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarkbattistella%2Fsimplelogger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkbattistella%2Fsimplelogger/lists"}