Ведение журнала ASP.NET Core 1.0
У меня есть ASP.NET Core веб- проект API. Теперь я хочу регистрировать ошибки и события. Ранее я использовал ELMAH в своем проекте, но кажется, что elmah недоступен для ASP.NET Core. Я ссылался на эту Официальную ссылку для настройки службы регистрации по умолчанию, предоставляемой Microsoft. Я нигде не вижу, как я могу сохранить эти журналы в текстовом файле или в базе данных.
Если в ASP.NET Core уже есть функция ведения журнала по умолчанию, мне интересно, зачем мне использовать другие инструменты, такие как elmah, log4net. Итак, еще раз, когда я искал статью, которая реализует ведение журнала по умолчанию для сохранения журналов в БД или в текстовом файле, я не смог найти ни одной. Есть ли способ сохранить журналы в файле, используя встроенную поддержку ядра в ядре ASP.NET?
В настоящее время я использую Serilog, который отлично работает, а также скачал seq для изящного отображения журналов в браузере. Тем не менее, мне все еще интересно, как я могу добиться того же, используя встроенную функциональность регистрации ядра asp.net.
4 ответа
Я только что провел несколько исследований по этой теме для публикации в блоге о ведении журнала в ASP.NET Core. Я посмотрел на встроенную регистрацию, а также на NLog, SeriLog и log4net.
По сути, я обнаружил, что встроенный ILoggerFactory работает нормально, но имеет одну явную проблему: он не будет записывать в файл. Он поддерживает Console, Debug, ETW и некоторые другие провайдеры, но не файлы. Я предполагаю, потому что файлы довольно сложны, когда вам нужно начать беспокоиться о максимальных размерах файлов, поворотах и обо всем, что с этим связано.
Встроенное ведение журнала отлично работает для внутренних компонентов.NET, и, поскольку им не нужно записывать в файлы, это действительно не является ограничением для команды.NET. Serilog и NLog предоставляют небольшие расширения для включения записи в файл. Конечно, эти библиотеки также предоставляют гораздо больше функциональности по всем направлениям.
Расширению Serilog требуется одна строка кода, и в него добавляется регистрация файлов. Вы можете прочитать об этом здесь: https://github.com/serilog/serilog-extensions-logging-file
Вот мое сообщение в блоге о ведении журнала в ASP.NET Core, если это поможет: https://stackify.com/asp-net-core-logging-what-changed/
Я бы сказал, что если у вас действительно простые требования к ведению журнала, вы можете заставить работать встроенное ведение журнала с расширением File. Как только вы захотите получить доступ к любым дополнительным функциям, таким как управление форматом вывода, ведение журнала во внешних службах, ротация файлов, максимальный размер файла и т. Д., Вы захотите использовать NLog или Serilog.
По умолчанию ведение журнала ASP.NET Core, если оно основано на стандартных абстракциях .NET Core и реализациях для указанных абстракций. Ссылка, которую вы предоставляете, является именно тем, что вы хотите перейти для использования услуг регистрации. Они будут записывать в стандартный вывод (окно вывода), например, при отладке.
Часть, которую вы ищете конкретно, это web.config
, Учтите следующее:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule"
resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%"
forwardWindowsAuthToken="false" stdoutLogEnabled="true"
stdoutLogFile="C:\temp\logs\log.log" />
</system.webServer>
</configuration>
Вы ищете stdoutLogEnabled
а такжеstdoutLogFile
,
stdoutLogEnabled Если true, stdout и stderr для процесса, указанного в
processPath
будет перенаправлен в файл, указанный вstdoutLogFile
,
А также
stdoutLogFile Указывает относительный или абсолютный путь к файлу, для которого stdout и stderr из процесса, указанного в
processPath
будет зарегистрирован. Относительные пути относительно корня сайта. Любой путь, начинающийся с '.' будет относиться к корню сайта, а все остальные пути будут рассматриваться как абсолютные.
Также см. Публикация в IIS для получения подробной информации о модуле ASP.NET Core.
Подсистема журналирования ASP.NET Core пока не предоставляет файловый регистратор, хотя его создание обсуждается.
На момент написания статьи использование Serilog или NLog для этой цели - путь.
Вы не можете реально сравнить встроенное ведение журнала в ASP.NET Core с ELMAH. Ведение журнала ASP.NET Core представляет собой простую структуру ведения журнала, в которой необходимо указать, что и когда регистрировать. ELMAH автоматически перехватывает все необработанные исключения и регистрирует много контекстной информации о неудачном запросе. В приемнике Seq фактически реализована часть этого поведения, что делает дополнительную информацию, такую как Protocol, RequestId и аналогичные, доступной через Seq, но это не то, что вы получите из коробки с протоколированием ASP.NET.
Ведение журнала в ASP.NET по-прежнему совершенно новое, поэтому начинают появляться средства ведения журналов для других сред и направлений. Я уверен, что ведение журнала на основе файлов будет реализовано в ближайшее время, и ELMAH также наверняка будет перенесен в ASP.NET Core. За дополнительной информацией обращайтесь к моему сообщению в блоге: ASP.NET Core Logging Tutorial.