node.js - 如何使 App Engine 标准上的 Node JS 日志像 Python 一样好

标签 node.js google-app-engine

我刚刚开始在 App Engine 标准上运行 Nodejs,除了标准日志输出很糟糕之外,一切都很好。在Python(基于应用程序引擎标准)中,您会得到非常漂亮的日志,如下所示:

enter image description here

当有多行时,输出在父级下很好地级联,日志记录级别由左侧的彩色图标等指示。

在 Node 中,日志如下所示:

enter image description here

正如您所看到的,所有内容都有自己的行,它们不是树结构,谁知道它们是信息、警告还是错误 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();
});

输出如下所示:

enter image description here

您可以看到日志与 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/

相关文章:

javascript - 了解 .each() 发起的所有异步调用何时完成执行

javascript - 如何使用 curl 与 exec nodejs

javascript - 断言在磁带中抛出 - Node

java - 使用 GAE/Java 运行 DataNucleus JPA 时出现问题

java - 应用引擎 : missing indexes after restoring backup

java - Google App Engine Blobstore 图像

javascript - 将 JWT 从 AngularJS 发送到 Node.js

node.js - 使用 nodeJS 调用 awscli

java - AppEngine React 和 Jersey - 您指定的 scrapDir 不可用

java - 如何在Google App Engine灵活环境中配置oracle jdk