NET 6 консольное приложение логирование на старте
В Консольном приложении NET 6 не могу писать в лог на старте в файле Program.cs. Использую NLog
Настройка логгера в файле Program.cs:
builder.Logging.ClearProviders();
builder.Logging.SetMinimumLevel(LogLevel.Warning);
builder.Host.UseNLog();
using (var provider = builder.Services.BuildServiceProvider())
{
using var scope = provider.CreateScope();
var manager = scope.ServiceProvider.GetRequiredService<DBManager>();
var logger = scope.ServiceProvider.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Приложение запущено"); //TODO здесь логгер не работает!!!
}
В строке:
logger.LogInformation("Приложение запущено");
запись в лог не происходит
Пробовал и другие варианты, к примеру
app.Logger.LogInformation("Test");
тоже не работает.
В данном проекте используется WEb Api, там логгер получаю в конструкторе и он там работает.
Настройка лога в файле appsettings.json:
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
...
//https://stackoverflow.com/questions/56246416/nlog-configuration-in-appsettings-json-instead-of-nlog-config-in-net-core
"NLog": {
"autoReload": true,
"throwExceptions": false,
"internalLogLevel": "Off",
"internalLogFile": "c:\\temp\\internal-nlog.txt",
"extensions": [
{ "assembly": "TransactionModule" }
],
"targets": {
"allfile": {
"type": "File",
"encoding": "UTF-8",
"fileName": "${basedir}/logs/${shortdate}.log",
"layout": "${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}",
"keepFileOpen": true,
"autoFlush": false,
"openFileFlushTimeout": "10",
"openFileCacheTimeout": "10",
"maxArchiveFiles=": "50",
"archiveAboveSize": "10000000",
"archiveEvery": "Monday"
}
},
"rules": [
{
//удаляем лонирование от EntityFrameworkCore
"logger": "Microsoft.EntityFrameworkCore.Query",
"minLevel": "Off",
"final": true
},
{
"logger": "TransactionModule.*",
"minLevel": "Trace",
"writeTo": "allfile"
}
]
}
}