loading...

REST API logging in Google Cloud Run

patarapolw profile image Pacharapol Withayasakpunt ・1 min read

As a response to my other post, as I use Google Cloud Run in production.

Logs tab

  • It's not exactly in the LOGS tab. You have to open Log viewer's page
  • JSON-like strings will be auto-transformed to JSON inside jsonPayload. Therefore, you can search like this,
severity>=DEFAULT
jsonPayload.req.method = "GET" 
  • JSON strings are easier to log, therefore req.body and POST / PUT / PATCH as easier to log than req.query in GET / DELETE; however, it isn't impossible to pre-transform.
    • Another problem is req.query's serialization isn't very standardized. I use currently use rison-node.
    • I use GET requests for potential caching. But I didn't do any caching yet. Also, some GET are truly dynamic (e.g. /api/:dict/random).
export const logger = pino({
  serializers: {
    req(req) {
      return {
        method: req.method,
        url: req.url,
        version: req.headers['accept-version'],
        hostname: req.hostname,
        remoteAddress: req.ip,
        query: parseQuery(req.query),
      }
    },
  },
})
  • At least in Fastify, you have to decide what to log, as by default, the logger doesn't log req.body. (It does log req.url, therefore, unparsed querystrings.)

Posted on by:

patarapolw profile

Pacharapol Withayasakpunt

@patarapolw

Currently interested in TypeScript, Vue, Kotlin and Python. Looking forward to learning DevOps, though.

Discussion

markdown guide