最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - GAE node.js console.error() not logging as ERROR log level - Stack Overflow

programmeradmin0浏览0评论
  • google app-engine standard
  • runtime: nodejs10

I'm not sure how I'm messing this up since it seems so simple. According to the app engine standard documentation:

console.error('message');

Should have the ERROR log level in the Stackdriver Logs Viewer. However, I see the log level set to "Any log level." What does seem correct is it's logging to stderr as seen from the logName.

logName:  "projects/my-project-name/logs/stderr"  

To quote:

To emit a log item from your Node.js app, you can use the console.log() or console.error() functions, which have the following log levels:

  • Items emitted with console.log() have the INFO log level.
  • Items emitted with console.error() have the ERROR log level.
  • Internal system messages have the DEBUG log level.

I was originally trying to get winston to work with Stackdriver (using @google-cloud/logging-winston) to get more granular logging levels, but right now I can't even get it to log at INFO or ERROR with basic console.log() and console.error().

Hope I don't have to write a crazy custom transport just to use plain console.error().

  • google app-engine standard
  • runtime: nodejs10

I'm not sure how I'm messing this up since it seems so simple. According to the app engine standard documentation:

console.error('message');

Should have the ERROR log level in the Stackdriver Logs Viewer. However, I see the log level set to "Any log level." What does seem correct is it's logging to stderr as seen from the logName.

logName:  "projects/my-project-name/logs/stderr"  

To quote:

To emit a log item from your Node.js app, you can use the console.log() or console.error() functions, which have the following log levels:

  • Items emitted with console.log() have the INFO log level.
  • Items emitted with console.error() have the ERROR log level.
  • Internal system messages have the DEBUG log level.

I was originally trying to get winston to work with Stackdriver (using @google-cloud/logging-winston) to get more granular logging levels, but right now I can't even get it to log at INFO or ERROR with basic console.log() and console.error().

Hope I don't have to write a crazy custom transport just to use plain console.error().

Share Improve this question asked Jan 11, 2019 at 17:47 ahongahong 1,2802 gold badges14 silver badges24 bronze badges 3
  • I am facing the same issue. Have you got it working? – Darshan Devrai Commented Oct 10, 2019 at 15:37
  • 1 @DarshanDevrai sorry, I haven't. I've put this issue on the back burner, but hope to revisit it. If I find a solution or if google gives some support I'll happily answer my own question. – ahong Commented Oct 10, 2019 at 15:43
  • I revisited the documentation and it seems like this might not be possible. Not sure if I missed this the first time or they added it recently (Last updated September 17, 2019). It now says "Write your application logs using stdout for output and stderr for errors. These files are automatically collected and can be viewed in the Logs Viewer. Note that this does not provide log levels that you can use for filtering in the Logs Viewer; however, the Logs Viewer does provide other filtering, such as text, timestamp, etc." Emphasis mine. Doc kind of contradicts itself. – ahong Commented Oct 11, 2019 at 17:51
Add a ment  | 

3 Answers 3

Reset to default 3

After trying for hours, I got it working. I used Winston as per the docs https://cloud.google./logging/docs/setup/nodejs#using_winston.

Then in stackdriver logs viewer, I selected the winston_log from the dropdown like this -

And its showing error logs now.

This works with Bunyan too. You have to select bunyan_log for the Bunyan.

Hope this helps someone:)

tl;dr - it's not supported.

Longer Answer

So it seems like Google has updated their documentation since I've posted my question. They've clarified that writing to stdout and stderr is collected, but:

does not provide log levels that you can use for filtering in the Logs Viewer

It's great that I have an answer, which is: "No, console.log() and console.error() will not have log levels." This kind of contradicts the next paragraph. I may be misreading or misinterpreting the documentation, so please ment if that's the case.

I took a screenshot of the documentation, pointing out what I'm referring to, in case they update it again:

Solution

Use one of the logging libraries that Google supports with a Stackdriver logging transport, like @darshan-devrai's answer. If you don't want to change all your console.log(), console.error(), etc., then just alias the console logger to your logger of choice (similar to this stackoverflow answer).

The docs here and here seem to be conflicting in terms of how console.error is logged.

In my case printing a simple object worked fine:

let gcloudError = {
        severity: 'ERROR',
        message: 'Error in country ' + country + ' ' + JSON.stringify(err.message)
      }
console.error(JSON.stringify(gcloudError));

This will be displayed as:

发布评论

评论列表(0)

  1. 暂无评论