11

Ho il progetto ASP.NET Core web a. Ora voglio log gli errori e gli eventi. In precedenza ho usato ELMAH nel mio progetto ma sembra che elmah non sia disponibile per ASP.NET Core. Ho fatto riferimento a this Official link per la configurazione del servizio di registrazione predefinito fornito da Microsoft. Non vedo da nessuna parte come posso salvare questi registri nel file di testo o nel database.Registrazione di ASP.NET Core 1.0

Se ASP.NET Core ha già la funzionalità di registrazione predefinita, mi chiedo perché dovrei usare altri strumenti come elmah, log4net. Quindi, di nuovo quando ho cercato un articolo che implementa la registrazione predefinita per salvare i registri in db o in un file di testo, non sono riuscito a trovarne. C'è un modo in cui possiamo salvare i log in file utilizzando il supporto integrato del core di ASP.NET per la registrazione?

Attualmente sto usando Serilog che funziona perfettamente e anche scaricato seq per visualizzare i log con garbo nel browser. Tuttavia, mi sto ancora chiedendo come potrei ottenere lo stesso utilizzando la funzionalità di registrazione integrata in asp.net.

file di registro utilizzando Serilog:

registri visualizzati utilizzando Seq: enter image description here

risposta

5

Di default il ASP.NET Nucleo registrazione se basato sullo standard .NET Nucleo astrazioni e le implementazioni per dette astrazioni. Lo link che fornisci è esattamente ciò che desideri seguire per il consumo dei servizi di registrazione. Questi scriveranno sullo standard output (finestra di output) ad esempio durante il debug.

La parte che stai cercando in particolare è la web.config. Si consideri il seguente:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.webServer> 
    <handlers> 
     <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" 
      resourceType="Unspecified" /> 
    </handlers> 
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" 
       forwardWindowsAuthToken="false" stdoutLogEnabled="true" 
       stdoutLogFile="C:\temp\logs\log.log" /> 
    </system.webServer> 
</configuration> 

Stai cercando il stdoutLogEnabled and stdoutLogFile.

stdoutLogEnabled Se fosse vero, stdout e stderr per il processo specificato nel processPath sarà reindirizzato al file specificato in stdoutLogFile.

E

stdoutLogFile Specifica il percorso del file relativo o assoluto per che stdout e stderr dal processo specificato nel processPath verrà registrato. I percorsi relativi sono relativi alla radice del sito . Qualsiasi percorso che inizia con "." Sarà relativo alla radice del sito e tutti gli altri percorsi verranno considerati come percorsi assoluti.

vedono anche Publishing to IIS per i dettagli sul modulo ASP.NET Nucleo.

+0

Non dimenticare di aggiungere la cartella per contenere i registri nella struttura della soluzione e di elencarla anche nelle opzioni Pubblicazione di project.json https://docs.asp.net/en/latest/hosting/directory- structure.html. L'ho appena fatto e funziona perfettamente e denomina i file con una convenzione di denominazione basata sulla data (ad es. Stdout_8440_201691620225.log). Un po 'troppo prolisso fuori dagli schemi, ma può essere ottimizzato. –

2

Il sottosistema di registrazione di ASP.NET Core non fornisce ancora un registratore di file, sebbene creating one is being discussed.

Al momento della scrittura, utilizzare Serilog o NLog per questo scopo è la strada da percorrere.

+0

E Serilog.Sinks.MSSqlServer funziona con asp.net core. l'installazione anche dell'ultima versione beta prevede la versione di serilog <2.0. –

2

Non è possibile confrontare realmente la registrazione incorporata in ASP.NET Core in ELMAH. La registrazione di ASP.NET Core è un semplice framework di registrazione, in cui è necessario indicare cosa registrare e quando. ELMAH rileva automaticamente tutte le eccezioni non gestite e registra molte informazioni contestuali sulla richiesta non riuscita. Il sink Seq ha effettivamente implementato parte di questo comportamento, che rende disponibili ulteriori informazioni come Protocol, RequestId e simili attraverso Seq, ma questo non è qualcosa che si otterrà con la registrazione ASP.NET.

La registrazione di ASP.NET è ancora completamente nuova, perché inizieranno ad apparire i logger per altri framework e destinazioni. Sono sicuro che la registrazione basata su file verrà implementata a breve e anche ELMAH verrà portato su ASP.NET Core. Per ulteriori informazioni, controlla il mio post sul blog: ASP.NET Core Logging Tutorial.

1

Ho appena svolto una serie di ricerche su questo argomento per un post sul blog sulla registrazione di ASP.NET Core. Ho esaminato la registrazione incorporata, nonché NLog, SeriLog e log4net.

Fondamentalmente quello che ho trovato è il costruito in ILoggerFactory funziona bene ma ha un problema lampante: non scriverà nel file. Supporta Console, Debug, ETW e alcuni altri provider, ma non i file. Presumo perché i file sono piuttosto complicati quando devi iniziare a preoccuparti delle dimensioni massime dei file, delle rotazioni e di tutte le altre cose che ne derivano.

Il logging integrato funziona perfettamente per gli interni .NET e poiché non è necessario scrivere su file, in realtà non è un limite per il team .NET. Sia Serilog che NLog forniscono piccole estensioni per consentire la scrittura dei file. Ovviamente quelle librerie offrono anche molte più funzionalità su tutta la linea.

L'estensione di Serilog richiede una riga di codice e aggiunge la registrazione dei file. Si può leggere su qui: https://github.com/serilog/serilog-extensions-logging-file

Ecco il mio post del blog sulla registrazione di ASP.NET core se aiuta: https://stackify.com/asp-net-core-logging-what-changed/

direi che se avete davvero semplice registrazione ha bisogno di voi può fare il built-in lavoro di registrazione, con l'estensione File. Non appena si desidera accedere a funzioni avanzate come il controllo del formato di output, la registrazione a servizi esterni, la rotazione dei file, la dimensione massima del file, ecc., Si vorrà utilizzare NLog o Serilog.

Problemi correlati