{"id":13462707,"url":"https://github.com/immobiliare/Glider","last_synced_at":"2025-03-25T05:32:14.244Z","repository":{"id":37415133,"uuid":"480762653","full_name":"immobiliare/Glider","owner":"immobiliare","description":"✈️ Universal Logging - low overheaded simple \u0026 flexible for Swift (iOS, macOS, tvOS)","archived":false,"fork":false,"pushed_at":"2024-01-29T11:36:46.000Z","size":3715,"stargazers_count":57,"open_issues_count":1,"forks_count":6,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-10-29T21:06:16.704Z","etag":null,"topics":["logger","logging-library","swift","swiftui","swiftybeaver","winston-logger"],"latest_commit_sha":null,"homepage":"","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/immobiliare.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2022-04-12T10:34:34.000Z","updated_at":"2024-09-28T08:37:21.000Z","dependencies_parsed_at":"2024-07-05T17:35:33.093Z","dependency_job_id":"55572193-3185-4e09-b1c4-b847ebbc901f","html_url":"https://github.com/immobiliare/Glider","commit_stats":{"total_commits":324,"total_committers":2,"mean_commits":162.0,"dds":0.006172839506172867,"last_synced_commit":"d75104604bcb374116195ba7b64ba0d9332a9d8e"},"previous_names":["malcommac/glider"],"tags_count":42,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/immobiliare%2FGlider","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/immobiliare%2FGlider/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/immobiliare%2FGlider/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/immobiliare%2FGlider/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/immobiliare","download_url":"https://codeload.github.com/immobiliare/Glider/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245212183,"owners_count":20578440,"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":["logger","logging-library","swift","swiftui","swiftybeaver","winston-logger"],"created_at":"2024-07-31T13:00:19.223Z","updated_at":"2025-03-25T05:32:13.742Z","avatar_url":"https://github.com/immobiliare.png","language":"Swift","funding_links":[],"categories":["log"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"./Documentation/assets/glider-dark.png\" width=\"350\"\u003e\n  \u003cimg alt=\"logo-library\" src=\"./Documentation/assets/glider-light.png\" width=\"350\"\u003e\n\u003c/picture\u003e\n\u003c/p\u003e\n\n[![Swift](https://img.shields.io/badge/Swift-5.0_5.3_5.4_5.5_5.6_5.7-orange?style=flat-square)](https://img.shields.io/badge/Swift-5.3_5.4_5.5_5.6-Orange?style=flat-square)\n[![Platform](https://img.shields.io/badge/Platforms-iOS%20%7C%20macOS%20%7C%20tvOS%20%7C%20Linux-4E4E4E.svg?colorA=28a745)](#installation)\n[![Swift Package Manager](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat-square)](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat-square)\n[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/GliderLogger.svg?style=flat-square)](https://img.shields.io/cocoapods/v/GliderLogger.svg)\n\n**Glider is the logger for just about everything!**\nIt's designed to be:\n- **SIMPLE**: with a modular \u0026 extensible architecture, fully documented\n- **PERFORMANT**: you can use Glider without the worry of impacting your app performances\n- **UNIVERSAL**: it supports 14+ transports to satisfy every need; you can create your transport too!\n\n# Why logging?\n\nLogging and monitoring are fundamental parts of our job as engineers.  \nEspecially in the mobile world (with very heterogeneous environments), you'll often find yourself in a situation where understanding how your software behaves in production is essential.\n\nThat's the right job for logging: logged data provide valuable information that would be difficult to gather otherwise, unveil unexpected behaviors and bugs, and even if the data was adequately anonymized, identify the sequences of actions of singular users.\n\n# Feature highlights\n\nWe loved making this open-source package and would see engineers like you using this software.  \nThose are five reasons you will love Glider:\n\n- 🧩 14+ built-in, fully customizable transports to store your data ([ELK](https://github.com/immobiliare/Glider-ELK), [HTTP](https://github.com/immobiliare/Glider/tree/main/Glider/Sources/Transports/HTTPTransport), [Logstash](https://github.com/immobiliare/Glider/tree/main/Glider/Sources/Transports/LogstashTransport), [SQLite](https://github.com/immobiliare/Glider/tree/main/Glider/Sources/Transports/SQLiteTransport), [WebSocket](https://github.com/immobiliare/Glider/tree/main/Glider/Sources/Transports/WebSocketTransport), [Console](https://github.com/immobiliare/Glider/tree/main/Glider/Sources/Transports/Console), [File/Rotating Files](https://github.com/immobiliare/Glider/tree/main/Glider/Sources/Transports/File), [POSIX](https://github.com/immobiliare/Glider/tree/main/Glider/Sources/Transports/File/POSIXTransports), [swift-log](https://github.com/immobiliare/Glider-AppleSwiftLog), [sentry.io](https://github.com/immobiliare/Glider-Sentry)...)\n- ✏️ 7+ customizable formatters for log messages ([JSON](https://github.com/immobiliare/Glider/tree/main/Glider/Sources/Formatters/JSONFormatter), [Fields based](https://github.com/immobiliare/Glider/tree/main/Glider/Sources/Formatters/FieldsFormatter)), [MsgPack](https://github.com/immobiliare/Glider/tree/main/Glider/Sources/Formatters/MsgPackFormatter), [Syslog](https://github.com/malcommac/Glider/tree/main/Glider/Sources/Formatters/SysLogFormatter))...)\n- 🚀 A simple API set with an extensible architecture to suit your need\n- 📚 A fully documented code via Apple's DocC ([link](https://swiftpackageindex.com/immobiliare/Glider))\n- ⚙️ An extensive unit test suite\n  \n# What you get\n\nCreating a logger is simple.  \nEach logger is an instance of the `Log` class; typically, you need to specify one or more transports (where the data is stored).\n\n```swift\nlet logger = Log {\n  $0.subsystem = \"com.my-awesome-app\"\n  $0.category = \"ui-events\"\n  $0.level = .info\n  $0.transports = [ConsoleTransport()]\n}\n```\n\nThe following logger shows received messages - only warning or more severe - in the console.\n\n```swift\n// Logs an error (including stack trace)\nlogger.error?.write(\"Unexpected error has occurred!\", \n                    extra: [\"reason\": error.localizedDescription, \"info\": extraInfoDict])\n\n// Logs an event with a set of attached details\nlogger.info?.write {\n  $0.message = \"User tapped Buy button\"\n  $0.object = encodableProduct\n  $0.extra = [\"price\": price, \"currency\": currency]\n  $0.tags = [\"productId\", pID]\n}\n```\n\n## Transports\n\nThis the list of transport services officially supported.  \nThird party transports are available into the following separate repositories:\n\n- [Glider-ELK](https://github.com/immobiliare/Glider-ELK): library provides a logging transport for glider and [ELK](https://www.elastic.co/elastic-stack?ultron=B-Stack-Trials-EMEA-S-Exact\u0026gambit=Stack-ELK\u0026blade=adwords-s\u0026hulk=paid\u0026Device=c\u0026thor=elk%20stack\u0026gclid=Cj0KCQjwjIKYBhC6ARIsAGEds-I1kAzd4o5RdmCR0U4yXPL4QFQXBCn1bRn-MjwZV0fkSXuFIIJ6VcwaAo1AEALw_wcB) stacks.\n- [Glider-Sentry](https://github.com/immobiliare/Glider-Sentry): provides support to post log on [sentry.io](https://sentry.io/welcome/) instances using the native swift sdk.\n- [Glider-AppleSwiftLog](https://github.com/immobiliare/Glider-AppleSwiftLog) can also work as a backend for [apple/swift-log](https://github.com/apple/swift-log/).\n\nA separate transport is able to capture automatically every network request and forward to other transports:\n\n- [Glider-NetWatcher](https://github.com/immobiliare/Glider-NetWatcher) offers the ability to capture your app's network traffic (including requests/responses) and redirect them to a specific transport.\n\n\u003cp align=\"center\"\u003e\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"./Documentation/assets/transports-list-dark.png\" width=\"840\"\u003e\n  \u003cimg alt=\"logo-library\" src=\"./Documentation/assets/transports-list-light.png\" width=\"840\"\u003e\n\u003c/picture\u003e\n\u003c/p\u003e\n\n## APIs\n\nGlider is fully documented at source-code level. You'll get autocomplete with doc inside XCode for free; moreover, you can read the full Apple's DoCC Documentation automatically generated by [**Swift Package Index**](https://swiftpackageindex.com) project from here:\n\n👉 [API REFERENCE](https://swiftpackageindex.com/immobiliare/Glider/main/documentation/glider)  \n👉 [PROJECT PAGE](https://swiftpackageindex.com/immobiliare/Glider)\n\n# Guide\n\nThe following manual will guide you through using Glider for your project.\n## Introduction\n\n- [The Logger](./Documentation/Logger.md#the-logger)\n- [Writing messages](./Documentation/Logger.md#writing-messages)\n  - [Writing simple messages](./Documentation/Logger.md#writing-simple-messages)\n  - [Writing messages using closures](./Documentation/Logger.md#writing-messages-using-closures)\n  - [Writing message by passing `Event`](./Documentation/Logger.md#writing-message-by-passing-event)\n- [Message text composition](./Documentation/Logger.md#message-text-composition)\n- [Disabling a Logger](./Documentation/Logger.md#disabling-a-logger)\n- [Severity Levels](#severity-levels)\n- [Synchronous and Asynchronous Logging](./Documentation/Logger.md#synchronous-and-asynchronous-logging)\n  - [Synchronous Logging](./Documentation/Logger.md#synchronous-logging)\n  - [Asynchronous Logging](./Documentation/Logger.md#asynchronous-logging)\n\n## Event Formatters\n\n- [Formatters](./Documentation/Formatters.md#formatters)\n- [Archiving](./Documentation/Formatters.md#archiving)\n  - [FieldsFormatter](./Documentation/Formatters.md#fieldsformatter)\n  - [JSONFormatter](./Documentation/Formatters.md#jsonformatter)\n  - [MsgPackDataFormatter](./Documentation/Formatters.md#msgpackdataformatter)\n- [User Display (Console/Terminals)](./Documentation/Formatters.md#user-display-consoleterminals)\n  - [TableFormatter](./Documentation/Formatters.md#tableformatter)\n  - [TerminalFormatter](./Documentation/Formatters.md#terminalformatter)\n  - [XCodeFormatter](./Documentation/Formatters.md#xcodeformatter)\n  - [SysLogFormatter](./Documentation/Formatters.md#syslogformatter)\n\n## Data Transports\n\n- [Transports](./Documentation/Transports.md#transports)\n  - [Introduction](./Documentation/Transports.md#introduction)\n  - [Base Transports](./Documentation/Transports.md#base-transports)\n    - [AsyncTransport](./Documentation/Transports.md#asynctransport)\n    - [BufferedTransport](./Documentation/Transports.md#bufferedtransport)\n    - [ThrottledTransport](./Documentation/Transports.md#throttledtransport)\n- [Built-in Transports](./Documentation/Transports.md#built-in-transports)\n  - [ConsoleTransport](./Documentation/Transports.md#consoletransport)\n  - [OSLogTransport](./Documentation/Transports.md#oslogtransport)\n  - [POSIXStreamTransport](./Documentation/Transports.md#posixstreamtransport)\n  - [FileTransport](./Documentation/Transports.md#filetransport)\n  - [SizeRotationFileTransport](./Documentation/Transports.md#sizerotationfiletransport)\n  - [HTTPTransport](./Documentation/Transports.md#httptransport)\n  - [RemoteTransport](./Documentation/Transports.md#remotetransport)\n    - [RemoteTransportServer](./Documentation/Transports.md#remotetransportserver)\n  - [SQLiteTransport](./Documentation/Transports.md#sqlitetransport)\n  - [WebSocketTransport](./Documentation/Transports.md#websockettransport)\n    - [WebSocketTransportClient](./Documentation/Transports.md#websockettransportclient)\n    - [WebSocketTransportServer](./Documentation/Transports.md#websockettransportserver)\n\n# Test Suite\n\nGlider offers an extensive suite of unit tests for Glider Core Logger and third-party packages under the `/Tests` folder.\n\nMoreover, the entire package is powered by [SwiftLint](https://github.com/realm/SwiftLint) for better code quality.\n\n# Contribute\n\nIf you want to join this project, we're maintaining a list of new features we would like to implement into the following versions of Glider. \nPlease open an issue and discuss one of them with us!\n\n- [ ] GliderViewer: a macOS, iPad \u0026 iPhone app to view and interact with logged data\n- [ ] New Transports: we would like to extend the list of supported transports; feel free to propose your third-party transports\n- [ ] Increment our code coverage by writing more tests\n\n# Requirements\n\nGlider can be installed on any platform which supports:\n\n- Swift 5.0\n- iOS 10, macOS 10.14, macCatalyst, tvOS 13\n- Xcode 13.2\n\n\u003e NOTE:\n\u003e The following transports require newer OSs versions (iOS 13+, tvOS 13+ and macOS 10.15+):\n\u003e RemoteTransportServer, RemoteTransportServerClient\n\n# Installation\n\nOur preferred installation method is SPM but we're still support CocoaPods.\n\n## Swift Package Manager\n\nThe Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler. It is in early development, but Glider does support its use on supported platforms.\n\nOnce you have your Swift package set up, adding Glider as a dependency is as easy as adding it to the dependencies value of your `Package.swift`.\n\n```swift\ndependencies: [\n    .package(url: \"https://github.com/immobiliare/Glider.git\")\n]\n```\n\nManifest also includes third-party packages for other transports, like ELK or Sentry.  \nThe Glider core SDK is the `Glider` package.\n\n## CocoaPods\n\nCocoaPods is a dependency manager for Cocoa projects.  \nTo integrate Glider into your project, specify it in your Podfile:\n\n```ruby\nsource 'https://github.com/CocoaPods/Specs.git'\nuse_frameworks!\n\npod 'GliderLogger'\n```\n\n## Powered Apps\n\nGlider was created by the amazing mobile team at [ImmobiliareLabs](http://labs.immobiliare.it), the Tech dept at Immobiliare.it.\nWe are currently using Glider for logging in to all of our products.\n\n**If you are using Glider in your app [drop us a message](mailto:mobile@immobiliare.it)**\n## Support \u0026 Contribute\n\nMade with ❤️ by [ImmobiliareLabs](https://github.com/orgs/immobiliare) \u0026 [Contributors](https://github.com/immobiliare/Glider/graphs/contributors)\n\nWe'd love for you to contribute to Glider!  \nIf you have questions on using Glider, bugs, and enhancement, please feel free to reach out by opening a [GitHub Issue](https://github.com/immobiliare/Glider/issues).\n\n\u003ca href=\"http://labs.immobiliare.it\"\u003e\u003cimg src=\"./Documentation/assets/immobiliarelabs.png\" alt=\"Indomio\" width=\"200\"/\u003e\u003c/a\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimmobiliare%2FGlider","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimmobiliare%2FGlider","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimmobiliare%2FGlider/lists"}