什么是最好的日志文件格式?[已关闭]

2022-09-03 06:46:49

我们正在开发一个数据库工具,我们希望以可扩展且易于导入数据库表的格式编写日志文件。我们都觉得使用SQL过滤这些信息是一个好主意,因为日志将是一个很长的文件,“搜索”可能不够好。你能给我一些建议吗?任何经验也将是有用的!提前致谢。


答案 1

我要说的第一件事是,您的文件格式应该是人类可读的。我的理由在这里给出:为什么我应该使用人类可读的文件格式。

除此之外,不可能用这样一个模糊的问题来回答。但是,以下是您应该考虑的一些问题:

  1. 此日志文件增长到多大?这与你拥有的空间相比如何?如果空间将是一个问题,那么更简洁的格式更好 - 例如协议缓冲区
  2. 如何查看日志文件?如果使用特定工具,则格式比您将要使用文本编辑器或Excel更重要
  3. 您存储的是哪种类型的数据?如果它只是ASCII文本,那么CSV效果很好。
  4. 类型信息在数据中是否重要?您是否需要将数字和日期作为数字和日期进行比较,而不仅仅是字符串?如果是这样,那么某种类型化系统(例如XMLJSON)可能更好。
  5. 数据是否会传输给其他人?在这种情况下,具有良好语言工具的阅读和写作可能很重要
  6. 数据需要多快写入?如果速度是一个问题(对于实时日志文件来说可能是这样),那么为此优化的格式可能很重要。
  7. 数据需要多快读取?
  8. 所有数据都需要在内存中,还是可以以序列化方式扫描?

当你能够回答所有这些问题时,你可能会自己知道答案。如果没有,请通过回答这些问题使您的问题更加具体,以便有人更容易帮助您。

就个人而言,当日志数据被写成CSV时,我一直很感激。它足够灵活,可以扩展(添加额外的列,更改字段的长度),可以快速读取和写入数据库电子表格以及数百种其他工具,并且可以在几秒钟内编码。但是,它确实有许多缺点 - 它很冗长,很容易使转义错误,未键入,并且如果重新排列列,则容易中断。


答案 2

我们发现,日志往往是一个严重的性能问题。创建不会降低公共网站速度的日志具有挑战性。

如果您有一个大日志,并且希望能够对它运行SQL查询而不会变慢,那么您将需要某些列的索引。您添加的每个索引都会大大减慢新日志条目的插入速度,从而导致高流量下的加载问题。

我们的技术是:

  • 使用具有简单格式的基本纯文本文件作为日志文件(例如:制表符分隔)
  • 不要使用XML,它使事情变得更加复杂(即缓慢),没有任何好处。
  • 该网站使用UNIX文件锁定,只需为每个日志条目附加一行
  • cron 作业每 10 分钟将日志的内容插入 SQL 数据库(我们使用 MySQL,但由您决定)。
  • 此 cron 作业一次处理一行文件,使用 UNIX 文件锁定来防止在处理日志时写入日志,但让公共站点有机会在处理每行并从文件中删除后命中日志(如何用您的首选语言执行此操作将是堆栈溢出的第二个问题)
  • cron 作业的超时时间为 5 分钟(因此每 10 分钟最多将花费 5 分钟来处理日志。这可确保服务器在出现性能问题时不会无限期地处理日志文件)

这使我们能够快速记录日志条目,而不会牺牲日志表中的索引,从而为我们提供针对日志表的快速SQL查询。

我们已经在各种 CentOS 服务器上使用它大约 6 或 7 年了,而且它一直坚如磐石。我想根据操作系统及其配置方式,这可能不是创建日志文件的好方法。但它在我们的测试中效果很好。

PS:我认为使文件可读没有任何意义。您只会在调试期间读取它,然后您再也不会触摸它了。


推荐