问题 grails和调试UrlMappings


在grails中,我如何向UrlMappings.groovy(例如:println)添加一些代码,以便我可以弄清楚请求URI是什么以及哪个映射被命中(如果有的话)?

背景:

在这种情况下,有两个服务器根据文件扩展名提供不同的服务。因此,两台服务器需要始终查看文件扩展名以便继续进行错误处理。否则,服务器会混淆,1会提供404页面而不是我们的500页面。

更大的图片涉及由于类似NullPointerException之类的事情而采取500响应,并通过代码跟踪它以查看正在发生的事情。

我添加了类似下面的代码 http://jetlet.blogspot.com/2010/08/grails-exception-handling-with-response.html :

"500" (controller: "error", action: "internalError")

在测试中,我故意抛出NullPointerException(NPE)。在URL中输入浏览器的地址栏时,将调用500处理并提供500页。但是,当将表单发布到服务器并且使用NPE故意破坏处理代码时,不会调用“500”处理代码。表单操作中的URL似乎以扩展名结尾。所以,不确定为什么GET(浏览器URL)和POST(表单提交)之间的行为差​​异。

感谢有关跟踪此问题的见解和想法!


4327
2018-01-25 02:48


起源

对不起,你的话对我来说很模糊。你能介意给出更详细的例子吗? - Hoàng Long
在这里非常欢迎用来说明你的问题的代码 - fabien7474
感谢您关注此问题和回复。简而言之,当我在我的盒子上使用我的单个码头服务器进行本地工作时,一切正常。提交表单时,抛出NullPointerException的代码会按预期方式执行错误处理代码。当不在我的盒子上但在更复杂的环境中时,我得到一个404页面。这个涉及更多的环境有1个服务器,它在请求中寻找扩展来决定是否将请求传递到服务器号2.此时,我需要有人能够追踪正在发生的事情。 - finneycanhelp
哪些附加代码会有所帮助?表格代码?谢谢! :) - finneycanhelp


答案:


在Config.groovy中,您可以通过添加来修改url映射事件的log4j设置

all 'org.codehaus.groovy.grails.web.mapping'

到你现有的log4j设置。所有这些都是最详细的设置,所以如果它开始给你太多的话可以调整回来。您可以在官方grails文档中找到更多信息: http://grails.org/doc/latest/guide/3.%20Configuration.html


11
2018-01-25 21:24



感谢您的记录!奇怪的是,我没有看到处理500的相关日志记录。换句话说,我设置了 本地主机:8080 / KataIt /冷/某物 抛出一个NullPointerException和我看到的抛出异常的代码之间的唯一区别是:errors.GrailsExceptionResolver null然后堆栈跟踪和一些转发信息是相同的,无论你是否抛出NPE:filter.UrlMappingsFilter匹配URI [/ cool / something]到URL映射[/()/()? /(*)?],使用.. <clip>转发到[/grails/cool/something.dispatch] - finneycanhelp
'org.grails.web.mapping'如果是Grails 3 - Rax