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

2018-05-18 09:11:20 +08:00
 chenqy930
最近需要修改一个 node.js + webpack 实现的项目,调试时候想要看到一些输出,试用了 console.log()、debug 模块的 debug(),都看不到输出。

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

请问大家这会是什么原因呢?求助~~
18021 次点击
所在节点    Node.js
23 条回复
wukaichao
2018-05-18 09:14:55 +08:00
会不会还没运行到 log 的时候就已经中断了?
noe132
2018-05-18 09:16:46 +08:00
有可能 log 所在 shell 不是当前 shell 而是 node 后台 spawn 出来的,并且 stdout 没有处理
miketeam
2018-05-18 09:22:53 +08:00
你 html 的头部是!html
justicelove
2018-05-18 09:29:42 +08:00
赶紧给浏览器厂商提 BUG,肯定是浏览器的问题
chenqy930
2018-05-18 09:35:16 +08:00
@noe132 噢还有这个可能,那这该怎么办呢?
chenqy930
2018-05-18 09:35:44 +08:00
@miketeam 想在后台看输出的,应该跟 html 没有关系吧?
chenqy930
2018-05-18 09:35:59 +08:00
@wukaichao 应该不会
csx163
2018-05-18 09:49:05 +08:00
看一下编码,上次 gbk 的没有输出
KeepPro
2018-05-18 09:50:48 +08:00
有可能是 console 函数被覆盖了。
dr490n
2018-05-18 09:53:43 +08:00
这种问题请先把 package.json 里面的 scripts 和你启动服务端的命令发出来啊?
没有代码怎么一步步帮你定位问题呢?
(是不是跑生产环境的配置了,有的配置里面生产环境会忽略掉 console 输出的……)
abowloflrf
2018-05-18 10:12:22 +08:00
还有一种原因 是不是把 chrome 控制台的 log 输出级别手抖改了?需要改 default 或者把 info 勾上。
chenqy930
2018-05-18 10:16:30 +08:00
@dr490n
"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}
will0404
2018-05-18 10:24:29 +08:00
楼上很多人看不到 nodejs 节点吗?跟 html 和浏览器有什么关系。

首先这个可能性确实很多而你提供的信息太少。
你既然提到了 webpack,莫非你 node 运行的代码是编译后的?那么有可能是编译期间 console 被去掉了,检查一下 webpack 配置吧。
理论上后端代码不需要编译,我猜你是用了新语法所以用了 webpack+babel 吧。
chenqy930
2018-05-18 10:55:20 +08:00
@will0404
1、package.json 中没有看到 babel 模块,所以应该没有用到 babel。
2、运行前确实有个一分钟左右的编译过程,webpack 配置的话有一个文件是 webpack.common.js ,里面的模块有 entry、output、resolve、module、plugins 和 node,哪块会是跟 console 被去掉有关的呢?
will0404
2018-05-18 11:12:01 +08:00
@chenqy930 一般是用 UglifyJsPlugin 插件做这个事。

顺便一说,js 是动态语言,你根本不需要编译,除非用到了 node 不支持的语法而且非用不可,这种情况不多。
Solace202
2018-05-18 11:26:33 +08:00
换个浏览器试试呗,
Solace202
2018-05-18 11:29:45 +08:00
或者 webpack 打包完后,在打包好的文件中找找你的 console 还在不在,不在说明被过滤了,自己新加上去
lastpass
2018-05-18 11:43:25 +08:00
emmm,你可以在浏览器上打断点,然后手动输命令输出。
Yokira
2018-05-18 11:44:23 +08:00
最快的办法就是搜索项目里面已经存在的日志输出方法,看看之前的代码是如何做 debug 的。
还有就像楼上说的,需要看 webpack 是编译前端还是后端,如果跟后端没关系的话,就不用看 webpack 了。
另外需要注意的是如果你在前端代码 debug,shell 里面是看不到的,需要去浏览器里面看(这个估计没人会犯)。
使用了 winston 的话,会创建一个 logger,打印日志用这个 logger。
还不行的话,把 build:dev 里面的 npm run preprocess 拿出去,自己单独先启动 node,然后再开 webpack,不过我感觉不是这个原因。
YenvY
2018-05-18 12:56:16 +08:00
换成 console.warn 看一眼

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/455786

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX