我刚刚开始在 App Engine 标准上运行 Nodejs,除了标准日志输出很糟糕之外,一切都很好。在Python(基于应用程序引擎标准)中,您会得到非常漂亮的日志,如下所示:
当有多行时,输出在父级下很好地级联,日志记录级别由左侧的彩色图标等指示。
在 Node 中,日志如下所示:
正如您所看到的,所有内容都有自己的行,它们不是树结构,谁知道它们是信息、警告还是错误 block 。
我已经尝试使用 Watson 和 Bunyan 以及跟踪库,如这篇 SO 文章中所示:App Engine Node.js: how to link app logs and requests logs
但似乎不起作用。对于 Google 来说,如果能像使用 Python 或 Java 一样默认实现这项工作,那就太棒了,除非能得到一个工作演示,否则我也尝试过使用 Node 库来记录日志,它是 google api 的一部分收集无果。
任何人都可以给我提供一个如何修复日志的示例,以便我可以匹配 Python 中已有的应用程序引擎标准吗?
感谢您的帮助!
更新 - 仍然无法正常工作
因此,在部署 hello-world 示例并向应用程序 get 方法添加一个记录器后,现在看起来如下所示:
app.get('/', (req, res) => {
var data_block = {
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
console.log("This is a really big log request that would normally not work very well:", data_block)
res.status(200).send('Hello, world!').end();
});
输出如下所示:
您可以看到日志与 Python 日志不同,知道我做错了什么吗?
最佳答案
您可以使用Bunyan client library将日志流式传输到 Stackdriver。以下是基于您提供的文档和代码示例的示例。
const loggingBunyan = new LoggingBunyan();
const logger = bunyan.createLogger({
name: 'my-service',
level: 'info',
streams: [
{stream: process.stdout},
loggingBunyan.stream(),
],
});
app.get('/', (req, res) => {
var data_block = {
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
res.status(200).send('Hello, world!').end();
logger.info(data_block);
});
这会将整个 JSON block 记录为单独的消息,但是文档还描述了如何在请求日志下嵌套应用程序日志(如果您想要这样做)。
关于node.js - 如何使 App Engine 标准上的 Node JS 日志像 Python 一样好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51507066/