htmlunit去除無用日志

困擾

當(dāng)前項(xiàng)目經(jīng)常會使用到htmlunit,但是每次都有一大堆的無用日志輸出呻纹,排查問題的時(shí)候經(jīng)常造成干擾堆生。所以研究了下如何去除日志专缠。

2017-07-13 17:10:52,945 ERROR [main] javascript.StrictErrorReporter:83 - runtimeError: message=[An invalid or illegal selector was specified (selector: '*,:x' error: Invalid selector: *:x).] sourceName=[https://g.alicdn.com/??aliyun/www-dpl/0.5.73/knight/js/base-all.js,aliyun/www-dpl/0.5.47/knight/js/util/aliyun-lego-system.js] line=[1] lineSource=[null] lineOffset=[0]
2017-07-13 17:10:53,307 WARN  [main] htmlunit.IncorrectnessListenerImpl:39 - Expected content type of 'application/javascript' or 'application/ecmascript' for remotely loaded JavaScript element at 'https://www.aliyun.com/rgn/aliyun_footer?renderer=js', but got 'text/html'.
2017-07-13 17:10:53,517 WARN  [main] htmlunit.IncorrectnessListenerImpl:39 - Obsolete content type encountered: 'text/javascript'.
2017-07-13 17:10:54,865 WARN  [main] htmlunit.IncorrectnessListenerImpl:39 - Obsolete content type encountered: 'text/javascript'.
2017-07-13 17:10:54,955 ERROR [main] javascript.StrictErrorReporter:83 - runtimeError: message=[An invalid or illegal selector was specified (selector: '*,:x' error: Invalid selector: *:x).] sourceName=[https://g.alicdn.com/aliyun/account/0.0.25/js/jQuery1.9.0.js?v=579226] line=[2] lineSource=[null] lineOffset=[0]
2017-07-13 17:10:55,687 WARN  [main] htmlunit.IncorrectnessListenerImpl:39 - Obsolete content type encountered: 'application/x-javascript'.
2017-07-13 17:10:55,856 WARN  [main] htmlunit.IncorrectnessListenerImpl:39 - Obsolete content type encountered: 'application/x-javascript'.
2017-07-13 17:10:57,447 INFO  [main] javascript.JavaScriptEngine:967 - Caught script exception
======= EXCEPTION START ========
EcmaError: lineNumber=[2] column=[0] lineSource=[<no source>] name=[TypeError] sourceName=[https://g.alicdn.com/security/umscript/3.3.2/um.js] message=[TypeError: Cannot find function createDataChannel in object [object webkitRTCPeerConnection]. (https://g.alicdn.com/security/umscript/3.3.2/um.js#2)]
com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot find function createDataChannel in object [object webkitRTCPeerConnection]. (https://g.alicdn.com/security/umscript/3.3.2/um.js#2)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:865)
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:628)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:513)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:747)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:1032)
    at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:395)
    at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:276)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:913)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.access$500(JavaScriptEngine.java:105)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:860)
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:628)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:513)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:747)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:722)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptIfPossible(HtmlPage.java:945)
    at com.gargoylesoftware.htmlunit.html.HtmlScript.executeInlineScriptIfNeeded(HtmlScript.java:351)
    at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:411)
    at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:276)
    at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:290)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:800)
    at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:757)
    at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1170)
    at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1072)
    at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206)
    at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:330)
    at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3126)
    at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2093)
    at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:920)
    at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
    at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:1040)
    at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:253)
    at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:199)
    at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:272)
    at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:160)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:476)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:350)
    at com.gargoylesoftware.htmlunit.html.BaseFrameElement.loadInnerPageIfPossible(BaseFrameElement.java:184)
    at com.gargoylesoftware.htmlunit.html.BaseFrameElement.loadInnerPage(BaseFrameElement.java:122)
    at com.gargoylesoftware.htmlunit.html.BaseFrameElement$2.execute(BaseFrameElement.java:411)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:913)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.access$500(JavaScriptEngine.java:105)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:860)
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:628)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:513)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:747)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:722)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptIfPossible(HtmlPage.java:945)
    at com.gargoylesoftware.htmlunit.html.HtmlScript.executeInlineScriptIfNeeded(HtmlScript.java:351)
    at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:411)
    at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:276)
    at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:290)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:800)
    at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:757)
    at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1170)
    at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1072)
    at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206)
    at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:330)
    at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3126)
    at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2093)
    at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:920)
    at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
    at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:1040)
    at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:253)
    at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:199)
    at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:272)
    at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:160)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:476)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:350)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:415)
    at com.alibaba.qa.context.MockUserLogin.login(MockUserLogin.java:42)
    at com.alibaba.qa.context.MockUserLogin.updateLoginContext(MockUserLogin.java:213)
    at com.alibaba.qa.idedevelop.IDEBaseTest.beforeClassSetup(IDEBaseTest.java:49)
    at com.alibaba.qa.monitor.SearchTest.prepare(SearchTest.java:38)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:564)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
    at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:175)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:107)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
    at org.testng.TestNG.run(TestNG.java:1031)
    at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127)
Caused by: net.sourceforge.htmlunit.corejs.javascript.EcmaError: TypeError: Cannot find function createDataChannel in object [object webkitRTCPeerConnection]. (https://g.alicdn.com/security/umscript/3.3.2/um.js#2)

解決方案

針對不同的日志實(shí)現(xiàn)我收集了幾種不同的實(shí)現(xiàn)方案,以備后用

log4j

我使用的是slf4j-apislf4j-log4j12log4j
在配置文件log4j.properties中加入如下配置項(xiàng)

log4j.logger.httpclient.wire=fatal
log4j.logger.org.apache.commons=fatal
log4j.logger.com.gargoylesoftware.htmlunit=fatal
log4j.logger.com.gargoylesoftware.htmlunit.WebTestCase=fatal
log4j.logger.com.gargoylesoftware.htmlunit.javascript.DebugFrameImpl=fatal

java.util.logging

在方法中加入如下行

java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF); 

org.apache.commons.logging.Log

在方法中加入如下行

LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");

參考鏈接:https://stackoverflow.com/questions/3600557/turning-htmlunit-warnings-off?answertab=votes

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末淑仆,一起剝皮案震驚了整個(gè)濱河市涝婉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔗怠,老刑警劉巖嘁圈,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蟀淮,居然都是意外死亡最住,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門怠惶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涨缚,“玉大人,你說我怎么就攤上這事策治∨海” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵通惫,是天一觀的道長茂翔。 經(jīng)常有香客問我,道長履腋,這世上最難降的妖魔是什么珊燎? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮遵湖,結(jié)果婚禮上悔政,老公的妹妹穿的比我還像新娘。我一直安慰自己延旧,他們只是感情好谋国,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迁沫,像睡著了一般芦瘾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上集畅,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天近弟,我揣著相機(jī)與錄音,去河邊找鬼牡整。 笑死藐吮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谣辞,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼迫摔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了泥从?” 一聲冷哼從身側(cè)響起句占,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎躯嫉,沒想到半個(gè)月后纱烘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祈餐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年胳岂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诊沪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖粘勒,靈堂內(nèi)的尸體忽然破棺而出鹤树,到底是詐尸還是另有隱情击费,我是刑警寧澤俏让,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站鳍徽,受9級特大地震影響资锰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜阶祭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一绷杜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胖翰,春花似錦接剩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疫稿。三九已至培他,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間遗座,已是汗流浹背舀凛。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留途蒋,地道東北人猛遍。 一個(gè)月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親懊烤。 傳聞我的和親對象是個(gè)殘疾皇子梯醒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 概述 在項(xiàng)目開發(fā)中,為了跟蹤代碼的運(yùn)行情況腌紧,常常要使用日志來記錄信息茸习。在Java世界,有很多的日志工具庫來實(shí)現(xiàn)日志...
    靜默虛空閱讀 1,854評論 1 9
  • 前言 最近學(xué)習(xí)開java web服務(wù)器開發(fā)壁肋,開始學(xué)習(xí)java号胚,處理業(yè)務(wù)邏輯,但對其中的日志比較好奇浸遗,之前沒怎么接觸...
    九風(fēng)萍舟閱讀 3,294評論 1 6
  • 歷史 log4j可以當(dāng)之無愧地說是Java日志框架的元老猫胁,1999年發(fā)布首個(gè)版本,2012年發(fā)布最后一個(gè)版本跛锌,20...
    kelgon閱讀 10,155評論 3 53
  • 在項(xiàng)目開發(fā)過程中弃秆,我們可以通過 debug 查找問題。而在線上環(huán)境我們查找問題只能通過打印日志的方式查找問題察净。因此...
    Java架構(gòu)閱讀 3,473評論 2 41
  • 一驾茴、Java日志體系概述 圖1-1 展示了Java日志體系的三個(gè)主要部分: 日志門面接口(SLF4J、JCL) 一...
    Lucky_Micky閱讀 17,662評論 0 19