如何解析SQL和Ubuntu日志

时间:2018-10-26 05:37:13

标签: python regex

我想解析以下json对象格式的python中的日志。谁能建议我如何在python中做到这一点?

mysqllog:

2015-11-10 15:26:56 4348 [Note] InnoDB: Memory barrier is not used

ubuntu日志:

2018-10-12T04:25:39.841627Z        5 Init DB    mysql

1 个答案:

答案 0 :(得分:0)

MySQL日志

看看以下正则表达式:

(\d{4}-\d{2}-\d{2})\s*(\d{2}:\d{2}:\d{2})\s*(\d{4})\s*(.*)

可以在下面的正则表达式演示中看到完整的解释,但是基本上它的作用是寻找它:

  • 日期(第一对()
    • 前一年的前4位数字(\d{4}),然后是-
    • 月份的两个数字(\d{2})后接另一个破折号
    • 日期的另外两位数字(\d{2}
  • 一组0个或更多空格
  • 时间(第二对(),与日期具有相同的逻辑,只是用冒号(:隔开)
  • 一组0个或更多空格
  • 另外4个数字(\d{4})用于编码(如果可以有任意不同的数字,则可以跳过花括号并添加一个+来代替一个\d+-这将要求一位或多位数字)
  • 一组0个或更多空格
  • 任何遗漏的东西(因此将是描述)

MySQL logs Regex demo


Ubuntu日志

如果我猜对了Ubuntu日志的输出,则它与MySQL日志大致相同,因此我不会发表完整的解释-您可以随时在下面的Regex101演示中查看它。

正则表达式如下:
(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(?:\.\d+Z)\s*(\d+)\s*(.*)

一些注意事项:

  • 主要变化是它以不同的方式分隔日期和时间,因此此正则表达式中的T
  • 它还使用.#####格式在几秒后存储毫秒(?)-我舍弃此信息以替代(如果需要,请告诉我)
  • 其余基本相同

Ubuntu logs Regex demo

这是一个更新的Ubuntu演示,其中还存储了毫秒,并且不将5视为代码,而是描述的一部分:Link to demo