1

我必须每天为我的工作查看大量日志文件。这些日志文件已经存在几个好的解析器,但我还没有找到我想要的。好吧,谁能比你更适合你,对吧?

我使用 JavaScript 的原因(除了我已经知道它的事实)是因为它是可移植的(无需安装任何东西),但同时可以跨平台访问。在我投入太多时间之前,这是实现我目标的糟糕方法吗?

  1. 输入将被输入到一个文本文件中,由 [x] 分隔,并且值将被放入一个数组中,以使访问这些值比拉取静态内容更快。
  2. 在将值放入数组之前,将处理任何特殊格式(数字、日期等),以防止函数在每次使用时重复此步骤。
  3. 这些日志可能包含 100k+ 行,这对于浏览器来说是很多的。但是,每一行都不包含大量信息。
  4. 我已经写了一些,但是即使有 10,000 行,它也开始运行缓慢,我不知道是因为我效率不够还是无法有效完成。我在想这是因为所有数据都在一张巨大的桌子上。我可能会更好地对其进行分页,但这并不理想。

问题1:有什么我没有提到我应该考虑的吗?
问题2:您会推荐一个更好的选择吗?
问题3:(有点题外话,请随意忽略)。我不想复制/粘贴输入,而是想“打开”日志文件,但据我所知 JavaScript 不能这样做(出于安全原因)。这可以通过 input="file" 来完成,而无需实际上传服务器吗?我不知道 SSJS 是如何工作的,但似乎我低估了 JavaScript 的局限性。

我知道这有点含糊,但我试图让大家不必阅读一本书来回答我的问题。让我知道我是否应该包括其他详细信息。谢谢!

4

3 回答 3

3

我认为 JavaScript 是一个“好的”选择。使用脚本语言来解析日志文件以供个人使用是一个非常明智的决定。

但是,我不会为此使用浏览器。Web 浏览器限制了一段 javascript 可以运行多长时间,或允许运行多少条指令,或两者兼而有之。如果超出这些限制,您将得到如下信息:

脚本太长

由于您将处理大量数据,我怀疑您迟早会遇到这个问题。这可以通过巧妙地使用 setTimeout 来避免,或者可能使用 web worker 来避免,但这会增加项目的复杂性。这可能不是你想要的。

请注意,JavaScript 也可以在浏览器之外运行。例如,Windows 带有Windows Script Host。这将允许您从命令提示符运行 JavaScript,而无需浏览器。您不会收到“脚本太长”错误。作为额外的奖励,您将拥有对文件系统的完全访问权限,并且能够将命令行参数传递给您的代码。

祝你好运,编码愉快!

于 2011-05-06T20:09:16.123 回答
2

用粗体回答你的首要问题:不,这不是一个糟糕的主意。

如果 JS 是您所知道的唯一语言,那么您希望避免设置任何依赖项,并且希望保持与平台无关...... JavaScript 似乎非常适合您的特定情况。

作为更一般的规则,我永远不会使用 JS 作为语言来编写桌面应用程序。特别是不适用于执行日志解析之类的任务。还有许多其他语言更适合此类问题,例如 Python、Scala、VB 等。我提到 Python 和 Scala 是因为它们类似于脚本的行为和最少的设置要求。Python 的语法也与 JS 非常相似,因此它可能比其他语言更容易上手。如果您拥有 Visual Studio 许可证,VB(或任何 .NET 语言)也可以工作,因为如果更适合您的需要,它很容易使用 GUI 构建器。

我建议的方法:使用现有的框架。那里有数百甚至数千个日志解析器,它们处理各种用例和不同格式的日志,您应该能够找到接近您需要的东西。可能只需要比 Google 的“日志解析器”多一点努力来找到一个有效的。如果您找不到适合您确切需求的软件并且您愿意花时间制作自己的软件,那么您应该利用这段时间来为现有的开源软件之一做出贡献。在尝试重新发明轮子进行第 10 亿次之前,应始终考虑扩展现有代码库。

于 2011-05-06T20:04:52.170 回答
1

鉴于您的不变量“javascript,跨平台,浏览器 ui,尽可能快”,我会考虑这种方法:

  1. 使用命令行脚本(windows:JScript;linux:?)解析日志文件并将“干净”/相关数据存储在 SQLite 数据库中(回退:任何体面的脚本语言都可以做到这一点,可以使用现成的/专门的工具也)
  2. 使用 SQLite Manager 插件使用 SQL 进行数据挖掘
  3. 如果 (2) 变得笨拙 - 使用 SQLite Manager 代码库来“制作更量身定制的东西”

考虑到您的评论:

对于仅限 Windows 的工作,您可以使用 VS Express版本以 C#、VB.NET、C++/CLI、F# 甚至(某种)Javascript (Silverlight) 编写应用程序。如果您想坚持使用“经典”Javascript 和浏览器,请编写一个 .HTA 应用程序(对本地计算机的完全访问权限)并使用 ADO 数据(基本)访问权限并尝试获取(旧)DataGrid/Flexgrid 控件(它们可能已安装;搜索注册表)。

于 2011-05-06T20:21:06.363 回答