Nodejs中console.log()在控制台看不到输出

发布于 1周前 作者 yuanlaile 来自 nodejs/Nestjs

Nodejs中console.log()在控制台看不到输出
最近需要修改一个 node.js + webpack 实现的项目,调试时候想要看到一些输出,试用了 console.log()、debug 模块的 debug(),都看不到输出。

项目中用到了 winston 模块做日志记录,于是我也尝试了 winston(‘info’,‘something’),也没有输出,

请问大家这会是什么原因呢?求助~~

24 回复

会不会还没运行到 log 的时候就已经中断了?


有可能 log 所在 shell 不是当前 shell 而是 node 后台 spawn 出来的,并且 stdout 没有处理

你 html 的头部是!html

赶紧给浏览器厂商提 BUG,肯定是浏览器的问题

噢还有这个可能,那这该怎么办呢?

想在后台看输出的,应该跟 html 没有关系吧?

看一下编码,上次 gbk 的没有输出

有可能是 console 函数被覆盖了。

这种问题请先把 package.json 里面的 scripts 和你启动服务端的命令发出来啊?
没有代码怎么一步步帮你定位问题呢?
(是不是跑生产环境的配置了,有的配置里面生产环境会忽略掉 console 输出的……)

还有一种原因 是不是把 chrome 控制台的 log 输出级别手抖改了?需要改 default 或者把 info 勾上。


“scripts”: {
“build:dev”: “npm run clean && npm run preprocess && npm run webpack – --watch”,
“build”: “npm run clean && npm run preprocess && npm run webpack”,
“clean:dist”: “npm run rimraf – dist”,
“clean”: “npm cache clean && npm run clean:dist”,
“lint”: “eslint src/**/*.js”,
“node”: “node”,
“preprocess”: “node config/preprocess.js”,
“rimraf”: “rimraf”,
“server”: “node server/index.js”,
“start”: “npm run build && npm run server”,
“test”: “echo “Error: no test specified” && exit 1”,
“webpack”: “webpack --config webpack.config.js --progress --profile”,
“yarn”: “yarn --ignore-engines”
},


刚注意看了一下输出,
2018-05-18T00:47:17.942Z [INFO] config: {“env”:“production”,“logLevel”:“silly”,“serverPort”:8080}
2018-05-18T00:47:17.950Z [INFO] Webportal server starts on port 8080
2018-05-18T00:47:42.867Z [WARN] Error: Page not found

确实是在 production, 然后我在配置文件中改成了 development, 还是没有输出><
2018-05-18T02:14:09.554Z [INFO] config: {“env”:“development”,“logLevel”:“silly”,“serverPort”:8080}

楼上很多人看不到 nodejs 节点吗?跟 html 和浏览器有什么关系。

首先这个可能性确实很多而你提供的信息太少。
你既然提到了 webpack,莫非你 node 运行的代码是编译后的?那么有可能是编译期间 console 被去掉了,检查一下 webpack 配置吧。
理论上后端代码不需要编译,我猜你是用了新语法所以用了 webpack+babel 吧。


1、package.json 中没有看到 babel 模块,所以应该没有用到 babel。
2、运行前确实有个一分钟左右的编译过程,webpack 配置的话有一个文件是 webpack.common.js ,里面的模块有 entry、output、resolve、module、plugins 和 node,哪块会是跟 console 被去掉有关的呢?

一般是用 UglifyJsPlugin 插件做这个事。

顺便一说,js 是动态语言,你根本不需要编译,除非用到了 node 不支持的语法而且非用不可,这种情况不多。

换个浏览器试试呗,

或者 webpack 打包完后,在打包好的文件中找找你的 console 还在不在,不在说明被过滤了,自己新加上去

emmm,你可以在浏览器上打断点,然后手动输命令输出。

最快的办法就是搜索项目里面已经存在的日志输出方法,看看之前的代码是如何做 debug 的。
还有就像楼上说的,需要看 webpack 是编译前端还是后端,如果跟后端没关系的话,就不用看 webpack 了。
另外需要注意的是如果你在前端代码 debug,shell 里面是看不到的,需要去浏览器里面看(这个估计没人会犯)。
使用了 winston 的话,会创建一个 logger,打印日志用这个 logger。
还不行的话,把 build:dev 里面的 npm run preprocess 拿出去,自己单独先启动 node,然后再开 webpack,不过我感觉不是这个原因。

换成 console.warn 看一眼

怎么看 webpack 是编译前端还是后端呀… 我就是用的 npm start…

另外好像找不到项目用来输出其他调试信息的代码,用到 winston 模块的只在这一段,
app.use((err, req, res, next) => {
logger.warn(’%s’, err.stack);
res.status(err.status || 500).json({
message: err.message,
error: config.env === ‘development’ ? err.stack : {}
});
});

输出的信息类似于:
2018-05-18T09:39:12.701Z [INFO] GET /view.html 304 0.330 ms - -
2018-05-18T09:39:12.709Z [INFO] GET /styles/view.bundle.css 304 0.638 ms - -
2018-05-18T09:39:12.709Z [INFO] GET /styles/layout.bundle.css 304 0.913 ms - -
2018-05-18T09:39:12.710Z [INFO] GET /scripts/view.bundle.js 304 1.225 ms - -

试过了 不行><

用了 nodemon 之类的了吧

在Node.js中,如果你发现console.log()在控制台看不到输出,这通常是由于以下几种常见原因导致的:

  1. 代码执行问题:确保你的console.log()语句确实被执行到了。如果它在一个条件分支或函数中,确保这些分支或函数被正确调用。

  2. 异步代码:Node.js是异步的,如果你的console.log()在异步操作中,可能在输出之前就结束了程序。确保异步代码正确完成。

  3. 输出被重定向或抑制:在某些情况下,输出可能被重定向到文件或其他地方,或者被抑制。

  4. IDE或终端问题:有时候IDE或终端本身的问题可能导致输出不显示。尝试在不同的终端或IDE中运行代码。

下面是一个简单的例子,展示如何在异步代码中确保console.log()被执行:

// 异步函数示例
function asyncExample() {
    setTimeout(() => {
        console.log("This should appear in the console after a delay.");
    }, 1000);
}

asyncExample();

// 确保主线程不立即退出
// 在没有显式异步等待的情况下,可以通过添加一个长时间运行的循环来模拟
// 但在实际应用中,应避免这种做法,而是使用async/await或Promise.then/catch
// 这里仅作为演示
setTimeout(() => {}, 1500); // 保持程序运行以查看异步输出

如果上述方法都不奏效,尝试在命令行中直接运行你的Node.js脚本,看看是否有输出。这可以帮助排除IDE或环境问题。

回到顶部