Я создал новый веб-проект .NET Core с помощью Visual Studio и интегрировал Serilog. Он считывает настройки из appsettings.json (через .UseSerilog((ctx, config) => { config.ReadFrom.Configuration(ctx.Configuration); })).
В appsettings.json путь для записи лога указан в Serilog/WriteTo/Args/pathFormat. Если я установлю это значение на log.txt, он попытается записать файл в `c:\program files\iisexpress\log.txt'.
Как я могу заставить его писать в корень содержимого моего веб-приложения?
@WaelAbbas Нет при работе под IIS Express. Вероятно, с пустельгой так и есть.
Даже с UseKestrel() я все еще вижу журнал в каталоге проекта, можете ли вы поделиться своим классом запуска и appsettings.json просто для информации, также .net core ver.
@WaelAbbas Вот что я говорю. Он будет храниться в каталоге проекта с Kestrel. И попытается сохранить в `c:\program files\iisexpress` при работе под IIS Express
в моем случае это не работает под IIS Express
@WaelAbbas Вероятно, это потому, что вы перенесли свой проект на .Net Core 2.2 из 2.1 или более ранней версии. По умолчанию ваш проект будет запускаться OutOfProcess. См. значение AspNetCoreHostingModel в файле .csproj. Если вы начинаете новый проект с нуля с .net core 2.2, AspNetCoreHostingModel будет InProcess, что означает, что он работает в процессе IIS Express и, следовательно, в этом каталоге. Это неудобно, но значительно увеличивает пропускную способность при работе под IIS в рабочей среде.





В идеале вы не хотите записывать файлы журналов в корневую папку содержимого вашего веб-приложения, поскольку они могут оказаться доступными через Интернет, что будет серьезным фактором безопасности.
Конфигурация пути к файлу журнала может включать переменные среды, поэтому что-то вроде %TMP%\log.txt или путь, основанный на %LOCALAPPDATA% и т. д., является хорошим вариантом (при условии, что рабочий процесс веб-сайта имеет разрешение на запись в местоположение).
Вы можете записать путь, относящийся к вашему веб-приложению, изменив текущий каталог перед настройкой регистратора:
Environment.CurrentDirectory = AppContext.BaseDirectory;
Или вы можете комбинировать эти подходы и установить для этого собственную переменную среды:
Environment.SetEnvironmentVariable("BASEDIR", AppContext.BaseDirectory);
Таким образом, следующий конфиг:
"%BASEDIR%\logs\log.txt"
Я пытаюсь использовать
"pathFormat": "Logs\\log.txt", и он пишет в каталог проекта.