Подтвердить что ты не робот

Запись в ASP.NET Core 1.0

У меня есть проект ASP.NET Core web api. Теперь я хочу log ошибки и события. Ранее я использовал ELMAH в своем проекте, но кажется, что elmah недоступен для ASP.NET Core. Я ссылался на эту Официальную ссылку для настройки службы ведения журнала по умолчанию, предоставляемой Microsoft. Я нигде не вижу, как я могу сохранить эти журналы в текстовом файле или в базе данных.

Если ASP.NET Core уже имеет функцию ведения журнала по умолчанию, мне интересно, почему я должен использовать другие инструменты, такие как elmah, log4net. Итак, снова, когда я искал статью, которая реализует регистрацию по умолчанию для сохранения журналов в db или в текстовом файле, я не смог найти их. Есть ли способ сохранить журналы в файле с помощью ядра ASP.NET, встроенного в поддержку ведения журнала?

В настоящее время я использую Serilog, который отлично работает и также загружает seq для корректного отображения журналов в браузере. Тем не менее, мне все еще интересно, как я могу добиться того же, используя встроенные функции ведения журнала ядра asp.net.

Файл журнала с помощью Serilog:

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

4b9b3361

Ответ 1

По умолчанию запись 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.

Ответ 2

Подсистема ведения журнала ASP.NET Core еще не предоставляет файловый регистратор, но создается одно из них.

На момент написания статьи использование Serilog или NLog для этой цели - путь.

Ответ 3

Вы не можете сравнивать встроенный журнал в ASP.NET Core с ELMAH. ASP.NET Core logging - это простая структура ведения журнала, где вам нужно сообщить ей, что нужно регистрировать и когда. ELMAH автоматически захватывает все необработанные исключения и записывает много контекстуальной информации о провальном запросе. Seq sink фактически реализовал некоторые из этих действий, что делает дополнительную информацию, такую ​​как Protocol, RequestId и аналогичную доступную через Seq, но это не то, что вы получите из коробки с протоколированием ASP.NET.

Ведение журнала ASP.NET по-прежнему совершенно новое, поэтому начинают появляться журналы для других фреймворков и получателей. Я уверен, что ведение журнала на основе файлов будет реализовано в ближайшее время, и ELMAH также будет перенесен в ASP.NET Core. Для получения дополнительной информации ознакомьтесь со своим сообщением в блоге: Учебник по основному протоколу ASP.NET.

Ответ 4

Я только что сделал кучу исследований по этой теме для публикации в блоге в журнале ASP.NET Core. Я просмотрел встроенный журнал, а также NLog, SeriLog и log4net.

В принципе, я нашел, что встроенный ILoggerFactory работает отлично, но имеет одну вопиющую проблему: он не будет записывать в файл. Он поддерживает консоли, 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.