2013-04-25 33 views
1

在Grails中记录错误的命令对象的最有效方法是什么?如何记录Grails命令对象错误?

我当前的记录是正义的,

if (!cmd.validate()) log.debug("command invalid ${cmd.errors}") 

,但它只是里喷出输出的不可读的混乱。

任何人都有任何建议来改善命令对象的日志记录?

回答

6

添加依赖注入的messageSource豆:

def messageSource 

,然后你可以建立由字段名称与键入的地图该字段的验证错误:

def locale = Locale.default 
def stringsByField = [:].withDefault { [] } 
for (fieldErrors in cmd.errors) { 
    for (error in fieldErrors.allErrors) { 
     stringsByField[error.field] << messageSource.getMessage(error, locale) 
    } 
} 

并且您可以运行println stringsByField或按键查找各个问题。

在这里,我使用默认的区域设置,但是如果您使用的是本地化,请使用当前的区域设置。

3
cmd.errors.allErrors.each { 
    log.debug it 
} 

编辑(更详细)

cmd.errors.allErrors.each {err -> 
    log.debug("[$err.field]: $err") 
} 
+0

不会'log.debug(cmd.errors.allErrors)'是一个更简单的方法来做到这一点? – 2013-04-25 14:53:34

+0

你最终会再次喷涌。遍历每个'error'你可以在每个'field'(与@Burt在他的回答中提到的同义词)和'log'根据你的需要得到一个句柄。看我的编辑。 – dmahapatro 2013-04-25 15:06:43

+0

啊,我明白你的意思了。 – 2013-04-25 15:07:14