ИЛоггер в asp.net 5 не работает при развертывании в IIS на сервере 2019

#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 .. пока ничего не повлияло. :/