Я работаю над API .NET 6 и пытаюсь регистрировать все действия пользователя с помощью Serilog.
Я хочу сделать это без добавления _logger.Info( ...); в каждой конечной точке для пользовательских запросов и ответов.
Посмотрев в Интернете, я увидел, что это можно сделать без необходимости разработки специального промежуточного программного обеспечения. , используя UseSerilogRequestLogging(). Это прекрасно работает, но проблема связана с конфиденциальными данными. Некоторые данные, такие как электронные письма, пароли и т. д., не должны содержаться в журналах по соображениям безопасности.
Итак, возникает вопрос: как регистрировать все запросы и ответы пользователей, скрывая при этом конфиденциальные данные по соображениям безопасности?
Некоторые коды из этого API:
Получение данных внутри журналов:
app.UseHttpLogging()
.UseSerilogRequestLogging();
builder.Services.AddHttpLogging(logging =>
{
logging.LoggingFields = HttpLoggingFields.All;
logging.RequestHeaders.Add(HeaderNames.Accept);
logging.RequestHeaders.Add(HeaderNames.ContentType);
logging.RequestHeaders.Add(HeaderNames.ContentDisposition);
logging.RequestHeaders.Add(HeaderNames.ContentEncoding);
logging.RequestHeaders.Add(HeaderNames.ContentLength);
logging.MediaTypeOptions.AddText("application/json");
logging.MediaTypeOptions.AddText("multipart/form-data");
logging.RequestBodyLogLimit = 4096;
logging.ResponseBodyLogLimit = 4096;
});
Зарегистрируйте конфигурацию и попытайтесь скрыть конфиденциальные данные:
builder.Host.UseSerilog((context, services, configuration) => configuration
.ReadFrom.Configuration(context.Configuration)
.ReadFrom.Services(services)
.Enrich.FromLogContext()
.Enrich.With()
.Destructure.ByTransforming(_ => new AddUserDto()
{
UserName = _.UserName, UserDescription = _.UserDescription, Password = "****", Email = "****"
})
.Destructure.ByTransforming(_ => new UserLoginDto()
{
UserName = _.UserName,
Password = "****"
})
.Destructure.ByTransforming(_ => new JsonWebToken("****")));
Конечные точки с конфиденциальными данными:
[HttpPost("SignUp")]
[AllowAnonymous]
public async Task SignUp(AddUserDto user)
{
return Ok(await _userService.AddUser(user));
}
[HttpPost("SignIn")]
[AllowAnonymous]
public async Task SignIn(UserLoginDto userLogin)
{
if (await _userService.SignIn(userLogin))
return Ok((await _jwtService.GenerateJwt((await _userService.GetUser(userLogin.UserName)).Id)).Token);
return BadRequest(new BlogErrorResponse(nameof(InvalidRequestException),"Bad username or password."));
}
Подробнее здесь: https://stackoverflow.com/questions/739 ... ensitive-d