Package Exports
- gc-json-logger-express
- gc-json-logger-express/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (gc-json-logger-express) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Structured logging for express.js app in GKE
Precaution
The logger makes use of async_hooks
module which is currently experimental. However, the use of async_hooks
mechanism was at basic.
Installation
npm install --save gc-json-logger gc-json-logger-express
yarn add gc-json-logger gc-json-logger-express
View in Google Cloud Logging
Integration
const { Logger, Severity } = require('gc-json-logger');
const { log } = require('gc-json-logger-express');
const express = require('express');
const app = express();
/* Set desired application log level */
Logger.setLevel(Severity.DEBUG);
/* Filter sensitive data or transform log entry */
app.use(
log((_req, _res, entry) => {
const severity = entry.meta.httpRequest?.status >= 500 ? Severity.ERROR : entry.severity;
return { ...entry, severity };
})
);
app.use(express.text());
app.use(express.json());
app.use((req, res) => res.status(500).send(req.body));
app.listen(3000);
Mock Request
curl -X POST "http://localhost:3000/echo" \
-H "Content-Type: text/plain" \
-d 'Hello world!'
Logged Request
{
"severity": "INFO",
"timestamp": "2022-01-01T00:00:00.000Z",
"message": "200 POST /echo",
"httpRequest": {
"protocol": "HTTP/1.1",
"requestSize": "141",
"remoteIp": "::ffff:127.0.0.1",
"requestUrl": "http://localhost:3000/echo",
"requestMethod": "POST",
"userAgent": "curl/7.79.1",
"serverIp": "::ffff:127.0.0.1:3000"
},
"logging.googleapis.com/operation": {
"id": "135af3bd-1cde-4b72-92ac-3106e7514714"
}
}
Logged Request and Response
{
"severity": "ERROR",
"timestamp": "2022-01-01T00:00:00.000Z",
"message": "500 POST /echo (13ms)",
"httpRequest": {
"latency": "13ms",
"responseSize": "258",
"status": 500
},
"logging.googleapis.com/operation": {
"id": "135af3bd-1cde-4b72-92ac-3106e7514714"
},
"meta": {
"request": {
"headers": {
"host": "localhost:3000",
"user-agent": "curl/7.79.1",
"accept": "*/*",
"content-type": "text/plain",
"content-length": "12"
},
"body": "Hello world!"
},
"response": {
"headers": {
"x-powered-by": "Express",
"content-type": "text/html; charset=utf-8",
"content-length": "12",
"etag": "W/\"c-00hq6RNueFa8QiEjhep5cJRHWAI\""
},
"body": "Hello world!"
}
}
}