2014-01-19 28 views
1

我有一个控制器,其中大部分操作需要用户登录。对于那些操作,我希望以调试模式登录用户的ID以防万一我需要跟踪用户问题可能正在生产中。例如:将会话详细信息添加到控制器日志方法

def controller { 

def action1 { 
    log.debug('action1 called for ' + user.id) 
    ... 
} 

def action2 { 
    log.debug('action2 called for ' + user.id) 
    ... 
} 

这会变得有点多余。有没有一种方法来重构它,以便遵循DRY原则?如果这有所帮助,我正在使用log4j。

回答

1

我会建议使用a filter在您的控制器中应用此行为。这样您可以重复使用多个控制器或操作的过滤器。

虽然文档中有一个排序日志过滤器的例子,但这是一个非常简单的版本,它展示了相同的概念。

package com.example 
class LoggingFilterExample { 
    def filters = { 
    all(controller:"*", action:"*") { 
     before = { 
     log.debug("${controllerName} ${actionName} called for ${session.userid}") 
     } 
    } 
    } 
} 
+0

良好的通话。我最终使用request.userPrincipal?.name来显示spring security的用户名。 – spock99

相关问题