要记录使用 ASP.NET Core Identity 进行登录的日志,我们可以使用自定义的 ApplicationSignInManager ,然后在 LoginAsync 方法中使用 ILogger 进行记录。但是,如果我们要记录日志后,希望在控制台中显示控制器名称,以便更好地跟踪用户流,我们需要指定控制器名称。
以下是指定控制器名称的示例代码:
public class ApplicationSignInManager : SignInManager
{
private readonly ILogger _logger;
public ApplicationSignInManager(UserManager userManager,
IHttpContextAccessor contextAccessor,
IUserClaimsPrincipalFactory claimsFactory,
IOptions optionsAccessor,
ILogger logger) : base(userManager,
contextAccessor, claimsFactory, optionsAccessor)
{
_logger = logger;
}
public override async Task PasswordSignInAsync(string userName,
string password,
bool isPersistent,
bool lockoutOnFailure)
{
// Retrieve controller and action name from HttpContext
string controllerName = Context.Request.Path.Value
.Split('/', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault();
string actionName = Context.Request.Query["ActionName"];
// Log the sign in attempt including the controller and action name
_logger.LogInformation($"Signing in {userName} with controller '{controllerName}' and action '{actionName}'");
var result = await base.PasswordSignInAsync(userName, password, isPersistent, lockoutOnFailure);
if (result.Succeeded)
{
// Log the successful sign in including the controller and action name
_logger.LogInformation($"User {userName} with controller '{controllerName}' and action '{actionName}' logged in.");
}
else
{
// Log the failed sign in attempt including the controller and action name
_logger.LogInformation($"Failed sign in attempt for {userName} with controller '{controllerName}' and action '{actionName}'");
}
return result;
}
}
在上面的代码中,我们在 PasswordSignInAsync 方法中检索了控制器名称和操作名称,并在日志记录语句中使用它们。然后,我们使用重写的方法调用基类的 PasswordSignInAsync 方法以进行身份验证并返回结果。如果身份验证成功,我们记录日志以指示成功的登录。否则,我们记录日志以指示失败的登录尝试。
要确保我们能够在控制台中看到控制