Asp.net mvc 3 具有IP地址的应用程序范围日志记录模式
我正在编写一个ASP.NET MVC 3应用程序,其中包含许多非web特定的类。由于对审计跟踪的严格要求,所有可疑活动都应记录用户ID和IP地址Asp.net mvc 3 具有IP地址的应用程序范围日志记录模式,asp.net-mvc-3,logging,Asp.net Mvc 3,Logging,我正在编写一个ASP.NET MVC 3应用程序,其中包含许多非web特定的类。由于对审计跟踪的严格要求,所有可疑活动都应记录用户ID和IP地址 public class MyLogger : ILogger { public void Log(string message) { var sb = new StringBuilder(); var context = HttpContext.Current; if (context
public class MyLogger : ILogger {
public void Log(string message) {
var sb = new StringBuilder();
var context = HttpContext.Current;
if (context != null) {
sb.AppendLine("User: " + context.User.Identity.Name);
sb.AppendLine("IP: " + context.Request.UserHostAddress);
}
sb.AppendLine("Message: " + message);
// store the message somewhere (db, file).
// e.g. messageRepository.Save(sb.ToString());
}
}
这种日志记录通常是如何完成的?IP地址是否仅记录在登录控制器上?如果是这样,用户ID如何传递到所有需要日志记录的地方?将其作为参数添加到每个方法听起来不是一个好主意。我假设用户id是指经过身份验证的用户的身份 无需传递此信息,因为它已在控制器中可用 对于当前用户:
User.Identity.Name
对于用户的IP地址:
Request.UserHostAddress
然而,日志记录通常是应用程序范围内的。您应该创建一个记录器接口,该接口可供应用程序的所有区域使用,而无需依赖System.Web
例如:
public interface ILogger {
void Log(string message);
}
然后,您可以创建一个调用当前HttpContext以获取用户标识和IP地址的实现
public class MyLogger : ILogger {
public void Log(string message) {
var sb = new StringBuilder();
var context = HttpContext.Current;
if (context != null) {
sb.AppendLine("User: " + context.User.Identity.Name);
sb.AppendLine("IP: " + context.Request.UserHostAddress);
}
sb.AppendLine("Message: " + message);
// store the message somewhere (db, file).
// e.g. messageRepository.Save(sb.ToString());
}
}
然后,每当您需要记录某些内容(应用程序中的任何位置)时,您只需依赖ILogger,IoC容器可以为您注入ILogger,然后只需调用logger.log(“某些消息”)
是的,这假设您正在对接口使用依赖项注入和编程,但是您应该:)