Segugio 1.0.1

dotnet add package Segugio --version 1.0.1
                    
NuGet\Install-Package Segugio -Version 1.0.1
                    
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="Segugio" Version="1.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Segugio" Version="1.0.1" />
                    
Directory.Packages.props
<PackageReference Include="Segugio" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Segugio --version 1.0.1
                    
#r "nuget: Segugio, 1.0.1"
                    
#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.
#addin nuget:?package=Segugio&version=1.0.1
                    
Install Segugio as a Cake Addin
#tool nuget:?package=Segugio&version=1.0.1
                    
Install Segugio as a Cake Tool

Segugio

Segugio è una libreria per la gestione del sistema di audit in progetti .NET. Consente di configurare facilmente provider di audit e raccogliere informazioni di log dettagliate: indirizzi IP, sessioni, route HTTP, e molto altro. La libreria supporta un'architettura flessibile e altamente estendibile.


Caratteristiche

  • Modulare: Configura facilmente diversi provider di audit.
  • Flessibile: Supporta audit per database, Serilog, file di log, ecc.
  • Integrabile: Pensato per essere incluso in qualsiasi progetto .NET.
  • Personalizzabile: Pienamente estendibile per adattarsi a qualsiasi esigenza di logging.

Installazione

Puoi installare Segugio direttamente dal Package Manager Console usando il comando:

Install-Package Segugio

Oppure aggiungendolo nel file .csproj:

<PackageReference Include="Segugio" Version="1.0.0" />

Configurazione

Passaggi principali

  1. Implementa l'interfaccia IContestoAudit per configurare informazioni contestuali dell'applicazione (indirizzo IP, ID sessione, dati di routing, ID utente, ruolo).
  2. Usa uno dei provider già inclusi nella libreria.
  3. Crea uno o più provider derivando dall'interfaccia ISegugioProvider per salvare i dati audit nel supporto desiderato.

Esempio di utilizzo

1. Creazione del contesto di audit

public class ContestoAudit : IContestoAudit
{
    private readonly IHttpContextAccessor _httpContextAccessor;
    public ContestoApplicativo(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public string GetCustomAttribute(string attributeName)
    {
        return attributeName switch
        {
            "IpAddress" => _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress?.ToString() ?? "",
            "RoutePath" => JsonSerializer.Serialize(_httpContextAccessor.HttpContext?.GetRouteData()??new RouteData()),
            "QueryPath" => $"{_httpContextAccessor.HttpContext?.GetRouteData().Values["controller"]}/{_httpContextAccessor.HttpContext?.GetRouteData().Values["action"]}",
            _ => ""
        };
    }
}

2. Uso di un provider già incluso nella libreria

Ad esempio, puoi configurare i due già previsti così:

    new SqlServerProvider(
        new AuditTableConfiguration(connectionString,"AuditTableSchema","AuditTableName","IdField","EntityDataJSonField","LastUpdateField",
            new List<KeyValuePair<string, string>>
            {
                new KeyValuePair<string, string>("IpAddressField", "IpAddress"),
                new KeyValuePair<string, string>("RouteDataField", "RoutePath"),
                new KeyValuePair<string, string>("UserNameField", "UserName"),
                new KeyValuePair<string, string>("UserRoleField", "Role")
            },
            ISegugioProvider.LogTypes.Console
        )
    ),
    new SerilogProvider(new QradarConfiguration("serverSerilog", "port", ISegugioProvider.LogTypes.Console))

Puoi decidere inoltre il comportamento che deve avere il sistema di Audit per supportarti nello sviluppo impostando per ogni provider la modalità di log e gestione eventuali anomalie:

  • ISegugioProvider.LogTypes.None: opzione di default, non scrive niente in console ed in caso di mancata registrazione sul provider di Audit non solleva eccezioni.
  • ISegugioProvider.LogTypes.Console: Scrive in console messaggi di successo per registrazione dell'audit da parte del provider ed in caso di mancata registrazione scrive il problema in console senza sollevare eccezioni.
  • ISegugioProvider.LogTypes.Exception: Non scrive nessun messaggio in console e nel caso di mancata registrazione dell'audit solleva un'eccezione di tipo SegugioException.

3. Creazione di un nuovo provider

Ad esempio, creare un nuovo provider per Serilog così:

public class SerilogProvider : ISegugioProvider
{
    public string ServerAddress { get; set; } = "127.0.0.1";
    public string ServerPort { get; set; } = "514";

    public AuditDataProvider GetAuditProvider(IContestoAudit contesto, IUtenteAudit utente)
    {
        var serilogProvider = new DynamicDataProvider(config =>
        {
            config.OnInsert(ev =>
            {
                var logger = new LoggerConfiguration()
                    .WriteTo.TCPSink($"tcp://{ServerAddress}:{ServerPort}")
                    .CreateLogger();

                logger.Information($"Log {ev.EventType}");
            });
        });
        return serilogProvider;
    }
    
    public ISegugioProvider.LogTypes LogType => ISegugioProvider.LogTypes.None;
}

4. Setup del sistema di audit

Connetti tutto alla classe SegugioAuditor e configura il sistema:

builder.Services.AddScoped<IContestoAudit, ContestoApplicativo>();
builder.Services.AddScoped<ISegugioAuditor, SegugioAuditor>();

var segugioAuditor = builder.Services.BuildServiceProvider().GetRequiredService<ISegugioAuditor>();
segugioAuditor.Setup(new List<ISegugioProvider>
{
    new SqlServerProvider(
        new AuditTableConfiguration(connectionString,"Audit","EntityAuditLog","Id","DataJSon","LastUpdate")
    ),
    new SerilogProvider(new QradarConfiguration("localhost", "514", ISegugioProvider.LogTypes.Console)),
    new CustomProvider()
});

// Sistema audit configurato!

5. Creazione dei log di audit

Ora puoi utilizzare il sistema di audit per registrare le attività:

using AuditScope = Audit.Core.AuditScope;

public void OperazioneEsempio()
{
    using (var scope = AuditScope.Create("Operazione", () => new { Data = "Esempio" }, new { Utente = "Admin" }))
    {
        // Logica della tua operazione
    }
}

Estendibilità

  • Aggiungere nuovi provider: Implementa l'interfaccia ISegugioProvider per supportare altri mezzi di logging (es. MongoDB, ElasticSearch).
  • Contesto personalizzato: Adatta la tua implementazione di IContestoAudit e IUtenteAudit per aggiungere altre informazioni come dati del server o informazioni client-specifiche.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  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.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.1 131 5/25/2025
1.0.0 133 5/20/2025