0

我正在尝试将 Log4js-Node 添加到在 Apache 上运行的 Node.js 服务器。这是我的代码:

const path = require("path");
const express = require("express");
const log4js = require('log4js');

const app = express();
const logger = log4js.getLogger();
logger.level = "debug";
const port = 443;

log4js.configure({
  appenders: { everything: { type: 'file', filename: 'logs.log', flags: 'w' } },
  categories: { default: { appenders: ['everything'], level: 'ALL' } }
});

const server = app.listen(port, () => {
    logger.debug("listening to requests on port " + port);
});

app.get("/log", (req, res) => {
  res.sendFile(path.join(__dirname + "/logs.log"));
});

当我在我的计算机上的 Node.js 上运行脚本并导航到 localhost:443/log 时,我看到了我所期望的,这就是:

[2020-03-17T22:50:43.145] [DEBUG] 默认 - 监听端口 443 上的请求

但是当我在远程服务器上运行代码时它崩溃了,我在错误页面中得到了这个(部分路径被我替换为“[removed]”):

应用程序 25925 输出:在服务器上。([删除]/index.js:27:9)

应用程序 25925 输出:在 Logger。[作为调试]([删除]/12/lib/node_modules/log4js/lib/logger.js:124:10)

应用程序 25925 输出:在 Logger.log ([删除]/12/lib/node_modules/log4js/lib/logger.js:73:12)

应用程序 25925 输出:在 Logger._log ([删除]/12/lib/node_modules/log4js/lib/logger.js:90:16)

应用程序 25925 输出:在 Object.send ([删除]/12/lib/node_modules/log4js/lib/clustering.js:97:15)

应用程序 25925 输出:[已删除]/12/lib/node_modules/log4js/lib/clustering.js:97

应用程序 25925 输出:在对象处。([删除]/12/lib/node_modules/log4js/lib/clustering.js:8:13)

我正在使用使用 Apache 2.4.41 的 A2 Hosting。我选择了 Node.js 12.9.0 和 Log4js 6.1.2。package.json 在我的计算机和服务器上应该是相同的,并且我npm install在两者上都运行过。

这只是 Log4js 和服务器的问题,还是我在某个地方遗漏了什么?

4

2 回答 2

0

这实际上是一个相对简单的修复。堆栈跟踪中最后一个错误引用的路径是一个 Log4js 模块,它通过 Node 的“集群”模块实现集群支持。引用的“8”行是cluster = require("cluster"). 它被包裹在一个 try/catch 块中,如下所示:

try {
  cluster = require("cluster"); //eslint-disable-line
} catch (e) {
  debug("cluster module not present");
  disabled = true;
}

在我的计算机上安装 Node.js 时附带了“集群”模块,但据我所知,我使用的服务器不支持它。此外,我在计算机上使用的 Node 版本比我在服务器上使用的版本更新(所以我现在在我的机器上安装了 12.9)。我相信旧版本的 Node 不会费心尝试捕获异常并尝试加载集群模块,失败,然后抛出错误。

所以简单的解决方法是注释掉大部分“try/catch”块,只留下“catch”的内容,如下所示:

// try {
//   cluster = require("cluster"); //eslint-disable-line
// } catch (e) {
  debug("cluster module not present");
  disabled = true;
// }

如果有人有更好的解决方案,我愿意接受建议。

于 2020-03-20T05:22:05.530 回答
0

@skittleswrapper 的相同响应,谢谢,它对我有用。我使用 Node.js 14.18.1 和 log4js 6.3.0。但我想知道这个模块“集群”的必要性是什么,以及我们是否可以通过其他方式将它添加到我们的应用程序中。

于 2022-01-19T08:46:33.607 回答