bright-logger-expressjs

Logs incoming requests and generates a Trace Id (GUID) res.locals.traceId if the x-correlation-id property is not set in the request header.

Usage no npm install needed!

<script type="module">
  import brightLoggerExpressjs from 'https://cdn.skypack.dev/bright-logger-expressjs';
</script>

README

bright-logger-expressjs ✏️⚠️

This is v2, for v1 implementation guide go here

Logs incoming requests and generates a Trace Id (GUID) res.locals.traceId if the x-correlation-id property is not set in the request header.

npm i bright-logger-expressjs

Usage

If logging authenticated requests the use of this library requires the usage of bright-auth-expressjs.

As the logger package overrides the res.end() method, there is no need to call this in your code. The logger will handle ending the transaction.

Log requests from all routes on your authenticated API

const app = require('express')();
const logger = require('bright-logger-expressjs')({
  CONNECTION_STRING: "connection_string",
  CONNECTION_NAME: "connection_name",
  ENVIRONMENT: "LOCAL",
  SOURCE_APP: "TestApp"
});
const auth = require('bright-auth-expressjs')({
  API_ENDPOINT: "https://sandbox-api.brighthr.com"
});

app.use(logger.authenticatedLogger)
app.use(auth)

app.get("/", (req, res) => res.send(req.user));

app.listen(3000);

Log requests from specific routes

const app = require('express')();
const auth = require('bright-auth-expressjs')({
  API_ENDPOINT: "https://sandbox-api.brighthr.com"
});
const logger = require('bright-logger-expressjs')({
  CONNECTION_STRING: "connection_string",
  CONNECTION_NAME: "connection_name",
  ENVIRONMENT: "LOCAL",
  SOURCE_APP: "TestApp"
});

app.get("/", logger.authenticatedLogger, auth, (req, res) => res.send(req.user));

app.listen(3000);

Log requests from all routes on your unauthenticated API

const app = require('express')();
const logger = require('bright-logger-expressjs')({
  CONNECTION_STRING: "connection_string",
  CONNECTION_NAME: "connection_name",
  ENVIRONMENT: "LOCAL",
  SOURCE_APP: "TestApp"
});

app.use(logger.unauthenticatedLogger)

app.get("/", (req, res) => res.send(req.user));

app.listen(3000);

Logged object example:

{
    "DeployedTo": "LOCAL",
    "MachineName": "localhost",
    "UserGuid": "1f2ac30b-4000-4c87-bcb2-254b9df3cbbe",
    "TraceId": "157ef47b-bfba-4eb5-a693-0cfec6a78a48",
    "http": {
      "ElapsedMS": 3292,
      "IP": "::1",
      "Headers": {
        "BrightClient": "blip_ios"
        "User-Agent": "PostmanRuntime/7.22.0",
      },
      "Host": "localhost",
      "StatusCode": 200,
      "Received": "2020-02-11T12:09:08.246Z",
      "Method": "GET",
      "Path": "/"
    },
    "Region": "UK",
    "SessionId": "9g408c89-85b5-47c9-1243-08ab904b3746"
    "Source": "presence_api",
    "CompanyGuid": "8f408c89-85b5-47c9-822d-08ab904b3615",
}

Log errors

const app = require('express')();
const logger = require('bright-logger-expressjs')({
  CONNECTION_STRING: "connection_string",
  CONNECTION_NAME: "connection_name",
  ENVIRONMENT: "LOCAL",
  SOURCE_APP: "TestApp"
});


app.use(logger.unauthenticatedLogger)

app.get("/", (req, res, next) => next('bad things happened'));

app.use((err, req, res, next) => {
    logger.logError(req, res, err);
    next();
});

app.listen(3000);

Development

npm run dev will spin up a local server on port 9999 and restart when you save any file.

Deployment to npm

Deployment is managed using semantic-release. This means you must be careful about the commit message format. This link provides examples - if you do not conform to this circle will build your commit but not push a new version to npm and github and then you'll be sad 😕. Turns out we're using the Angular commit format...