Ведение журнала 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.

Файл журнала с использованием Serilog:

Журналы отображаются с использованием Seq: введите описание изображения здесь

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.

Другие вопросы по тегам