2014-01-08 53 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