Где идут журналы при запуске ASP.NET Core на IIS 7.5?

Я публикую это и отвечаю на него, потому что это очень сильно заглохло меня. У меня есть следующая строка в web.config:

<aspNetCore processPath="dotnet" arguments=".\XXX.Server.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />

По-видимому, это должно быть logging to logs\stdout, но когда я смотрю, там ничего нет. Я отправился на дикую охоту за гусями, обыскивая весь диск для чего-либо с именем "log" (который слишком много возвращался) или "stdout" (который ничего не возвращал) и все еще не мог понять.

Ответ 1

Вероятно, вы можете проверить средство просмотра событий на своем аппарате → Приложение, чтобы узнать, не зарегистрированы ли какие-либо ошибки, что может объяснить, почему ваши файлы журналов не создаются.

Однако наиболее вероятная причина заключается в том, что IIS не имеет права на запись в эту папку журнала.

  • Щелкните правой кнопкой мыши по папке → Безопасность
  • Убедитесь, что пользователь IIS_IUSRS имеет следующие разрешения: чтение и выполнение, список, запись (потенциально запись отсутствует по умолчанию)

Ответ 2

Вы должны убедиться, что папка журнала существует! IIS не сделает это за вас. Такое простое решение этой проблемы беспризорности.

Ответ 3

Я создал папку журналов, но все равно ничего не регистрировалось. Я узнал, что вы можете использовать существующую папку под домашними/лог файлами и заставить ее работать без создания папки. Это решение работало для меня, как есть:

1) Откройте файл web.config, созданный в корневой папке опубликованного приложения.

2) Установите stdoutlogEnabled в true и stdoutLogFile в \?\%Home%\LogFiles\stdout следующим образом:

<aspNetCore processPath="dotnet" arguments=".\SellCarsHereV2.dll" stdoutLogEnabled="true" stdoutLogFile="\\?\%home%\LogFiles\stdout" />

Затем вы можете перейти на этот путь и загрузить файлы или использовать Azure Portal (если он размещен в Azure). Если вы используете Azure Portal:

1) Откройте службу приложений.

2) Перейдите в раздел "Дополнительные инструменты", который приведет вас к https://{службе вашего приложения}.scm.azurewebsites.net/

3) Нажмите "Меню консоли отладки" → CMD

4) Нажмите LogFiles

5) Вы увидите файл с именем stdout _ *. Log, и вы можете нажать на карандаш, чтобы просмотреть его. Вы также можете скачать файл, если хотите.

Ответ 4

Согласно предоставленному stdoutLogFile=".\logs\stdout" в файле web.config, каталог logs должен быть создан рядом с web.config внутри каталога публикации.

Чтобы создать подкаталог logs вы можете использовать подход, описанный в структуре каталога ASP.NET Core.

Просто вставьте это в конец опубликованного проекта *.csproj file

<Project>
...
  <Target Name="CreateLogsFolder" AfterTargets="Publish">
    <MakeDir Directories="$(PublishDir)logs" 
              Condition="!Exists('$(PublishDir)logs')" />
  </Target>
</Project>

Во время процесса публикации после этого изменения каталог logs должен быть создан, если он не существует в выходном каталоге.

Если вы запустите, например: dotnet publish --output <path_to_your_publish_folder> вы должны найти каталог logs внутри <path_to_your_publish_folder>

Ответ 5

Я сделал следующие шаги, чтобы получить журналы:

  1. Создайте папку logs и предоставьте доступ на IIS_IUSRS к IIS_IUSRS как описано выше
  2. Установите абсолютный путь в web.config: stdoutLogFile="C:\xxx\xxx\logs"
  3. Перезапустите пул приложений
  4. Стоп, запусти сайт

редактировать

Шаг 2 работает с относительным путем тоже stdoutLogFile=".\logs\stdout"