Какие есть способы вести лог всех ошибок приложения в ASP.NET Core? Например хотелось бы сохранять все исключения со стеком вызова в текстовые файлы или типа того (автоматические, не в обработчике исключений). Если были получены некорректные данные в контроллере хотелось бы добавить информацию о некорректном запросе в лог.
В идеале хотелось бы иметь инструмент, который, например, присылал бы SMS с сообщением о том, что база данных не отвечает, интернет отвалился, пользователи присылают на конкретный метод конкретного контроллера не те данные и тд.
Добавьте в Startup
Middleware
:
public void Configure(IApplicationBuilder app)
{
app.UseMiddleware<ExceptionHandlerMiddleware>();
}
В 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
Из стандартных: 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
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть форма поискаХочу добавить контекстное меню на элементе, который является результатом поиска(например на фамилии работника при нажатии...
Как проверить если юзер купил подписку и дать доступ к игре, игра на iOS, как получить информацию о статусе юзера (подписан или нет) или срок...