我正在开发服务器端逻辑,以处理请求并用数据响应前端服务器以及移动应用程序的直接连接。
我已经实现了SessionContext类,它基本上确保在DB中为每个被调用的服务都有匹配的会话记录(忘记密码的情况除外,等等)。
我现在正在尝试实现事件日志记录。我想有一个通用的逻辑,这样我可以记录所有的请求,异常,数据,等等
我已经想出了这个代码,但不知怎么的,我感觉不太好——每个服务方法都有太多的代码。有没有什么聪明的技巧可以让它变得更短、更容易阅读/编码?
当前的实现将使用EventLogic类将事件记录到事件表中。在某个时刻,一些事件可能与会话有关,所以我将eventLog作为参数传递给SessionContext(以创建事件和会话之间的链接)。SessionContext在成功处置时保存实体数据。。。我有一种直觉,我的设计出了问题。
public Session CreateUser(string email, string password, System.Net.IPAddress ipAddress)
{
using (var eventLog = new EventLogic())
{
try
{
eventLog.LogCreateUser(email, password, ipAddress);
using (var context = SessionContext.CreateUser(eventLog, email, password, ipAddress))
{
return new Session()
{
Id = context.Session.UId,
HasExpired = context.Session.IsClosed,
IsEmailVerified = context.Session.User.IsEmailVerified,
TimeCreated = context.Session.TimeCreated,
PublicUserId = CryptoHelper.GuidFromId(context.Session, context.Session.UserId, CryptoHelper.TargetTypeEnum.PublicUser),
ServerTime = context.Time
};
}
}
catch (Exception e)
{
eventLog.Exception(e);
}
}
}
您应该考虑使用类似SLF4J+LogBack的东西(例如)进行日志记录。
如果您的类遵循SRP,则每个应用程序的调用类型(如LogCreateUser
)不应超过一个。这意味着,不需要将日志记录逻辑提取到一个新的类中。