python - 如何解析 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
解决方案
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}
)
- 前 4 位数字 (
- 一组 0 个或多个空格
- 时间(第二对
()
,与日期相同的逻辑,只是用冒号分隔(:
) - 一组 0 个或多个空格
- 另外 4 位数字 (
\d{4}
) 用于代码(如果它可以有任何不同的数字,您可以跳过花括号并添加 a+
代替,对于 a\d+
- 这将要求一个或多个数字) - 一组 0 个或多个空格
- 任何遗漏的东西(所以这将是一个描述)
Ubuntu 日志
如果我猜对了 Ubuntu 日志的输出,它或多或少与 MySQL 日志相同,所以我不会发布完整的解释 - 你可以随时在下面的 Regex101 演示中查看它。
正则表达式如下:
(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(?:\.\d+Z)\s*(\d+)\s*(.*)
关于它的一些注释:
- 主要变化是它以不同的方式分隔日期和时间,因此
T
在这个正则表达式中 - 它还使用
.#####
格式在几秒钟后存储毫秒(?) - 我丢弃此信息代替(如果您需要它,请告诉我) - 其余基本相同
这是一个更新的 Ubuntu 演示,它也存储毫秒并且不将其5
视为代码而是描述的一部分:链接到演示
推荐阅读
- corda - 两方之间的检查点流是否共享一个 ID?
- java - 我的代码可以在一部分代码中访问远程计算机上的 windows 共享文件夹,但不能在其他部分中访问。我可能会错过什么?
- reactjs - Firebase:电子邮件/密码身份验证有效,但用户的其他详细信息未存储在用户集合中
- javascript - 从数组中删除元素以及在 p5js 中动态显示在屏幕上的问题
- laravel - 多重关系 Laravel - 对象中的对象
- arrays - 面试题:偶数和奇数元素在偶数和奇数位置(保持元素顺序)
- isabelle - 查找类型的类的实例化
- apache-spark - 当数据按升序排序时,火花头函数是否返回最小值
- javascript - Tampermonkey 脚本——从旧标签切换到新标签后,将警报推送到新标签
- java - 使用 sharedpreferences 保存一个 arraylist 并在 listview 中显示它