Ich erstellt einen Consumer/Job, die ich als ein Prozess auf Linux in C# ausgeführt haben.Verkabelung und injizierte NLog in eine .Net-Core-Konsole-Anwendung
Der Prozess wird: auf
- Lesen einer Nachricht von RabbitMQ
- Änderungen an der Datenbank
- Fehler Log
Alle in der Dokumentation auf nlog über .net Kern sind aspnet Kern. Wenn ich versuche, eine ILogger
Implementierung zu erhalten, gibt es null zurück. Hier
ist eine Ausnahme von Verkabelung und Nutzung:
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");
[...]
}
Sie nicht mit den Umgebungsvariablen ASPNETCORE_ENVIRONMENT
verwechselt werden; Es wird nur verwendet, um zu bestimmen, welche appsettings.json
verwendet werden soll.
Ich habe meinen Code auf dieser issue report basiert.
Schließlich sind dies die Pakete, die ich derzeit installiert habe.
<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>
Resolve 'Microsoft.Extensions.Logging.ILogger' statt 'NLog.ILogger'. –
@IlyaChumakov wird das nicht nur geben Sie mir die msft Logger und route alle meine Protokolle durch msft Protokollierung? –
Eigentlich habe ich das gerade getestet, und "Logger" ist immer noch null. –