721 messaggi dal 08 aprile 2009
Sto cominciando a utilizzare Serilog in asp.net core per tracciare il log event dell'applicazione web. Sono riuscita a scrivere un file di testo che traccia gli eventi di un servizio che gira in background. Dello stesso adesso vorrei visualizzare anche il log a video in una pagina dedicata ma non vorrei visualizzare semplicemente il file di testo ma vorrei creare una classe specifica che mi invia l'output sulla pagina. Non riesco a trovare un esempio specifico.
Si può fare?
11.862 messaggi dal 09 febbraio 2002
Contributi
Ciao Laura,
per far arrivare delle informazioni nella pagina web dovresti usare ASP.NET Core SignalR. In questo modo potrai visualizzare le righe di log nonappena vengono scritte, perché sarà il server a inviarle proattivamente alla pagina web.

Ora rimane da chiare quale componente userà SignalR per inviare le righe di log.

#Opzione 1. Esiste un sink di Serilog per ASP.NET Core Signalr, ma l'autore non ha pubblicato un pacchetto NuGet quindi casomai dovresti o crearlo tu o aggiungere direttamente il sorgente alla tua applicazione.
https://github.com/dmitry26/Serilog.Sinks.SignalR.NetCore/blob/master/README.md

#Opzione 2. Ti crei un BackgroundService che si mette ad osservare il file di testo con un FileSystemWatcher e ogni volta che c'è un cambiamento recupera le ultime righe aggiunte.


Poi, più avanti e se ce n'è bisogno, si potrà anche ottimizzare per fare in modo che il recapito dei messaggi di log via SignalR venga usato solo se c'è effettivamente almeno un utente connesso.

ciao,
Moreno
Modificato da BrightSoul il 16 settembre 2019 09:58 -

Enjoy learning and just keep making
721 messaggi dal 08 aprile 2009
ho provato con signalr.
L'unica cosa che non riesco a fare è collegare il Signalr nell'hostcreatebuilder:
  public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>

          
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
         
                .UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                    .ReadFrom.Configuration(hostingContext.Configuration)
                    .Enrich.FromLogContext()
                    .WriteTo.Debug()
                    .WriteTo.Console(
                        // {Properties:j} added:
                        outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} " +
                                        "{Properties:j}{NewLine}{Exception}")

                    .WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(Matching.FromSource<HostedServices.ImportExportHostedService>())
                        .WriteTo.File($"Logs/zta-importexport-log-.txt",
                        shared:true,
                        rollingInterval:RollingInterval.Month,
                        restrictedToMinimumLevel:Serilog.Events.LogEventLevel.Information,
                        outputTemplate: "[{Timestamp:dd-MM-yyyy HH:mm:ss} {Level:u3}] {Message:lj} " + "{NewLine}{Exception}")
                        .WriteTo.SignalR()
                    ));

    }       


mi va in eccezione su parameter name cfg cannot be null ma non capisco cosa gli devo passare.
721 messaggi dal 08 aprile 2009
Si l'unica differenza è che nell'esempio impostano il Serilog nel appsettings.json e io invece lo faccio da codice.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.