Reputation: 1260
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()
orconsole.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
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));
Upvotes: 1
Reputation: 1260
tl;dr - it's not supported.
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:
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
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 -
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