Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Какие есть способы вести лог всех ошибок приложения в ASP.NET Core?

#c_sharp #net #aspnet #aspnet_core #net_core


Какие есть способы вести лог всех ошибок приложения в ASP.NET Core? Например хотелось
бы сохранять все исключения со стеком вызова в текстовые файлы или типа того (автоматические,
не в обработчике исключений). Если были получены некорректные данные в контроллере
хотелось бы добавить информацию о некорректном запросе в лог. 

В идеале хотелось бы иметь инструмент, который, например, присылал бы SMS с сообщением
о том, что база данных не отвечает, интернет отвалился, пользователи присылают на конкретный
метод конкретного контроллера не те данные и тд.
    


Ответы

Ответ 1



Добавьте в Startup Middleware: public void Configure(IApplicationBuilder app) { app.UseMiddleware(); } В Middleware вы задаёте собственную обработку запросов перед выполнением и после выполнения, так же обработку ошибок. Реализация ExceptionHandlerMiddleware (не забудьте зарегистрировать ILogger в контейнере): public sealed class ExceptionHandlerMiddleware { private readonly ILogger _logger; private readonly RequestDelegate _next; public ExceptionHandlerMiddleware(RequestDelegate next, ILogger logger) { _next = next; _logger = logger; } public async Task Invoke(HttpContext context) { try { await _next(context); } catch (Exception exp) { _logger.LogError(context, exp); await HandleExceptionAsync(context, exp.GetBaseException()); } } private static Task HandleExceptionAsync(HttpContext context, Exception exp) { var code = HttpStatusCode.InternalServerError; // 500 if unexpected var result = JsonConvert.SerializeObject(new { Code = code, Message = exp.Message, StackTrace = exp.StackTrace }); context.Response.ContentType = "application/json"; context.Response.StatusCode = (int)code; return context.Response.WriteAsync(result); } } Документация с Microsoft

Ответ 2



Из стандартных: Microsoft.Extensions.Logging. В Startup.Configure: loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddFile("C:\\log\\Лог.log"); loggerFactory.AddDebug(); Далее через DI их получаем, включая в конструктор ILogger. Далее в нужных местах пишем Log, обработку. В некоторых местах (где не обработали) может выдать сам ошибку в файл loggerFactory.AddDebug(); Возможно если покапаться, то можно писать в поток, а поток отправлять на сервер, который бы вам отправлял нужные вам сообщения. P.S. Вопрос выше даже без отдельного сервера работает и кажется предоставляет больше данных. Объедините наши ответы и (думаю) получите то, что хотите. Ну и стоит немного скурить мануалов по Microsoft.Extensions.Logging

Комментариев нет:

Отправить комментарий