{"id":26748321,"url":"https://github.com/nwestfall/overlogger","last_synced_at":"2026-04-18T06:33:27.270Z","repository":{"id":71019324,"uuid":"163681842","full_name":"nwestfall/Overlogger","owner":"nwestfall","description":"Switch or migrate logging services without rewriting all your code","archived":false,"fork":false,"pushed_at":"2018-12-31T20:02:56.000Z","size":19,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-02T23:47:13.854Z","etag":null,"topics":["android","appcenter","bugsnag","console","dotnet","ios","logging","logging-library","netstandard","xamarin"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nwestfall.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,"zenodo":null}},"created_at":"2018-12-31T16:09:32.000Z","updated_at":"2020-05-30T06:33:33.000Z","dependencies_parsed_at":"2023-03-13T08:15:37.297Z","dependency_job_id":null,"html_url":"https://github.com/nwestfall/Overlogger","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/nwestfall/Overlogger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nwestfall%2FOverlogger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nwestfall%2FOverlogger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nwestfall%2FOverlogger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nwestfall%2FOverlogger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nwestfall","download_url":"https://codeload.github.com/nwestfall/Overlogger/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nwestfall%2FOverlogger/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31959880,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"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":["android","appcenter","bugsnag","console","dotnet","ios","logging","logging-library","netstandard","xamarin"],"created_at":"2025-03-28T10:17:25.111Z","updated_at":"2026-04-18T06:33:27.262Z","avatar_url":"https://github.com/nwestfall.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Overlogger\n\n[![Build Status](https://dev.azure.com/nathanwestfall/Overlogger/_apis/build/status/Overlogger-CI?branchName=master)](https://dev.azure.com/nathanwestfall/Overlogger/_build/latest?definitionId=16?branchName=master)\n[![CodeFactor](https://www.codefactor.io/repository/github/nwestfall/overlogger/badge)](https://www.codefactor.io/repository/github/nwestfall/overlogger)\n\nLogging is something that every application needs, but it shouldn't be a burden to change analytic/crash providers.  Write your app once with overlogger and then switch out providers on the fly.\n\n## Why did I make this?\nBeing an Xamarin developer and going from Xamarin Insights, to HockeyApp, and then to App Center I got tired having to rewrite my logging logic each time I was forced to change.  This library lets me write it once and then log to one or more than one provider at a time!\n\n## Supported Platforms\n - NETStandard 2.0\n - iOS (10+)\n - Android (4.4+)\n\n## Available Nuget Packages\n - Overlogger [![NuGet](https://img.shields.io/nuget/v/Overlogger.svg?label=NuGet)](https://www.nuget.org/packages/Overlogger/)\n - Overlogger.AppCenter [![NuGet](https://img.shields.io/nuget/v/Overlogger.AppCenter.svg?label=NuGet)](https://www.nuget.org/packages/Overlogger.AppCenter/)\n - Overlogger.BugSnag [![NuGet](https://img.shields.io/nuget/v/Overlogger.BugSnag.svg?label=NuGet)](https://www.nuget.org/packages/Overlogger.BugSnag/)\n - Overlogger.Console [![NuGet](https://img.shields.io/nuget/v/Overlogger.Console.svg?label=NuGet)](https://www.nuget.org/packages/Overlogger.Console/)\n\n\n## How does it work\n\nSimple.  First, pick which provider you want to use.  We currently support\n - [App Center](https://appcenter.ms)\n - [Bugsnag](https://www.bugsnag.com)\n - Console\n - More to come (create an issue!)\n  \nIf you don't want to wait for me to create one, just implement `IReporter` on your own class.\n\n#### Add a Reporter\n```c#\nvar appCenterReporter = new AppCenterReporter(\"MY-KEY\");\nLogger.AddCrashReporter(appCenterReporter);\n```\nThat's it.  If you want to add another, just do the it twice!\n```c#\nvar appCenterReporter = new AppCenterReporter(\"MY-KEY\");\nvar bugSnagReporter = new BugSnagReporter(\"MY-KEY\");\nLogger.AddCrashReporter(appCenterReporter);\nLogger.AddCrashReporter(bugSnagReporter);\n```\n#### Start Logging\n\nOnce a reporter is added, start logging away!  Or if you start logging before a reporter is added, we'll keep track of that and then send the logs once a reporter is added.\n```c#\nLogger.Log(LogLevel.Info, \"My Message\");\nLogger.Log(LogLevel.Info, \"My Message\", \"MY-TAG\");\nLogger.Log(LogLevel.Error, \"My Error\", new Exception(\"My Exception\"));\nLogger.Log(LogLevel.Error, \"My Error\", new Exception(\"My Exception\"), \"MY-TAG\");\n```\nYou can even track events if the reporter supports it (most do)\n```c#\nLogger.TrackEvent(\"My Custom Event\");\nLogger.TrackEvent(\"My Custom Event\", new Dictionary\u003cstring, string\u003e() { \"My Property\", \"My Value\" });\n```\n\n#### Change the minimum log level\n\nIf you don't want logs below a certain level to be reported, we'll take care of that for you too!  Just pass the log level to either all reporters or just a specific one.\n\n```c#\nLogger.SetLogLevel(LogLevel.Warn); // For all reporters\nLogger.SetLogLevelForReporter\u003cAppCenterReporter\u003e(LogLevel.Error); // Just the App Center Reporter\n```\n\n#### Remove a Reporter\n\nIf you want to remove a reporter, just pass the `Type`\n```c#\nLogger.RemoveCrashReporter\u003cAppCenterReporter\u003e();\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnwestfall%2Foverlogger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnwestfall%2Foverlogger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnwestfall%2Foverlogger/lists"}