Я хотел бы увеличить / улучшить мою регистрацию.
До сих пор я имел в каждом коде действия контроллера, как
public asyc Task<IActionResult> Action1(int id, [FromBody] RequestModel request) {
string log = $"{nameof(Action1)}(id: {id}, request: {request?.ToJson()})";
_logger.LogInformation(log);
Основная цель состояла в том, чтобы увидеть, что на самом деле достигает действия контроллера.
Я удалил его, так как он сильно загромождал код (например, для методов с большим количеством параметров).Но теперь я недоволен тем, что в журналах больше не отображается информация (и они нужны мне для изучения некоторых необъяснимых ошибок).
Есть ли способ подключиться к результатам связывания модели (например,через сервисный фильтр) для записи результатов связывания модели?
Работает как шарм: благодаря Шахзаду Хасану
public class MethodCallParameterLogger : IAsyncActionFilter
{
public ILoggerFactory LoggerFactory { get; set; }
public MethodCallParameterLogger(ILoggerFactory loggerFactory)
{
LoggerFactory = loggerFactory;
}
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
LoggerFactory
// the display name contains the controller name space, controller name, method name and the postfix " (ActionLogger)"
.CreateLogger(context.ActionDescriptor.DisplayName.Split(" ")[0])
// MIND THAT THIS LOGS EVEN SENSITIVE DATA (e.g. credentials) !!!
.LogInformation(JsonConvert.SerializeObject(context.ActionArguments));
var resultContext = await next();
}
}