首页 > 解决方案 > 如何解析 sql 和 ubuntu 日志

问题描述

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

mysql日志:

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

标签: pythonregex

解决方案


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}) 用于代码(如果它可以有任何不同的数字,您可以跳过花括号并添加 a+代替,对于 a \d+- 这将要求一个或多个数字)
  • 一组 0 个或多个空格
  • 任何遗漏的东西(所以这将是一个描述)

MySQL 记录正则表达式演示


Ubuntu 日志

如果我猜对了 Ubuntu 日志的输出,它或多或少与 MySQL 日志相同,所以我不会发布完整的解释 - 你可以随时在下面的 Regex101 演示中查看它。

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

关于它的一些注释:

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

Ubuntu 记录正则表达式演示

这是一个更新的 Ubuntu 演示,它也存储毫秒并且不将其5视为代码而是描述的一部分:链接到演示


推荐阅读