Verdrahtung und injiziert NLog in einem .Net-Core-console-Anwendung
Erstellte ich einen Verbraucher/job, den ich haben läuft als Prozess unter linux in C# geschrieben.
Den Prozess:
- Lesen Sie eine Nachricht aus RabbitMQ
- Änderungen an der Datenbank
- Melden Sie alle Fehler
Alle in der Dokumentation zu nlog über .net core auf aspnet-core. Wenn ich versuche zu bekommen eine ILogger
Umsetzung, gibt Sie null zurück.
Hier ist eine Ausnahme von der Verdrahtung und Verwendung:
static void ConfigureServices()
{
string environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var builder = new ConfigurationBuilder()
.SetBasePath(Path.Combine(AppContext.BaseDirectory))
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{environment}.json", optional: true);
var services = new ServiceCollection();
Configuration = builder.Build();
[...]
services.AddLogging();
ServiceProvider = services.BuildServiceProvider();
var loggerFactory = ServiceProvider.GetService<ILoggerFactory>();
loggerFactory.AddNLog();
}
static void Main(string[] args)
{
ConfigureServices();
var logger = ServiceProvider.GetService<NLog.ILogger>();
logger.Debug("Logging");
[...]
}
Nicht verwechselt werden mit der Umgebungsvariable ASPNETCORE_ENVIRONMENT
; es werden nur verwendet, um zu bestimmen, welche appsettings.json
zu verwenden.
Habe ich basiert mein code auf dieser Problem melden.
Schließlich sind das die Pakete, die ich derzeit installiert haben.
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="1.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="1.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="1.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.2" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="1.1.2" />
<PackageReference Include="NLog" Version="5.0.0-beta09" />
<PackageReference Include="NLog.Extensions.Logging" Version="1.0.0-rtm-beta5" />
<PackageReference Include="Npgsql" Version="3.2.4.1" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="1.1.0" />
</ItemGroup>
- Beheben
Microsoft.Extensions.Logging.ILogger
stattNLog.ILogger
. - nicht, dass geben Sie mir nur die msft-logger und route alle meine logs durch msft Protokollierung?
- Tatsächlich habe ich gerade getestet, und
logger
ist immer noch null. - meine schlecht, ich meinte
ILogger<T>
. - und ja, erhalten Sie eine generische msft logger. Im Allgemeinen ist es gut wegen dem code hängt nicht von konkreten logger-Implementierung. Sie befestigen konnte, und ersetzen Sie es in jeder Zeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen kompletten minimalistischen Beispiel NLog in einem .NET-Core-console-app (basierend auf NLog.Extensions.Protokollierung repository):
Referenzen:
nlog.config:
In DotNet Core 2 können Sie den start-up-Klasse jetzt, und bereinigen Sie den code ein bisschen zu schauen, wie das Internet ein.
Und als bonus ein Weg, um Ihre app innerhalb der DI-container mit ConsoleApp
Programm.cs
Start.cs
ConsoleApp.cs
Konfiguration.cs
Meine Lösung ist die Verwendung einer adapter-Muster verwendet-Konsole.Writeline, bis das sane-version von NLog verfügbar.