Communicate.Archeo 0.3.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Communicate.Archeo --version 0.3.0
NuGet\Install-Package Communicate.Archeo -Version 0.3.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Communicate.Archeo" Version="0.3.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Communicate.Archeo --version 0.3.0
#r "nuget: Communicate.Archeo, 0.3.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Communicate.Archeo as a Cake Addin
#addin nuget:?package=Communicate.Archeo&version=0.3.0

// Install Communicate.Archeo as a Cake Tool
#tool nuget:?package=Communicate.Archeo&version=0.3.0

Usage

This nuget package supports dependency injection and currently requires .net cores HttpClientFactory (a version using the old HttpClient is on the docket, as well as a version using the built in Microsoft log framework). You also need to define a IBackupLogger that logs failures when the primary logging fails. Let's begin with the IBackupLogger:

    public class BackupLogger : IBackupLogger
    {
        private string AiKey { get; set; }

        private TelemetryClient telemetryClient;

        public BackupLogger()
        {
            AiKey = Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY", EnvironmentVariableTarget.Process);
            telemetryClient = new TelemetryClient() { InstrumentationKey = AiKey };
        }

        public void LogInformation(string log)
        {
            var evt = new EventTelemetry(log);
            telemetryClient.TrackEvent(evt);
        }

        public void LogError(string message, List<LogStep> logSteps)
        {
            telemetryClient.TrackTrace(message, new Dictionary<string, string>() { { "Logstep object", JsonConvert.SerializeObject(logSteps) } });
        }

        public void LogException(Exception e, List<LogStep> logSteps)
        {
            telemetryClient.TrackException(e, new Dictionary<string, string>() { { "Logstep object", JsonConvert.SerializeObject(logSteps) } });
        }
    }

This is a simple backup logger that uses Application Insights. As long as you override the required methods you can use any backup logger you want to.

Using DI

In your startup.cs you need to declare a HttpClient. You can name it whatever you want but a default name is supplied in the ArcheoDefaults constants class:

            services.AddHttpClient(ArcheoDefaults.HttpClientName, client =>
            {
                client.BaseAddress = new Uri(ArcheoDefaults.ArcheoEndpoint);
                client.DefaultRequestHeaders.Add("APIKEY", GetAppSetting("ArcheoApiKey"));
            });

You also need to add the IArcheLogger itself as a scoped service. You can use dependency injection to insert both the IHttpFactory and the IBackupLogger or you can supply them explicitly:

      services.AddScoped<IArcheoLogger>(sp => new ArcheoLogger(sp.GetService<IHttpClientFactory>(), new BackupLogger()));
      Or
      services.AddScoped<IBackupLogger, BackupLogger>();
      services.AddScoped<IArcheoLogger, ArcheoLogger>();

Setting up the logger

To avoid having to send every parameter every time you use the logger this nuget provides the Arche.LogBase object. This object is used if parameters supplied on logging are null. The LogBase should be instantiated as early in the pipeline as possible. You simply set the object like this:

            logger.LogBase = new ArcheoLogBase()
            {
                MessageType = messageType,
                Reciever = partyConfig.ReceiverId,
                Sender = partyConfig.SenderId,
                TransactionId = transactionId,
                TransactionTag = transactionTag,
                TransactionType = partyConfig.DocumentType
            };

Logging

If you set up the LogBase you only need 2-3 parameters when logging. If you need to override any of the LogBase params on only a single log entry just supply the parameter. This nuget provides 4 logging methods as of now. Please see the code comments for details. Here are some simple examples that only work if LogBase is used:

archeo.LogException((Exception)e, $"Exception occured in {nameof(test)}");
archeo.LogHttpFailure((HttpResponseMessage)result, "Sending file to APIM failed");
archeo.LogSuccess(encoding.GetBytes(fileContent), "File successfully downloaded", $"file.file");
archeo.LogFailure(fileContent, "Something failed")

Sending logs

After logging you share of logs you need to call await archeo.SendLogs(). This is usually done in the finallyclause in the catch all, but you are free to do this whenever you want. When logs are sent the list of logged steps is cleared but the LogBase is kept in case you want to log more withing the same scope. If you want to clear both objects you can call IArcheoLogger.Clear()

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Communicate.Archeo:

Package Downloads
Communicate.Archeo.BackupLogger.ApplicationInsights

Backup logger that uses Application insights as the logging provider

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.2.5 6,220 4/1/2022
1.2.4 3,815 3/24/2021
1.2.3 4,467 9/8/2020
1.2.2 703 8/14/2020
1.2.1 675 8/5/2020
1.2.0 848 3/26/2020
1.1.8 1,427 1/21/2020
1.1.7 1,769 11/15/2019
1.1.6 719 11/4/2019
1.1.5 751 10/30/2019
1.1.4 2,548 10/30/2019
1.1.3 545 10/29/2019
1.1.2 609 10/29/2019
1.1.1 526 10/23/2019
1.1.0 549 10/18/2019
1.0.19 1,284 7/26/2019
1.0.18 649 6/18/2019
1.0.17 563 6/18/2019
1.0.16 528 6/17/2019
1.0.15 574 6/14/2019
1.0.14 672 6/7/2019
1.0.13 626 5/6/2019
1.0.12 660 4/24/2019
1.0.11 624 4/24/2019
1.0.10 643 4/24/2019
1.0.9 633 3/27/2019
1.0.8 581 3/26/2019
1.0.7 589 3/26/2019
1.0.6 578 3/26/2019
1.0.5 586 3/25/2019
1.0.4 579 3/25/2019
1.0.3 621 3/22/2019
1.0.2 594 3/21/2019
1.0.1 2,392 2/21/2019
0.4.1 849 2/20/2019
0.4.0 688 2/13/2019
0.3.7 705 12/28/2018
0.3.6 678 12/28/2018
0.3.5 735 12/28/2018
0.3.4 798 10/30/2018
0.3.3 727 10/30/2018
0.3.2 775 10/29/2018
0.3.1 773 10/25/2018
0.3.0 760 10/23/2018
0.2.5 740 10/19/2018
0.2.4 731 10/19/2018
0.2.3 792 10/12/2018
0.2.2 759 10/12/2018
0.2.1 763 10/12/2018
0.2.0 788 10/12/2018
0.1.7 746 10/12/2018
0.1.6 757 10/11/2018
0.1.5 797 10/11/2018
0.1.4 765 10/11/2018
0.1.3 765 10/11/2018
0.1.2 783 10/11/2018
0.1.1 764 10/11/2018
0.1.0 777 10/11/2018