首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >log4js是否需要额外的代码才能在Apache服务器上工作?

log4js是否需要额外的代码才能在Apache服务器上工作?
EN

Stack Overflow用户
提问于 2020-03-18 05:26:36
回答 2查看 206关注 0票数 0

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

代码语言:javascript
复制
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默认-侦听端口443上的请求

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

应用程序25925输出: at服务器。(移除/索引.27:27:9)

App 25925输出:在Logger。as debug

App 25925输出: at Logger.log Logger.log

App 25925输出: at Logger._log Logger._log

App 25925输出: at Object.send Object.send

App 25925输出: removed/12/lib/node_modules/log4js/lib/clustering.js:97

App 25925输出: at Object。(removed/12/lib/node_modules/log4js/lib/clustering.js:8:13)

我使用的是A2主机,它使用Apache2.4.41。我选择了Node.js 12.9.0和Log4js 6.1.2。在我的计算机和服务器上,package.json应该是相同的,我已经在这两个服务器上运行了npm install

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

EN

回答 2

Stack Overflow用户

发布于 2020-03-20 05:22:05

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

代码语言:javascript
复制
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”的内容如下:

代码语言:javascript
复制
// try {
//   cluster = require("cluster"); //eslint-disable-line
// } catch (e) {
  debug("cluster module not present");
  disabled = true;
// }

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

票数 0
EN

Stack Overflow用户

发布于 2022-01-19 08:46:33

@skittleswrapper,thx的同样反应,对我来说是有效的。我使用Node.js 14.18.1和log4js 6.3.0。但我想知道什么是这个模块‘集群’的必要,如果我们可以添加到我们的应用程序以其他方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60733999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档