1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zhenlei520-RequestLog

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
ReadMe.md

RequestLog

RequestLog — это библиотека на C# на основе .NET Standard 2.0 и .NET Standard 2.1, которая помогает собирать информацию о запросах в NetCore. Подробные инструкции по использованию можно найти в документации.

Начало работы

Чтобы установить RequestLog в свой проект, выполните следующую команду:

PM> Install-Package RequestLog

В настоящее время RequestLog поддерживает только MySQL. Вы можете установить соответствующий пакет по мере необходимости:

PM> Install-Package RequestLog.MySql

Конфигурация

Сначала настройте RequestLog в файле Startup.cs следующим образом:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRequestLog(options =>
    {
        options.Headers = "Host"; // информация о запросе, которую необходимо записать, например, если необходимо записать несколько заголовков запросов, разделите их с помощью «,»
        options.HitHeaders = "Content-Type"; // исключаемая информация заголовка запроса, последний сохранённый заголовок запроса — headers без hitHeaders

        options.UseMySql(x =>
        {
            x.ConnectionString =
                "Server=localhost;port=3306;database=system.request.log;uid=root;pwd=rootroot;Convert Zero Datetime=True;";

            //x.Rules = Rules.None; // текущий запрос не архивируется, все запросы находятся в одной таблице
            x.Rules = Rules.Year; // текущий запрос архивируется по годам (по умолчанию)
            // x.Rules = Rules.Month; // текущий запрос архивируется по месяцам
            // x.Rules = Rules.Day; // текущий запрос архивируется по дням
        }); // если вы используете MySQL, выберите соответствующую конфигурацию в зависимости от базы данных
    });
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRequestLog(); // включить ведение журнала, иначе оно не будет работать (поместите его в начало)
    ...
}

Для записи запросов в контроллере:

// Все запросы в контроллере записываются (кроме игнорируемых)
[RequestLog]
public class CheckController : Controller
{
    // запись журнала
    [HttpGet]
    public IActionResult Healthy()
    {
        return Content("healthy");
    }

    // текущий метод игнорируется, журнал не записывается
    [HttpGet]
    [RequestLog(Ignore = true)]
    public IActionResult Healthy2()
    {
        return Content("healthy2");
    }
}

public class Check2Controller : Controller
{

    // только текущий метод записывает журнал и устанавливает имя как Healthy
    [HttpGet]
    [RequestLog(Name = "Healthy")]
    public IActionResult Healthy()
    {
        return Content("healthy");
    }

    // записывает журнал
    [HttpGet]
    public IActionResult Healthy()
    {
        return Content("healthy");
    }
}

Расширенное руководство

Если вы хотите добавить дополнительные параметры к запросу в журнале, вы можете внедрить IRequest и вызвать его метод SetExtend для записи.

Например, в промежуточном программном обеспечении для обработки ошибок вы можете записать фактическую информацию об ошибке следующим образом:

/// <summary>
/// обработка ошибок
/// </summary>
public class ErrorHandlingMiddleware
{
    private readonly RequestDelegate _next;
    private readonly IRequest _request;

    /// <summary>
    ///
    /// </summary>
    /// <param name="next"></param>
    public ErrorHandlingMiddleware(RequestDelegate next, IRequest request)
    {
        _next = next;
        _request = request;
    }

    /// <summary>
    ///
    /// </summary>
    /// <param name="context"></param>
    /// <returns></returns>
    public async Task Invoke(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (System.Exception ex)
        {
            _request.SetExtend(ex.Message);
            await HandleExceptionAsync(context, msg);
        }
    }

    private Task HandleExceptionAsync(HttpContext context, string msg)
    {
        context.Response.ContentType = "application/json;charset=utf-8";
        return context.Response.WriteAsync(msg);
    }
}

Затем добавьте его в Configure в Startup:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
``` {
              app.UseRequestLog(); //  **Включить журнал регистрации**. Без включения он не будет работать (поместить в начало).

              app.UseMiddleware<ErrorHandlingMiddleware>(); // **Глобальное промежуточное ПО для обработки исключений**

               ......
        }

Tip:
    После включения журнала регистрации по умолчанию в последней версии он будет добавлять журнал ко всем запросам. Чтобы избежать влияния на производительность, добавьте [RequestLog(Ignore = true)] либо в метод, либо в заголовок контроллера, если хотите игнорировать регистрацию загрузки файлов или других запросов.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Промежуточное ПО в NetCore помогает регистрировать логи. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/zhenlei520-RequestLog.git
git@api.gitlife.ru:oschina-mirror/zhenlei520-RequestLog.git
oschina-mirror
zhenlei520-RequestLog
zhenlei520-RequestLog
master