クローラーサービスmitsubachiのCUIツールをアップデートしました
弊社マイニングブラウニーで提供しております、ウェブサイトをクローリングする
プラットフォームサービス「mitsubachi」ですが、これを操作するCUIツールの
ログ出力機能をアップデートしました。
mitsubachi 入門ガイド-mitsubachi CUI Toolをセットアップする
mitsubachiはクロール処理を個々のキューで処理をするため、ログがキューの
単位で独立して出力されます。
そのためトレースがとてもしにくいという残念な一面がありました。。
CUIツールを利用したmitsコマンドでクロールのログを取得しようとすると...
$ mits rlist [project-name] -f log Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 -Dfile.encoding=UTF-8 No. 1:リソース名[log/stderr/20130311/141149_search.rb.08760274.log],サイズ[0],タイムスタンプ[2013-03-11T14:11:50+0900],コンテンツタイプ[text/plain; charset=utf8] No. 2:リソース名[log/stderr/20130311/141208_list.rb.94416081.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:09+0900],コンテンツタイプ[text/plain; charset=utf8] No. 3:リソース名[log/stderr/20130311/141211_list.rb.95394080.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:12+0900],コンテンツタイプ[text/plain; charset=utf8] No. 4:リソース名[log/stderr/20130311/141215_list.rb.00687670.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:16+0900],コンテンツタイプ[text/plain; charset=utf8] No. 5:リソース名[log/stderr/20130311/141225_list.rb.81718690.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:26+0900],コンテンツタイプ[text/plain; charset=utf8] No. 6:リソース名[log/stderr/20130311/141235_list.rb.24222363.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:36+0900],コンテンツタイプ[text/plain; charset=utf8] No. 7:リソース名[log/stderr/20130311/141235_list.rb.37079102.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:36+0900],コンテンツタイプ[text/plain; charset=utf8] No. 8:リソース名[log/stderr/20130311/141237_list.rb.37947385.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:38+0900],コンテンツタイプ[text/plain; charset=utf8] No. 9:リソース名[log/stderr/20130311/141247_list.rb.91683724.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:48+0900],コンテンツタイプ[text/plain; charset=utf8] No. 10:リソース名[log/stderr/20130311/141251_detail.rb.76353917.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:52+0900],コンテンツタイプ[text/plain; charset=utf8] No. 11:リソース名[log/stderr/20130311/141254_list.rb.46466238.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:55+0900],コンテンツタイプ[text/plain; charset=utf8] No. 12:リソース名[log/stderr/20130311/141258_list.rb.00179981.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:59+0900],コンテンツタイプ[text/plain; charset=utf8] No. 13:リソース名[log/stderr/20130311/141300_detail.rb.27872237.log],サイズ[1393],タイムスタンプ[2013-03-11T14:13:01+0900],コンテンツタイプ[text/plain; charset=utf8] No. 14:リソース名[log/stderr/20130311/141311_detail.rb.58600194.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:12+0900],コンテンツタイプ[text/plain; charset=utf8] No. 15:リソース名[log/stderr/20130311/141313_detail.rb.15733403.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:14+0900],コンテンツタイプ[text/plain; charset=utf8] No. 16:リソース名[log/stderr/20130311/141321_detail.rb.41712169.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:22+0900],コンテンツタイプ[text/plain; charset=utf8] No. 17:リソース名[log/stderr/20130311/141336_detail.rb.57443087.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:37+0900],コンテンツタイプ[text/plain; charset=utf8] No. 18:リソース名[log/stderr/20130311/141343_detail.rb.20019418.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:44+0900],コンテンツタイプ[text/plain; charset=utf8] No. 19:リソース名[log/stderr/20130311/141348_list.rb.41029642.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:49+0900],コンテンツタイプ[text/plain; charset=utf8] No. 20:リソース名[log/stderr/20130311/141349_detail.rb.88511458.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:50+0900],コンテンツタイプ[text/plain; charset=utf8] No. 21:リソース名[log/stderr/20130311/141358_detail.rb.01599541.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:59+0900],コンテンツタイプ[text/plain; charset=utf8] No. 22:リソース名[log/stderr/20130311/141400_detail.rb.01626726.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:01+0900],コンテンツタイプ[text/plain; charset=utf8] No. 23:リソース名[log/stderr/20130311/141403_detail.rb.23286314.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:04+0900],コンテンツタイプ[text/plain; charset=utf8] No. 24:リソース名[log/stderr/20130311/141409_detail.rb.19171701.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:10+0900],コンテンツタイプ[text/plain; charset=utf8] No. 25:リソース名[log/stderr/20130311/141409_detail.rb.45222870.log],サイズ[1393],タイムスタンプ[2013-03-11T14:14:10+0900],コンテンツタイプ[text/plain; charset=utf8] No. 26:リソース名[log/stderr/20130311/141421_detail.rb.33944169.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:22+0900],コンテンツタイプ[text/plain; charset=utf8] No. 27:リソース名[log/stderr/20130311/141426_detail.rb.00015241.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:27+0900],コンテンツタイプ[text/plain; charset=utf8] No. 28:リソース名[log/stderr/20130311/141429_list.rb.11848910.log],サイズ[1393],タイムスタンプ[2013-03-11T14:14:30+0900],コンテンツタイプ[text/plain; charset=utf8] No. 29:リソース名[log/stderr/20130311/141430_detail.rb.00386591.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:31+0900],コンテンツタイプ[text/plain; charset=utf8] No. 30:リソース名[log/stderr/20130311/141434_detail.rb.79122253.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:35+0900],コンテンツタイプ[text/plain; charset=utf8] No. 31:リソース名[log/stderr/20130311/141447_detail.rb.41676158.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:48+0900],コンテンツタイプ[text/plain; charset=utf8] No. 32:リソース名[log/stderr/20130311/141457_detail.rb.09392800.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:58+0900],コンテンツタイプ[text/plain; charset=utf8] No. 33:リソース名[log/stderr/20130311/141458_detail.rb.33425740.log],サイズ[1393],タイムスタンプ[2013-03-11T14:14:59+0900],コンテンツタイプ[text/plain; charset=utf8] No. 34:リソース名[log/stderr/20130311/141509_detail.rb.81220295.log],サイズ[0],タイムスタンプ[2013-03-11T14:15:10+0900],コンテンツタイプ[text/plain; charset=utf8] No. 35:リソース名[log/stderr/20130311/141515_detail.rb.36874013.log],サイズ[0],タイムスタンプ[2013-03-11T14:15:16+0900],コンテンツタイプ[text/plain; charset=utf8] No. 36:リソース名[log/stderr/20130311/141518_detail.rb.80295723.log],サイズ[0],タイムスタンプ[2013-03-11T14:15:19+0900],コンテンツタイプ[text/plain; charset=utf8] No. 37:リソース名[log/stderr/20130311/141518_detail.rb.98154046.log],サイズ[0],タイムスタンプ[2013-03-11T14:15:19+0900],コンテンツタイプ[text/plain; charset=utf8] No. 38:リソース名[log/stderr/20130311/141521_detail.rb.06842553.log],サイズ[0],タイムスタンプ[2013-03-11T14:15:22+0900],コンテンツタイプ[text/plain; charset=utf8] No. 39:リソース名[log/stderr/20130311/141525_detail.rb.67984060.log],サイズ[0],タイムスタンプ[2013-03-11T14:15:26+0900],コンテンツタイプ[text/plain; charset=utf8] No. 40:リソース名[log/stderr/20130311/141532_detail.rb.15367995.log],サイズ[0],タイムスタンプ[2013-03-11T14:15:33+0900],コンテンツタイプ[text/plain; charset=utf8] ...
ギャーーなげえ!
というありさまです。
これを少しでも見やすくするために、ログをリスト出力するlgetという機能を
用意しました。
$ mits lget [project-name] -t e > err.log
このようにすると、err.logのなかに
og/stderr/20130311/141300_detail.rb.27872237.log NoMethodError: undefined method `text' for nil:NilClass (root) at <script>:21 org.jruby.embed.EvalFailedException: (NoMethodError) undefined method `text' for nil:NilClass at org.jruby.embed.internal.EmbedEvalUnitImpl.run(EmbedEvalUnitImpl.java:127) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:129) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:157) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.execute(SandboxedScriptExecutor.java:91) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.main(SandboxedScriptExecutor.java:144) Caused by: org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `text' for nil:NilClass Exception in thread "main" javax.script.ScriptException: org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `text' for nil:NilClass at org.jruby.embed.jsr223.JRubyEngine.wrapException(JRubyEngine.java:115) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:132) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:157) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.execute(SandboxedScriptExecutor.java:91) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.main(SandboxedScriptExecutor.java:144) Caused by: org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `text' for nil:NilClass log/stderr/20130311/141300_detail.rb.27872237.log NoMethodError: undefined method `text' for nil:NilClass (root) at <script>:21 org.jruby.embed.EvalFailedException: (NoMethodError) undefined method `text' for nil:NilClass at org.jruby.embed.internal.EmbedEvalUnitImpl.run(EmbedEvalUnitImpl.java:127) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:129) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:157) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.execute(SandboxedScriptExecutor.java:91) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.main(SandboxedScriptExecutor.java:144) Caused by: org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `text' for nil:NilClass Exception in thread "main" javax.script.ScriptException: org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `text' for nil:NilClass at org.jruby.embed.jsr223.JRubyEngine.wrapException(JRubyEngine.java:115) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:132) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:157) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.execute(SandboxedScriptExecutor.java:91) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.main(SandboxedScriptExecutor.java:144) Caused by: org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `text' for nil:NilClass ...
このようなスタックトレースが出力されます。
上の例だとクロールスクリプトdetail.rbのの21行目でエラーが出ているな
ということがわかります。
mitsubachiクローラーが途中で中断してしまってるけど、どこでエラーしたのか
わからないときに使えます。
ぜひ使ってみてください。
mitsubachi CUI Tool ver. 2.1.0 ダウンロード