11

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

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

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

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

Журналы отображаются с помощью Seq: enter image description here

ответ

5

По умолчанию ASP.NET Ядро каротаж если они основаны на стандартных .NET Ядра абстракции и реализации указанных абстракций. link, который вы предоставляете, - это именно то, что вы хотите использовать для использования служб ведения журнала. Они будут записываться на стандартный вывод (окно вывода), например, при отладке.

Часть, которую вы ищете, это 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 and stdoutLogFile.

stdoutLogEnabled Если это правда, стандартный вывод и STDERR для процесса, указанного в processPath будет перенаправлен в файл, указанный в stdoutLogFile.

И

stdoutLogFile Задает относительный или абсолютный путь к файлу, который стандартный вывод и стандартный поток ошибок в процессе указанного в processPath будет зарегистрирован. Относительные пути относятся к корню сайта . Любой путь, начинающийся с '.', Будет относительно корня сайта, а все остальные пути будут рассматриваться как абсолютные пути.

Также см Publishing to IIS подробную информацию о модуля ASP.NET Core.

+0

Не забудьте добавить папку, содержащую журналы в структуру решения, а также перечислить ее в publishOptions проекта.json https://docs.asp.net/en/latest/hosting/directory- structure.html. Просто сделал это и отлично работает и называет файлы с соглашением об именах на основе даты (например, stdout_8440_201691620225.log). Немного слишком многословный, но это может быть изменено. –

2

Подсистема ведения журнала ASP.NET Core еще не предоставляет регистратор файлов, хотя creating one is being discussed.

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

+0

И делает Serilog.Sinks.MSSqlServer работает с ядром asp.net. установка даже последней версии бета-версии ожидает версии SERIAL версии 2.0. –

2

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

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

1

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

В принципе, я нашел, что встроенный ILoggerFactory работает нормально, но имеет одну вопиющую проблему: он не будет записывать в файл. Он поддерживает консоли, Debug, ETW и некоторые другие провайдеры, но не файлы. Я предполагаю, что файлы довольно сложны, когда вам приходится беспокоиться о максимальных размерах файлов, поворотах и ​​всем остальном, что с ним связано.

Встроенный журнал работает отлично для внутренних компонентов .NET, и поскольку им не нужно писать в файлы, это действительно не ограничение для команды .NET. Serilog и NLog предоставляют небольшие расширения, позволяющие записывать файлы. Конечно, эти библиотеки также обеспечивают гораздо больше функциональности по всем направлениям.

Для расширения Serilog требуется одна строка кода, и она добавляет регистрацию файлов. Вы можете прочитать об этом здесь: https://github.com/serilog/serilog-extensions-logging-file

Вот мой блог о ASP.NET ядра протоколирования, если это помогает: https://stackify.com/asp-net-core-logging-what-changed/

Я бы сказал, что если у вас есть очень простой регистрации необходимо вы можете сделать встроенный работа с журналом, с расширением File. Как только вы захотите войти в любые расширенные функции, такие как управление выходным форматом, ведение журнала на внешние службы, вращение файла, максимальный размер файла и т. Д., Вы захотите использовать NLog или Serilog.

Смежные вопросы