ahong
ahong

Reputation: 1260

GAE node.js console.error() not logging as ERROR log level

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().

Upvotes: 9

Views: 2341

Answers (3)

kuzdogan
kuzdogan

Reputation: 835

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: Error on log dashboard

Upvotes: 1

ahong
ahong

Reputation: 1260

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 comment 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: Google App Engine Documentation on Logging

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).

Upvotes: 3

Darshan Devrai
Darshan Devrai

Reputation: 576

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

Then in stackdriver logs viewer, I selected the winston_log from the dropdown like this - enter image description here

And its showing error logs now.

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

Hope this helps someone:)

Upvotes: 3

Related Questions