在客户端筛选大型调试日志

Filter large debug logs on client side

提问人:Magnetism 提问时间:2/19/2022 最后编辑:vikas kvMagnetism 更新时间:2/21/2022 访问量:221

问:

我正在开发一个网络应用程序。Web 应用可以执行代码并检索调试日志,并根据所选筛选器显示。此调试日志可能很大。Web 应用程序在服务器端有快速应用程序,在客户端有把手。目前,我正在将调试日志检索到服务器端代码中,并使用下面的代码。

const fs = require("fs");
const readline = require("readline");
const {Stream} = require("stream");

//creating file using below code
fs.writeFile("DebugLog.txt", debugLog, async function(err) {
    if (err) {
      throw err;
    }
    const result = await searchStream("DebugLog","USER_DEBUG|METHOD_ENTRY|METHOD_EXIT");
    res.send(JSON.stringify({"DebugLog": result}));
});

//executing the search using below code
const searchStream = (filename, text) => {
    return new Promise((resolve)=>{
        const inStream = fs.createReadStream("./" + filename + ".txt");
        const outStream = new Stream();
        const rl = readline.createInterface(inStream, outStream);
        const result = [];
        const regEx = new RegExp(text, "i");

        rl.on("line", function(line) {
          if (line && line.search(regEx) >=0) {
            result.push(line);
          }
        });

        rl.on("close", function() {
            console.log("finished search", filename);
            resolve(result);
        });
    });
};

这样做最终会创建一个在整个服务器上可用的静态文件。但我需要该文件仅可用于用户会话。我正在寻找任何解决方案,这些解决方案可以创建仅适用于单个会话的文件或客户端过滤,而不必担心在服务器端创建文件。

node.js Express 文本 客户端 写入文件

评论

0赞 jorgenkg 2/21/2022
通常,这可以通过在服务器上创建临时文件来解决。不能对以与节点进程相同的文件系统用户身份执行的其他进程隐藏该文件。但是,如果日志内容是敏感的,则可以使用每个会话的加密密钥通过加密流中间件传递数据。临时文件应在操作系统的临时文件夹中创建,由 返回。os.tmpdir()
0赞 Magnetism 2/21/2022
谢谢@jorgenkg。我意识到这种方式最终可能会为每个用户会话创建一个单独的文件。我想走一条不同的路线。想知道您是否有任何建议在客户端执行此操作。
0赞 jorgenkg 2/22/2022
根据这些日志的大小和日志/客户端请求的数量,可能无法在客户端进行扩展。单进程 nodejs API 将花费大量时间来管理 I/O 传输。相反,纯文件传输应该由 Nginx 处理(我倾向于使用 OpenResty)。然后,客户端应用程序可以从 Nginx 获取文件作为流,类似于它在 nodejs 中的工作方式: 流 API

答: 暂无答案