#asp.net-core #logging #iis-10 #asp.net5 #ilogger
Вопрос:
У меня есть простой веб-API, использующий asp.net 5. Я добавил прослушиватель трассировки, чтобы ILogger выводил данные в файл при добавлении отладки. Это прекрасно работает при тестировании (в рамках VS2019) как в режиме отладки, так и в режиме выпуска. Но когда я развертываю его в IIS, он ничего не выводит. Ему удается создать файл журнала, но он никогда ничего в него не помещает.
мои appsettings.json в dev такие же, как и в Prod … есть ли еще один файл, который мне нужен?
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}
вот мой abSoundAPI.runtimeconfig.json, а также
{
"runtimeOptions": {
"tfm": "net5.0",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "5.0.0"
},
"configProperties": {
"System.GC.Server": true,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}
Вот мой программный класс:
public static void Main(string[] args)
{
TextWriterTraceListener fileOutListener = new("abSoundAPI.log", "fileOutListnener");
Trace.Listeners.Add(fileOutListener);
Trace.AutoFlush = true;
try
{
CreateHostBuilder(args).Build().Run();
}
catch (Exception e)
{
Trace.WriteLine($"Fatal Exception {e.Message}");
throw new Exception("Failed to start!");
}
finally
{
//Trace.Flush();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((context, logging) =>
{
logging.ClearProviders(); // see comments in code F12 on the CreateHostBuilder above
logging.AddConfiguration(context.Configuration.GetSection("Logging"));
logging.AddDebug();
logging.AddConsole();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Комментарии:
1. Зачем вы вообще добавили прослушиватель трассировки? Одни и те же события журнала будут отправляться всем поставщикам, если вы не используете фильтрацию. Поставщики по умолчанию включают Консоль, отладку и Журнал событий. Если вы хотите войти в файл, добавьте поставщика файлов. Для устранения неполадок при запуске вы можете перенаправить консоль (стандартный вывод) в файл с помощью тега AspNetCore в настройках web.config .
2. @PanagiotisKanavos, любопытно .. есть ли какой-нибудь новый встроенный поставщик, который расширяет его еще больше? согласно консоли MS Docs, EventSource, журнал событий и отладка являются единственными. и я добавил прослушиватель, чтобы поставщик отладки выводил данные в файл в дополнение к консоли отладки. Я не знал о настройках web.config.. я попробую … спасибо!
3. @PanagiotisKanavos , Так что настройки web.config, похоже, работают нормально, но это не то, что я ищу .. похоже, это больше для отладки всего приложения (запуска) … не обычное ведение журнала производства для событий предупреждающего/критического уровня. но я кое-чему научился! 🙂
4. Но это именно то, о чем вы спрашивали — как перенаправить отладочный вывод в файл. Это не делается в рабочей среде, обычно это делается только при подключении отладчика.
Debug
никогда не используется для ведения производственного учета именно по этой причине. В сборке выпускаDebug
класс даже ничего не регистрирует5. Ваш реальный вопрос, как войти в систему во время запуска?
Ответ №1:
Вы проверили, есть ли у вас какой-либо файл для конкретной среды, например appsettings.development.json? потому что установите asp.net приложение в iis следует использовать appsettings.development.json вместо appsettings.json.
Вы должны изменить файл appsettings.development.json, как показано ниже:
{
"Logging": {
"LogLevel": {
"Default": "Trace",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}
Комментарии:
1. Это просто неправильно .
appsettings.json
всегда используется. Так жеappsettings.Production.json
, если он существует, для переопределения настроек в производстве. Разработка и постановка используются только в том случае, если заданы переменные среды DOTNET_ENVIRONMENT или ASPNETCORE_ENVIRONMENT , только для переопределения параметров. На рабочем сервереappsettings.Development.json
будет игнорироваться2. @samwu … Спасибо! уровень и категории ведения журнала не влияют на проблему. Я получаю события журнала, добавленные в файл журнала при тестировании в VS (режим отладки и выпуска). Проблема в том, когда я публикую приложение на сервере. Я перепробовал несколько способов настройки уровня журнала как в appsettings.json, так и в abSoundAPI.runtimeconfig.json .. пока ничего не повлияло. :/