Grails的堆栈转储很长,调试起来有点麻烦。要找到问题的根源可能很棘手。例如,在执行"def foo = new Foo(a: a,b: b).save()“时,我在BootStrap.groovy中遇到过几次麻烦。你最喜欢的Grails应用调试技巧是什么?
发布于 2010-10-13 02:27:40
使用GrailsUtil记录异常。
try{
...
}catch (Exception e){
log.error("some message", GrailsUtil.sanitize(e))
...
}
发布于 2010-01-02 09:48:55
我不确定这是否可以开箱即用,但在webapps中,我发现有一个“我是谁?”是有用的。各种视图文件中的工具。
其思想是在呈现的HTML中发出一条消息,以识别片段。当我第一次遇到应用程序时,这一点尤其正确。
在Grails中,我使用一个自定义标记来实现这一点。例如,考虑学生的list.gsp:
<g:debug msg="student list" />
代码如下:
class MiscTagLib {
def debug = { map ->
if (grailsApplication.config.grails.views.debug.mode == true) {
def msg = map['msg']
out << "<h2>${msg}</h2><br/>"
}
}
}
关键是,如果需要,您可以将这些标记留在其中,因为只有在Config.groovy中启用了该模式时,它们才会出现:
grails.views.debug.mode=true
发布于 2011-12-06 00:22:18
将此代码添加到Bootsrap.groovy:init将覆盖保存方法并执行一些其他代码,在本例中将打印出错误消息。
class BootStrap {
def grailsApplication
def init = {servletContext ->
grailsApplication.domainClasses.each { clazz ->
clazz.clazz.get(-1)
def gormSave = clazz.metaClass.getMetaMethod('save')
clazz.metaClass.save = {->
def savedInstance = gormSave.invoke(delegate)
if (!savedInstance) {
delegate.errors.each {
println it
}
}
savedInstance
}
def gormSaveMap = clazz.metaClass.getMetaMethod('save', Map)
clazz.metaClass.save = { Map m ->
def savedInstance = gormSaveMap.invoke(delegate, m)
if (!savedInstance) {
delegate.errors.each {
println it
}
}
savedInstance
}
def gormSaveBoolean = clazz.metaClass.getMetaMethod('save', Boolean)
clazz.metaClass.save = { Boolean b ->
def savedInstance = gormSaveBoolean.invoke(delegate, b)
if (!savedInstance) {
delegate.errors.each {
println it
}
}
savedInstance
}
}
...
}
希望这对某人有帮助:)
(我知道这不是真的很干燥)
参考:http://grails.1312388.n4.nabble.com/How-to-override-save-method-on-domain-class-td3021424.html
https://stackoverflow.com/questions/536601
复制相似问题