# CSV Metrics Logger This is a simple CSV metrics logger that logs metrics to a CSV file. It is designed to be used in a multithreaded environment. Here is an example of how to use it: ```csharp using CSV_Metrics_Logger; [CSVRecord] public readonly partial record struct TestData(string Name, sbyte Age); List testData = [ new TestData("Name 1", 14), new TestData("Name 2", 25), new TestData("Name 3", 36), new TestData("Name 4", 47), new TestData("Name 5", 58), ]; var filename = Path.GetTempFileName(); await using var storage = CSVStorage.Create(fileName); foreach (var data in testData) storage.Write(data); ``` You might use `storage.Write` from multiple threads. The logger will handle the synchronization for you. CSV Metrics Logger uses a source generator. You have to use the following NuGet packages: ```xml ``` Your data must be modeled as a structure; classes are not supported. It does not matter if you are using a (readonly) record struct or a regular struct. The only requirement is that the struct must be a partial struct. The source generator will generate the missing part of the struct for you. Each public property will be used as a column in the CSV file. The property type might be any type, as long as it supports the `ToString(CultureInfo)` method. For each data structure, you create a CSVStorage instance. The CSVStorage instance is a disposable object. You must dispose of it when you are done with it. When the CSV file already exists, the CSVStorage object will append data to the existing file; the header will not be written again.