3

私はGroovyを数年間使用していますが、ここ数か月は使用していないため、これは初心者の質問かもしれません. ログファイルを解析しようとしていますが、これを実行しようとすると:

myFile.eachLine { line ->

        /* 2014 Jul 30 08:55:42:645 GMT -4 BW.TMSJobService-TMSJobService-1
         * User [BW-User] - Job-2584 [Process/Common/LogAuditInfo.process/WriteToLog]:   */
        /* 1234567890123456789012345678901 */
        /* 0        1         2         3  */

        LogItem logItem = new LogItem()
        // get the time stamp
        String timestamp = line.substring(0, 31)
        SimpleDateFormat sdf = new SimpleDateFormat('yyyy MMM dd HH:mm:ss:S')
        logItem.date = sdf.parse(timestamp)
    }

私はこの例外を受け取ります:

スレッド「メイン」の例外 groovy.lang.MissingMethodException: メソッドの署名がありません: java.text.SimpleDateFormat.parse() は引数の型に適用されます: (java.lang.String, ce.readscript.TmsLogReader$_read_closure1_closure3) 値: [ 2014 年 7 月 30 日 08:34:47:079 GMT -4、ce.readscript.TmsLogReader$_read_closure1_closure3@14235ed5] 可能な解決策: parse(java.lang.String)、parse(java.lang.String、java.text.ParsePosition) 、 parse(java.lang.String, java.text.ParsePosition)、wait()、clone()、org.codehaus.scriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55) の clone() org.codehaus. .groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:46) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)

これは常にクロージャの最後の行です。「解析」の後にコードを追加すると、このコードが爆発します。"079".toLong() 呼び出しでもエラーが発生します。

スタック オーバーフローで同様のエラーがいくつか見られますが、問題を解決するものは何もありません。

4

2 に答える 2

1

It is trying to invoke SimpleDateFormat::parse(String, Closure) which doesn't exist. There seems to be a typo somewhere. It is working fine under groovy 2.1.8 and 2.3.4. You can try to make it a bit more groovy, to check whether it has some typing error not in your example:

new File("log.log").eachLine { line ->
  def item = new LogItem()
  def timestamp = line[0..30]
  item.date = Date.parse('yyyy MMM dd HH:mm:ss:S', timestamp)
}
于 2014-08-05T13:38:47.980 に答える
0

ファイルを削除して最初からやり直すという昔ながらの手法を使用しました。私は再び問題に遭遇していません。

于 2014-08-05T18:06:20.510 に答える