Java 方法解析日志记录

Java 方法解析日志记录,java,regex,scala,date,Java,Regex,Scala,Date,日志是一个ASCII文件,每个请求一行,包含以下列: 提出请求的主机 不用 如果可能,请输入主机名,否则,如果无法查找名称,请输入Internet地址 格式为“DAY MON DD HH:MM:SS YYYY”的时间戳,其中DAY是一周中的一天,MON是一个月的名称,DD是一个月中的一天,HH:MM:SS是一天中使用24小时时钟的时间,YYYY是一年。时区是-0400 请求以引号给出 HTTP回复代码 回复中的字节数 因此,应该解析像这样的字符串: 202.32.92.47--[01/Jun/1

日志是一个ASCII文件,每个请求一行,包含以下列:

  • 提出请求的主机
  • 不用
  • 如果可能,请输入主机名,否则,如果无法查找名称,请输入Internet地址
  • 格式为“DAY MON DD HH:MM:SS YYYY”的时间戳,其中DAY是一周中的一天,MON是一个月的名称,DD是一个月中的一天,HH:MM:SS是一天中使用24小时时钟的时间,YYYY是一年。时区是-0400
  • 请求以引号给出
  • HTTP回复代码
  • 回复中的字节数
  • 因此,应该解析像这样的字符串:

    202.32.92.47--[01/Jun/1995:00:00:59-0600]“GET”run/~scottp/publish.html“200271

    ix-or7-27.ix.netcom.com-John Dou[01/Jun/1995:00:02:51-0600]“GET/~ladd/ostriches.html”200 205908

    这些都应该被忽略:

    maz3.maz.net---[11/Oa67220.dial.tip.net---[12/Oct/1995:01:39:12-0600]“POST/cgi-bin/phone.pl HTTP/1.0”200 309

    129.186.123.55---[12/Oct/1995ag5881.usask.ca---[12/Oct/1995:16:07:36-0600]“GET/images/letter_32.gif HTTP/1.0”200 149

    已经尝试了大量的正则表达式,如
    ^([^\s]*).-.([^\s]*)?.\[([^\]*)]。“([^\”]*)”([^\s]\d*)。([^\s]\d*)?$


    但是,要么它没有忽略上面的错误日志,要么它只是导致了错误。

    您可以尝试将下面的示例粘贴到文本区域,使用不同的正则表达式,看看它是如何失败的,失败的地方。您的问题很难理解,需要改进,特别是关于哪些特性决定哪些应该失败选择的和不应该选择的。首先将它们作为JUnit测试编写。