{"id":18055319,"url":"https://github.com/analogfeelings/matcha","last_synced_at":"2025-06-13T19:36:58.390Z","repository":{"id":49980036,"uuid":"489676522","full_name":"AnalogFeelings/Matcha","owner":"AnalogFeelings","description":"A simple but neat logging library for C#, with no dependencies.","archived":false,"fork":false,"pushed_at":"2025-03-27T01:52:59.000Z","size":235,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-12T17:05:35.801Z","etag":null,"topics":["csharp","csharp-library","dotnet","dotnet7","example-code","example-project","extensible","library","lightweight","logger","logging","logging-library","mit-license","modular","net70","no-dependencies","zero-dependencies"],"latest_commit_sha":null,"homepage":"https://www.nuget.org/packages/AnalogFeelings.Matcha/","language":"C#","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/AnalogFeelings.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2022-05-07T13:09:17.000Z","updated_at":"2025-03-27T01:53:03.000Z","dependencies_parsed_at":"2025-04-10T23:13:42.424Z","dependency_job_id":"04c46e3b-c9ed-4e30-8c63-9ccdbd345de6","html_url":"https://github.com/AnalogFeelings/Matcha","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/AnalogFeelings/Matcha","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnalogFeelings%2FMatcha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnalogFeelings%2FMatcha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnalogFeelings%2FMatcha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnalogFeelings%2FMatcha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AnalogFeelings","download_url":"https://codeload.github.com/AnalogFeelings/Matcha/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnalogFeelings%2FMatcha/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259509428,"owners_count":22868834,"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":["csharp","csharp-library","dotnet","dotnet7","example-code","example-project","extensible","library","lightweight","logger","logging","logging-library","mit-license","modular","net70","no-dependencies","zero-dependencies"],"created_at":"2024-10-31T00:14:34.407Z","updated_at":"2025-06-13T19:36:58.365Z","avatar_url":"https://github.com/AnalogFeelings.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"/Branding/matcha.png\" width=\"128\" height=\"128\"/\u003e\n\n# :tea: Matcha\n\n[![GitHub issues](https://img.shields.io/github/issues/analogfeelings/matcha?label=Issues\u0026style=flat-square)](https://github.com/AnalogFeelings/Matcha/issues)\n[![GitHub Issues or Pull Requests](https://img.shields.io/github/issues-pr/analogfeelings/matcha?style=flat-square\u0026label=Pull%20Requests)](https://github.com/AnalogFeelings/Matcha/pulls)\n[![GitHub Repo stars](https://img.shields.io/github/stars/analogfeelings/matcha?label=Stargazers\u0026style=flat-square)](https://github.com/AnalogFeelings/Matcha/stargazers)\n[![GitHub](https://img.shields.io/github/license/analogfeelings/matcha?label=License\u0026style=flat-square)](https://github.com/AnalogFeelings/Matcha/blob/master/LICENSE.txt)\n[![GitHub commit activity](https://img.shields.io/github/commit-activity/w/analogfeelings/matcha?label=Commit%20Activity\u0026style=flat-square)](https://github.com/AnalogFeelings/Matcha/graphs/commit-activity)\n[![NuGet Downloads](https://img.shields.io/nuget/dt/AnalogFeelings.Matcha?logo=nuget\u0026label=NuGet\u0026color=004880\u0026style=flat-square)](https://www.nuget.org/packages/AnalogFeelings.Matcha/)\n[![Mastodon Follow](https://img.shields.io/mastodon/follow/109309123442839534?domain=https%3A%2F%2Ftech.lgbt%2F\u0026style=flat-square\u0026logo=mastodon\u0026logoColor=white\u0026label=Follow%20Me!\u0026color=6364ff)](https://tech.lgbt/@analog_feelings)\n\nA simple but neat logging library for .NET 7.0 and higher. It includes XML documentation!\n\nThe library is built with extensibility in mind, by adding a \"sink\" system where each `Log` call is sent to all sinks for processing instead of centralizing\neverything into the main logger class.\n\nIt comes with 3 default logging sinks:\n- Console\n- Debugger\n- File\n\n\u003e [!IMPORTANT]\n\u003e All of the built-in sinks are thread-safe, but the library doesn't enforce this. Use third party sinks with caution!\n\n## :thinking: Usage\nCreate the needed sinks and their configurations and pass them to the constructor to `MatchaLogger`.  \nAdding or removing sinks at runtime is not allowed, but this may change in a future release.\n\nYou may change a sink's configuration at runtime by keeping a reference to it.  \nMatcha will automatically dispose any sinks that implement `IDisposable` when Matcha itself is disposed.\n\n## :paintbrush: Custom Sinks\nCreating a custom sink requires you to implement `IMatchaSink\u003cout T\u003e`, where `T` may be any\nclass, record or struct that inherits from `SinkConfig`.\n\n`WriteLogAsync` may be marked as async, and the sink can optionally also implement `IDisposable` if it\nhas resources that need to be disposed.\n\n\u003e [!TIP]\n\u003e Implement a `SemaphoreSlim` for thread safety, and release it inside a `finally` block.\n\u003e This will prevent deadlocks if an error occurs during logging.\n\n\u003e [!TIP]\n\u003e Matcha exposes the method used to generate the newline indentation strings, just use the\n\u003e `Common` class and you'll find it!\n\n## :inbox_tray: Downloads\nYou can find this package in [NuGet](https://www.nuget.org/packages/MatchaLogger/).\n\nAlternatively, you could download it from the [releases](https://github.com/AnalogFeelings/Matcha/releases/latest) page.\n\n# :balance_scale: License\nLicensed under the MIT License. You can read it [here](LICENSE.txt).\n\n\u003e [!WARNING]  \n\u003e THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanalogfeelings%2Fmatcha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanalogfeelings%2Fmatcha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanalogfeelings%2Fmatcha/lists"}