【问题标题】:How to read log file for last one hour如何读取过去一小时的日志文件
【发布时间】:2021-04-08 09:53:18
【问题描述】:

我正在尝试读取 Linux 服务器日志文件中可用的最后一小时日志。我已经尝试过以下命令,但它对我不起作用。

命令 1:

    START=`date --date='now-60 minutes' '+%Y-%m-%d %H:%M'`
    END=`date --date='now' '+%Y-%m-%d %H:%M'`
    awk "/$START/, /$END/" filepath

命令 2:

   grep "^$(date -d -1hour +'%Y-%m-%d %H')" filepath

命令 3:

   awk -vdate=$(date -d "60 minutes ago" '+%Y-%m-%d%H:%M:%S') \ '$1$2 >= date { print }' filepath

解决此查询的任何建议/输入。

示例日志

[01/01/21 22:40:26:088 IST] 0000002a SystemOut     O [WebContainer : 0 ] ERROR bla bla bla
[01/01/21 22:40:26:166 IST] 0000002a SystemOut     O [WebContainer : 0 ] ERROR bla bla bla
[01/01/21 22:40:27:360 IST] 0000002a SystemOut     O [WebContainer : 0 ] ERROR bla bla bla
[01/01/21 22:40:27:475 IST] 0000002a SystemOut     O [WebContainer : 0 ] ERROR bla bla bla
[01/01/21 22:40:27:668 IST] 0000002a SystemOut     O [WebContainer : 0 ] ERROR bla bla bla
[01/01/21 22:40:28:211 IST] 0000002a SystemOut     O [WebContainer : 0 ] ERROR bla bla bla
[01/01/21 22:40:29:447 IST] 00000040 SystemOut     O [WebContainer : 4 ] ERROR bla bla bla
[01/01/21 22:40:31:328 IST] 00000036 SystemOut     O [WebContainer : 3 ] ERROR bla bla bla

【问题讨论】:

    标签: shell awk grep


    【解决方案1】:

    您正在尝试将一种格式的日期 (%Y-%m-%d) 与日志文件中完全不同格式的日期 (%m/%d/%y) 进行比较。试试这个:

    awk -v d="$(date --date='now-60 minutes' '+%y%m%d%H%M')" -F'[[/ :]' '($4$2$3$5$6) > d' file
    

    我假设:

    1. 01/01 在您的示例中,日期是月/日而不是日/月 - 如果我猜错了,请交换 2 美元和 3 美元。
    2. 输入文件中的时间总是 2 位数,例如09 而不是 9 - 如果有误,请使用 sprintf() 生成时间戳以进行比较,而不仅仅是连接值。
    3. 您在与日志文件日期所在的时区相同的时区执行此操作 - 如果有误,请在运行脚本之前设置 TZ=...

    【讨论】:

    • 夏令时会搞砸的:S
    • @kvantour 使用 IST 的国家(印度和斯里兰卡)不遵守 DST。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    相关资源
    最近更新 更多