Drop1 2023-01-21 17:08 采纳率: 37.5%
浏览 41
已结题

日志最后有报错,怎样拿到最后一条日志的时间

问题遇到的现象和发生背景

一个目录下有一些错误日志文件,文件内容是下面这样的:

2023-01-18 01:02:25.142 <INFO><WebAccessStatistic.java><execution><98>处理
...
...
2023-01-18 05:05:01.645 <INFO><WebAccessStatistic.java><execution><98>处理
2023-01-18 05:10:03.478 <ERROR><WebAccessStatistic.java><execution><444>[异常结束。
                 at com.ssh2.Connection.java:525)
                 at com.ssh2.diss.Handling.java:221)
                 at com.ssh2.middle.WebVisit.java:54)
]
2023-01-18 05:20:06.240 <ERROR><WebAccessStatistic.java><execution><672>[异常结束。
2023-01-18 05:30:07.520 <ERROR><WebAccessStatistic.java><execution><444>[异常结束。
                 at com.ssh2.Connection.java:525)
                 at com.ssh2.diss.Handling.java:221)
                 at com.ssh2.middle.WebVisit.java:54)
]
我的解答思路和尝试过的方法

find logs/** -name "." -exec bash -c "echo -n '文件名:{},'&&head -1 {}|cut -c-19|tr '\n' ','&&tail -1 {}|cut -c-19" ; >> /dataAnalysis.csv
用这个命令能够生成:文件名及对应的开始时间和结束时间,但这条命令对于没有错误日志是可以的,但像上面有报错日志时就不行了。

我想要达到的结果

目标:
第1个:对这些日志文件,生成“文件名(包括路径)及对应这个日志文件中的开始时间和最后一条能截取到的时间,对上面文件指的就是:2023-01-18 05:30:07。
第2个:对这些日志文件,生成“文件名(包括路径)及对应这个日志文件中的开始时间和最后一条非ERROR日志的时间,对上面文件指的就是:2023-01-18 05:05:01。

非常感谢!

  • 写回答

3条回答 默认 最新

  • 社区专家-Monster-XH 2023-01-21 17:30
    关注

    您可以使用 awk 来实现您的目标。可以使用 awk 的多行匹配功能,将 ERROR 日志分开处理。

    第1个目标:

    awk '{print $1,$2}' logs/** | awk '{print FILENAME,$1,$2}' >> /dataAnalysis.csv
    
    
    

    第2个目标:

    awk '!/ERROR/{print $1,$2}' logs/** | awk '{print FILENAME,$1,$2}' >> /dataAnalysis.csv
    
    
    

    这些命令将文件名和对应的开始时间和结束时间写入 /dataAnalysis.csv 文件中。

    此外,您还可以使用 sed 或 grep 等命令来进一步过滤日志文件中的信息。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月25日
  • 已采纳回答 5月17日
  • 修改了问题 1月21日
  • 创建了问题 1月21日