【问题标题】:Parsing a server log file every x amount of time每 x 时间解析一个服务器日志文件
【发布时间】:2020-05-21 13:21:17
【问题描述】:

我正在尝试每 24 小时在 javascript 中解析一个服务器日志文件并将信息存储在数据库 (mongodb) 中。

数据的解析和存储让我很困惑

日志文件格式如下

[2020.02.05-10.44.02:841][244]2020.02.04_10.44.02: USERNAME joined this SERVER!
[2020.02.05-11.45.58:147][188]2020.02.04_11.45.58: GROUPNAME slayed a monster!
[2020.02.05-11.46.39:852][437]2020.02.04_11.46.39: USERNAME left this SERVER!
[2020.02.05-11.46.39:854][437]2020.02.04_11.46.39: GROUPNAME was slayed by GROUPNAME
[2020.02.05-11.46.57:317][956]2020.02.04_11.59.59: USERNAME joined this server!

我想获取每个用户在服务器上花费的时间、杀死的数量等。

我以前没有真正做过这样的事情,并且证明是相当具有挑战性的,我认为这是日志文件可以以在线用户结尾的事实,所以我需要在下一次解析日志时对此进行补偿。

我可以将日志分成每行的一个数组,映射它,然后检查该值是否包括“加入此服务器”,我可以通过这种方式获取数据,但我对如何存储它感到困惑,然后与下一个值包括“离开此服务器”..

也许正则表达式会是更好的解决方案?正如我所说的,我以前没有做过这样的事情,所以我不知道。

任何帮助或示例代码将不胜感激。

【问题讨论】:

  • 每天有多少用户在线?日志只是一个巨大的连续文件,还是按天拆分?
  • 我不能说每天有多少用户。日志每 24 小时拆分一次
  • 除非你有一些魔法告诉你用户所在的组,否则你将很难获得每个用户的击杀数。
  • 日志文件是否曾经出现过无法记录USERNAME left this SERVER!导致连续USERNAME joined this SERVER!的问题?
  • 显然大声笑,它必须是每组的杀戮,不,它没有,当获取日志时它包含 24 小时的数据,24 小时后它会被新数据替换。跨度>

标签: javascript node.js regex mongodb parsing


【解决方案1】:

有一个程序安排脚本的日常运行。

在您的脚本中:

  1. 实例化一个数据结构(只需一个对象就可以了!),以用户 ID 为键,记录开始和结束时间,以及杀戮等。
  2. 用昨晚(来自文件)的不完整信息来补充数据结构
  3. 打开日志文件的流,并使用正则表达式逐行将其解析为变量,填充您的数据结构
  4. 每次检测到“用户下线”日志条目时,将该用户的计算数据写入数据库,并从数据结构中删除该用户的条目
  5. 一旦日志被解析,任何留在数据结构中的信息都是用户在线的结果。将此写入磁盘,为第二天晚上做好准备

【讨论】:

  • 好的,这对我来说很有意义,现在它已经写下来了,我会再去解决这个问题,看看它是怎么回事
猜你喜欢
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 2015-06-07
相关资源
最近更新 更多