{"id":32282880,"url":"https://github.com/unger1984/trackit","last_synced_at":"2026-05-14T13:38:53.584Z","repository":{"id":263094988,"uuid":"889338862","full_name":"unger1984/trackit","owner":"unger1984","description":"Lightweight modular logger for Dart and Flutter","archived":false,"fork":false,"pushed_at":"2026-02-12T18:36:01.000Z","size":902,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-13T16:17:34.532Z","etag":null,"topics":["dart","debug","error-handling","flutter","log","logger","logger-backend","loggerfactory","logging"],"latest_commit_sha":null,"homepage":"","language":"Dart","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/unger1984.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-11-16T05:37:15.000Z","updated_at":"2026-02-12T18:36:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"a5abb49f-baa2-47d4-aaa8-7cc272d48b3d","html_url":"https://github.com/unger1984/trackit","commit_stats":null,"previous_names":["unger1984/trackit"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/unger1984/trackit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unger1984%2Ftrackit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unger1984%2Ftrackit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unger1984%2Ftrackit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unger1984%2Ftrackit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/unger1984","download_url":"https://codeload.github.com/unger1984/trackit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unger1984%2Ftrackit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33027380,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"online","status_checked_at":"2026-05-14T02:00:06.663Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["dart","debug","error-handling","flutter","log","logger","logger-backend","loggerfactory","logging"],"created_at":"2025-10-23T01:07:42.892Z","updated_at":"2026-05-14T13:38:53.540Z","avatar_url":"https://github.com/unger1984.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/unger1984/trackit\"\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/unger1984/trackit/refs/heads/main/assets/logo.svg\" width=\"150\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\nLightweight modular logger for Dart and Flutter\n\u003c/p\u003e\n\n# TrackIt\n\nTrackit is a modular lightweight logger for Dart and Flutter applications. To achieve the functionality you need, you\u003c\ncan use ready-made modules described below, or write similar modules manually.\n\nThe Trackit logging system is designed with the DRY and KISS principles in mind. By adding only the packages you need\nto dependencies, you can eliminate unused code and functionality as much as possible.\n\nFor example, to output and format logs to the console or other, you can only connect the `trackit_console` package.\nIf you want to store the latest log entries in memory for further processing (displaying on the screen,\ntransferring from the tester to the developer, etc.), use the `trackit_history` package.\n\n## Packages\nTrackit is designed as a lightweight logger with the ability to expand and fully customize.\nBelow is a list of ready-made modules that can be used together with Trackit to obtain the necessary functionality.\nYou can use them as is, or expand them if necessary to suit your needs.\n\n| Package                                                                                    | Version                                                                                                                | Description                                                                                                                                                                                                                               | \n|--------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| [trackit](https://github.com/unger1984/trackit/tree/main/packages/trackit)                 | [![Pub](https://img.shields.io/pub/v/trackit.svg?style=flat-square)](https://pub.dev/packages/trackit)                 | The basic core of the logger, used as a dependency of all its extensions.\u003cbr\u003eIt cannot accumulate and output logs. In its pure form it should be used only as a base for extensions.                                                      |\n| [trackit_console](https://github.com/unger1984/trackit/tree/main/packages/trackit_console) | [![Pub](https://img.shields.io/pub/v/trackit_console.svg?style=flat-square)](https://pub.dev/packages/trackit_console) | Logger extension used to format and output logger events to the console.\u003cbr\u003e.                                                                                                                                                             |\n| [trackit_history](https://github.com/unger1984/trackit/tree/main/packages/trackit_history) | [![Pub](https://img.shields.io/pub/v/trackit_history.svg?style=flat-square)](https://pub.dev/packages/trackit_history) | Trackit logger extension for storing logs in memory.                                                                                                                                                                                      |\n\n## Table of contents\n\n- [Packages](#packages)\n- [Motivation](#motivation)\n- [How to use](#how-to-use)\n- [Full example](#full-example)\n- [RoadMap](#roadmap)\n\n## Motivation\n\nThe logging system is an auxiliary module. It should not be a combine and be able to do everything. The basic logger\nmodule should only be able to generate an event and send it further.\n\nTo display, process and collect logger events, it is necessary to use separate modules, which are necessary in each specific case.\n\nEach application has its own requirements for log processing. Some output them to the console, some send them to the\nerror collection system (Firebase Crashlytics, Sentry, etc), some display them in the interface, and perhaps all at the same time!\n\n\n## How to use\n\n* `trackit` - [README](packages/trackit/README.md)\n* `trackit_console` - [README](packages/trackit_console/README.md)\n* `trackit_history` - [README](packages/trackit_history/README.md)\n* [How to use with BLoC](#how-to-use-with-bloc)\n* [How to use with Riverpod](#how-to-use-with-reverpod)\n\n## Full example\n\nThe example code demonstrating the capabilities of the Trackit logger ecosystem can be viewed in the [example](example)\n\n\u003cimg src=\"https://raw.githubusercontent.com/unger1984/trackit/refs/heads/main/assets/screen3.png\" \u003e\n\n## RoadMap\n\n* ✅ Create full example app\n* ✅ Test it in real projects!\n* Write docs (and this README) (How use it with routing, blocs etc...)\n* ❗️ Create contributing rules\n* Add package for work with [Dio](https://pub.dev/packages/dio)\n* ... any more\n* Publish 1.0.0 version)\n\n### How to use with BLoC\n\nCreate observer: \n```dart\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:trackit/trackit.dart';\n\nclass AppBlocObserver extends BlocObserver {\n  static final _log = Trackit.create('BlocObserver');\n  static AppBlocObserver? _instance;\n\n  factory AppBlocObserver.instance() =\u003e _instance ??= const AppBlocObserver._();\n  const AppBlocObserver._();\n\n  @override\n  void onError(BlocBase\u003cdynamic\u003e bloc, Object error, StackTrace stackTrace) {\n    super.onError(bloc, error, stackTrace);\n    _log.error('Unhandled bloc exception', error, stackTrace);\n  }\n}\n```\n\nset it is BLoC observer:\n\n```dart\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nBloc.observer = AppBlocObserver.instance();\n```\n### How to use with Reverpod\n\nCreate observer:\n\n```dart\nimport 'package:riverpod/riverpod.dart';\nimport 'package:trackit/trackit.dart';\n\nclass RiverpodObserver extends ProviderObserver {\n  static final _log = Trackit.create('RiverpodObserver');\n\n  @override\n  void providerDidFail(\n    ProviderBase\u003cObject?\u003e provider,\n    Object error,\n    StackTrace stackTrace,\n    ProviderContainer container,\n  ) {\n    _log.error('Unhandled riverpod exception', error, stackTrace);\n  }\n\n  @override\n  void didUpdateProvider(\n    ProviderBase\u003cObject?\u003e provider,\n    Object? previousValue,\n    Object? newValue,\n    ProviderContainer container,\n  ) {\n    _log.debug(\n        '${provider.name ?? provider.runtimeType} provide new value $newValue');\n  }\n}\n```\n\nset it is Riverpod observer:\n\n```dart\nimport 'package:flutter/material.dart';\nimport 'package:riverpod/riverpod.dart';\n\nclass App extends StatelessWidget {\n  const App({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return ProviderScope(\n        observers: [RiverpodObserver()], \n        child: const MaterialApp(home: Home()),\n    );\n  }\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funger1984%2Ftrackit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Funger1984%2Ftrackit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funger1984%2Ftrackit/lists"}