【问题标题】:Does log4js require any extra code to work on an Apache server?log4js 是否需要任何额外的代码才能在 Apache 服务器上工作?
【发布时间】:2020-06-29 05:16:43
【问题描述】:

我正在尝试将 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]”):

App 25925 输出:在服务器上。 ([移除]/index.js:27:9)

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

App 25925 输出:在 Logger.log ([removed]/12/lib/node_modules/log4js/lib/logger.js:73:12)

App 25925 输出:在 Logger._log ([removed]/12/lib/node_modules/log4js/lib/logger.js:90:16)

App 25925 输出:在 Object.send ([removed]/12/lib/node_modules/log4js/lib/clustering.js:97:15)

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

App 25925 输出:在 Object. ([删除]/12/lib/node_modules/log4js/lib/clustering.js:8:13)

我正在使用 A2 Hosting,它使用 Apache 2.4.41。我选择了 Node.js 12.9.0 和 Log4js 6.1.2。 package.json 在我的电脑和服务器上应该是一样的,我在两者上都运行了npm install

这只是 Log4js 和服务器的问题,还是我错过了什么?

【问题讨论】:

    标签: javascript node.js apache server log4js-node


    【解决方案1】:

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

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    这实际上是一个相对简单的修复。堆栈跟踪中最后一个错误引用的路径是一个 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;
    // }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 2019-06-11
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      相关资源
      最近更新 更多