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.