NLog:divide la registrazione della traccia nel proprio file

 C Programming >> Programmazione C >  >> Tags >> File
NLog:divide la registrazione della traccia nel proprio file

Questo articolo spiega come configurare NLog in modo che i messaggi di registro a livello di traccia vadano al proprio file. Questo approccio richiede solo la modifica del file nlog.config e non richiede modifiche al codice.

Alla fine, tutti i livelli superiori a Trace – Debug, Error, Warn, Info – andranno in un file di registro e tutti i messaggi a livello di traccia andranno in un file separato.

1 – Installa e inizializza NLog

Se hai già installato NLog e hai il file nlog.config, puoi saltare questo passaggio.

  • Installa il pacchetto nuget NLog. Nota:sta usando Package Console Manager (Visualizza> Altre finestre> Package Console Manager) .
Install-Package NLog
Code language: PowerShell (powershell)
  • Aggiungi un nuovo file vuoto chiamato nlog.config.
  • Imposta la proprietà di nlog.config Copia nella directory di output =Copia se più recente .

Dopo questi passaggi, il tuo .csproj dovrebbe assomigliare a questo:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="NLog" Version="4.7.5" />
  </ItemGroup>

  <ItemGroup>
    <None Update="nlog.config">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>

</Project>

Code language: HTML, XML (xml)

2 – Configura NLog.config per dividere i messaggi a livello di traccia in un file diverso

Potresti avere altri requisiti per la registrazione, quindi assicurati prima di configurare NLog con tutti gli altri requisiti. Se stai partendo da zero, potresti voler iniziare semplicemente copiando e incollando il nlog.config mostrato di seguito.

Nel file nlog.config sono presenti due sezioni importanti che consentono di suddividere i messaggi a livello di traccia:

  • Target:aggiungi una nuova destinazione per il file di registro di traccia.
  • Regole – Aggiungi due regole, entrambe con il nome “*”. La prima regola ha minlevel=Debug e writeTo=mainLog. L'altro ha livello=Traccia e scrivi a =registro traccia.

Ciò significa che tutti i messaggi di registro con livello Debug e superiore andranno alla destinazione mainLog e tutti i messaggi a livello di traccia andranno alla destinazione traceLog.

Nota:inserisci enabled=true nella regola di traccia. Ciò semplifica l'attivazione e la disattivazione della registrazione della traccia.

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">

  
<variable name ="logFile" value="C:/logs/helloworld-${shortdate}" />    

  <targets>
    <target xsi:type="File" 
            name="mainLog" 
            fileName="${logFile}.log"
            layout="${longdate} level=${level} message=${message}" 
            keepFileOpen ="false"
            concurrentWrites ="true"/>

    <target xsi:type="File"
            name="traceLog"
            fileName="${logFile}.tracelog"
            layout="${longdate} level=${level} threadid=${threadid} message=${message}"
            keepFileOpen ="false"
            concurrentWrites ="true"/>
  </targets>

  <rules>
    <logger name="*" minlevel="Debug" writeTo="mainLog" />
    <logger name="*" level="Trace" writeTo="traceLog" enabled="true" />
  </rules>

</nlog>
Code language: HTML, XML (xml)

3 – Usa NLog nel codice e verifica che registri i messaggi a livello di traccia in un file separato

Poiché le regole nlog.config hanno name="*", queste regole si applicano a tutti i logger recuperati da LogManager. Quindi il codice seguente recupera semplicemente un logger e lo usa per registrare i cinque diversi livelli di messaggi.

using NLog;
class Program
{
	static void Main(string[] args)
	{
		var logger = LogManager.GetCurrentClassLogger();
		logger.Info("Hello Info");
		logger.Warn("Hello Warning");
		logger.Error("Hello Error");
		logger.Debug("Hello Debug");
		logger.Trace("Hello Trace");
	   
	}
}
Code language: C# (cs)

Quando eseguo questo codice, vengono creati i seguenti due file di registro:

  • C:\logs\helloworld-2020-10-29.log
2020-10-29 07:45:27.1770 level=Info message=Hello Info
2020-10-29 07:45:27.2116 level=Warn message=Hello Warning
2020-10-29 07:45:27.2116 level=Error message=Hello Error
2020-10-29 07:45:27.2116 level=Debug message=Hello Debug
Code language: plaintext (plaintext)
  • C:\logs\helloworld-2020-10-29.tracelog
2020-10-29 07:45:27.2116 level=Trace threadid=1 message=Hello Trace
Code language: plaintext (plaintext)