Logils并发

时间:2017-11-15 16:02:02

标签: grails log4j

我在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" 
            }
         }
      }
   }
}

0 个答案:

没有答案