2014-01-08 56 views
1

当我们记录错误时,我们希望收集一些关于应用程序状态的信息,以帮助我们诊断原因。在我们的错误日志代码,我们有这样的事情:奇怪的UnsupportedOperationException cfdump中的java错误

<cfset local.scopeList = "CGI,FORM,URL,APPLICATION,REQUEST,COOKIE,CLIENT" />  
<cfsavecontent variable="local.errorInfo"> 
    <cfloop list="#local.scopeList#" index="local.scope"> 
    <cfdump var="#Evaluate(local.scope)#" /> 
    </cfloop> 
</cfsavecontent> 

其实更多一点有它比(我们检查local.scope是否试图cfdump,并关系到我们的信息收集一些其他的事情之前定义,但这些是基本的位)。 local.errorInfo是我们松鼠离开以供日后查看的一部分。

偶尔我们会看到一个异常,TagContext显示错误发生在我们代码中的cfdump行。有趣的是,在TagContext中,我们的代码是第三项。前两个是在\ WEB-INF \ cftags \ dump.cfm及其RAW_TRACE信息看起来像

at cfdump2ecfm1568701689._factor4({path on server}\WEB-INF\cftags\dump.cfm)

at cfdump2ecfm1568701689._factor1({path on server}\WEB-INF\cftags\dump.cfm)

在异常结构的实际消息项目为空字符串和类型是java.lang.UnsupportedOperationException

奇怪的是,如果我们手动运行这个精确的代码,它会清除问题,并且事情会一段时间继续,但是当它再次发生时,它会继续发生,直到我们“再次手动运行代码。这就像有些东西不可思议,只有我们帮助它才能恢复。

我们正在使用CF10和AFAIK,我们在第一次开始时就没有升级CF或Java。

我的问题是什么导致这个? (奖金,如果你能解释一下为什么我们的解决方法暂时“修复”吧。)

编辑这里有点堆栈跟踪的,从顶部开始:

java.lang.UnsupportedOperationException在 的ColdFusion .thread.HttpServletRequestWrapper.getLocalPort(HttpServletRequestWrapper.java:446) 在coldfusion.runtime.CgiScope.resolve(CgiScope.java:146)在 coldfusion.runtime.CgiScope.resolveName(CgiScope.java:328)在 coldfusion.runtime .Scope.get(Scope.java:60)at coldfusion.runtime.DotResolver.resolve(DotRe (ColdFusion.java:45)at coldfusion.runtime.DotResolver.resolve(DotResolver.java:72)at coldfusion.runtime.DotResolver.resolve(DotResolver.java:88)at coldfusion.runtime.NeoPageContext.SymTab_resolveSplitName(NeoPageContext。的java:1033) 在 coldfusion.runtime.NeoPageContext.SymTab_resolveDottedName(NeoPageContext.java:1011) 在 coldfusion.runtime.NeoPageContext.findAttribute(NeoPageContext.java:657) 在 coldfusion.runtime.NeoPageContext.findAttribute(NeoPageContext (CF:.java:630) at coldfusion.runtime.CFPage.IsDefined(CFPage.java:925)at cfdump2ecfm1568701689 $ funcDUMPSTRUCT.runFunction(E:\ cf10_final \ cfusion \ wwwroot \ WEB-INF \ cftags \ dump.cfm:1957)(UDFMethod.java:472) coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)at coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod。的java:368) 在 coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55) 在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)在 coldfusion.runtime.UDFMethod.invoke(UDFMethod.java :518)在 coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2624)在 cfdump2ecfm1568701689 $ funcHANDLESTRUCT.runFunction(E:\ cf10_final \ cfusion \ wwwroot的\ WEB-INF \ cftags \ dump.cfm:781) 在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)在 coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)在 coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:368) 在 coldfusion.filter.FunctionAccessFilter.invoke(F unctionAccessFilter.java:55) 在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)处 coldfusion.runtime.CfJspPage._invokeUDF coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:518)(CfJspPage。 (UDF:java:2624)at cfdump2ecfm1568701689 $ funcRENDEROUTPUT.runFunction(E:\ cf10_final \ cfusion \ wwwroot \ WEB-INF \ cftags \ dump.cfm:693) at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)在 coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:368) 在 coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:3)上的 21)在 coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220)在 coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2659)在 cfdump2ecfm1568701689._factor18(E:\ cf10_final \ cfusion \ wwwroot的\ WEB -INF \ cftags \ dump.cfm:565)at .....

+1

'UnsupportedOperationException'是许多类使用的通用异常。所以原因可能是很多事情。就像名字所暗示的那样,它被用来表示你正在做的事情(或者是某个cfdump正在做的事情)不被支持。你能发布完整的堆栈跟踪吗?它可能会提供一些关于*操作导致问题的线索。另外,当错误发生时,您是否能够分辨正在评估哪些local元素?我想知道是否a)可能与“评估”的使用有关,b)您是否确实需要“评估”。你可以使用结构符号'local [keyName]'来代替吗? – Leigh

+0

啊,是的 - 我本来打算包括一点堆栈跟踪并且忘记了。我会用这个更新这个问题。至于避免评估我喜欢这个想法。而不是处理代表我们想要倾倒的范围的字符串列表,也许我可以使用实际范围的数组来代替。我会给你一个机会,看看它的票价。谢谢! – jinglesthula

+0

我们想要的是实际的作用域,我们从一个与我们想要的作用域名称相同的字符串开始。如果我们把它拿出来,那么代码就变成了字符串“CGI”,“FORM”等的cfdump,这是没有用的,可能不会出现问题,因为现在我们试图转储完全不同的东西更简单)。 – jinglesthula

回答

0

我相信示波器不应该这样倾倒。展开你的cfloop,你应该没问题。

与变量不同,范围是一种不同的动物。我认为动态引用示波器本身并不自然,因此我不惊讶Evaluate被绊倒。

+0

我已经提出了这个想法,我们最终可能会尝试它(我们想在做一个完整的prod构建之前做更多的研究 - 它只发生在我们的prod服务器上)。你能否提供背景资料或参考资料,说明你为什么说范围不应该被这样倾倒?这可能有助于我们追踪原因。大多数时候它工作正常(这并不一定表明它确实安全)。我很好奇它的间歇性。顺便说一句,如果展开循环结束了工作我会接受这个作为答案为sho – jinglesthula

+0

我不知道上面的代码有任何*技术*错误,但是..它的工作原理可能取决于包含在各种结构。我怀疑'evaluate()'的用法可能是这里问题的原因...... – Leigh