精通 Grails: 在企业中使用 Grails
动态更改 log4j 设置
假设现在 Grails 应用程序表现异常。您应该查找问题的根源。查看 grails-app/conf/Config.groovy,您会发现根登录程序将它的输出发送到控制台,但过滤器被设置为 error — rootLogger="error,stdout"。您希望将登录级别更改为 trace 来提高控制台的输出量。
看一下 JConsole。在 log4j 文件夹下,您应该可以看到根 MBean。可以看到优先级属性被设置为 ERROR,就像在 Config.groovy 中一样。双击 ERROR 值并输入 TRACE,如图 6 所示:
图 7. 将根登录程序优先级从 ERROR 更改为 TRACE

为了验证控制台比以前更好用,在浏览器中,在 Grails 应用程序的主页上单击到 AirportMappingController 的链接。在大量新的输出中,您应该可以找到一些有关 Grails 如何导入初始列表的详细信息。请参阅清单 8 中的样例:
清单 8. 增加 log4j 输出
Dynamic method [redirect] looking up URL mapping for controller
[airportMapping] and action [list] and params
[["action":"index", "controller":"airportMapping"]] with [URL Mappings
------------
org.codehaus.groovy.grails.web.mapping.ResponseCodeUrlMapping@e73cb7
/rest/airport/(*)?
/(*)/(*)?/(*)?
]
[DEBUG] 09:04:47 (RedirectDynamicMethod.java:invoke:144)
Dynamic method [redirect] mapped to URL [/trip/airportMapping/list]
[DEBUG] 09:04:47 (RedirectDynamicMethod.java:redirectResponse:162)
Dynamic method [redirect] forwarding request to [/trip/airportMapping/list]
[DEBUG] 09:04:47 (RedirectDynamicMethod.java:redirectResponse:168)
Executing redirect with response
[com.opensymphony.module.sitemesh.filter.PageResponseWrapper@47b2e7]
现在您可以看到输出,以下是详细过程:%p 写出优先级别。这些消息很明显是 DEBUG 级别。%d{hh:mm:ss} 以小时:分钟:秒的格式显示日期戳。(%F:%M:%L) 将文件名、方法和行编号放在括号内。最后,%n%m%n%n 写入一个新行、消息和其他两行。
通过 JMX 对 log4j 所做的更改不是持久化的。如果重新启动 Grails,它会恢复到 Config.groovy 中的持久化设置。这意味着您可以任意处理 JMX 设置,而不用担心会永久打乱事情。对于 ConversionPattern,使用 JMX 是体验设置的很好方法,您可以找到最喜欢的设置。但是不要忘了将模式复制到 Config.groovy,以使更改是持久化的。