我在Grails 2.3.11中创建了一个应用程序,配置Log4j的MD4以获取应用程序的每个请求的额外信息,以为我们可以通过用户电子邮件进行跟踪。
日志与logentries集成,今天,检查一些警报,我们意识到用户的请求似乎是另一个用户做了。但实际上,他登录了另一位用户的电子邮件。
这使我们认为此日志模式存在请求并发问题。
Log4j的版本是1.2.17。
有没有人知道这类应用程序在这些场景中是否存在并发问题?
另一件事是您添加为grails过滤器的实现,对于每个用户会话,每次对应用程序发出的请求都会出现这种情况。
package filters
import groovy.util.logging.Log4j
import org.apache.log4j.MDC
import com.peya.restaurantportal.SecurityService
import com.peya.restaurantportal.common.constants.ControllerConstants
@Log4j
class MappedDiagnosticContextFilters {
SecurityService securityService
Closure filters = {
addAdditionalRequestInfoToLogs(controller: ControllerConstants.ALL_CONTROLLERS, action: ControllerConstants.ALL_ACTIONS, controllerExclude: 'error|auth|healthCheck') {
before = {
MDC.clear()
try {
Map sessionUser = securityService.getSessionUser()
String email = sessionUser?.email
String selectedRestaurantId = sessionUser?.headerPageInfo?.selectedRestaurantId
if (email && selectedRestaurantId) {
MDC.put('email', "[$email]")
MDC.put('selectedRestaurantId', "[$selectedRestaurantId]")
}
} catch (Exception e) {
log.error "$e"
}
}
}
}
}