2017-08-01 1 views
0

Ich habe eine WPF-Anwendung, die einen Hintergrund-Worker startet, d. H. Asp.Net Core Web API-Server.Verwendung NLog in Multithread-Umgebung

Ich möchte alle Ereignisse in einer einzigen Protokolldatei protokollieren. HINWEIS: Ich möchte ASP.net Core Framework-Protokollierung von Microsoft auch. Ich benutze Nlog (zum ersten Mal) dafür.

Code:

nlog.config Datei:

<?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" 
     autoReload="true" 
     internalLogLevel="Warn" 
     internalLogFile="c:\temp\internal.txt"> 


    <!-- define various log targets --> 
    <targets> 
    <!-- write logs to file --> 
    <target xsi:type="File" name="allfile" fileName="c:\temp\TestSimLogs\nlog-all-${shortdate}.log" 
       layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" concurrentWrites="true" keepFileOpen="true"/> 

    <target xsi:type="File" name="ownFile" fileName="c:\temp\TestSimLogs\nlog-own-${shortdate}.log" 
       layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" concurrentWrites="true" keepFileOpen="true"/> 

    <target xsi:type="Null" name="blackhole" /> 
    </targets> 

    <rules> 
    <!--All logs, including from Microsoft--> 
    <logger name="*" minlevel="Trace" writeTo="allfile" /> 
    </rules> 
</nlog> 

In WPFfile.cs:

Referenzen: Nlog

private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); 

//lots of code 

private void Button_StartServer(object sender, RoutedEventArgs e) 
     { 
      Logger.Info($"Started Server in mode {mode}"); 

      // logic 
      WebSocket_Worker.RunWorkerAsync("WS begin"); 
      WebAPI_Worker.RunWorkerAsync("WebAPI begin"); 

      Status = $"Server Started in mode {mode}"; 
     } 

In Asp.Net Kern:

Referenzen: Nlog.Extensions.Logging, Nlog.Web.AspNetCore

Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
     { 
      loggerFactory.AddNLog(); 
      app.AddNLogWeb(); 
      env.ConfigureNLog("./../../nlog.config");  
      app.UseMiddleware_Authorization(); 
      app.UseMvc(); 
     } 

Ausgabe: Die Protokolldatei ist nicht wie erwartet. Nur die Kernprotokolle von asp.net werden in der Protokolldatei angezeigt.

Antwort

1

Huh! Dummer Fehler, ich habe "Copy To Output Directory" nicht auf "Copy Always" in der Datei "nlog.config" gesetzt.