diff --git a/README.md b/README.md index 16b0e5e09..ae9e47b05 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ Read in a different language: [![CN](/assets/flags/CN.png)**CN**](/README.chines ## Table of Contents 1. [Project Structure Practices (5)](#1-project-structure-practices) -2. [Error Handling Practices (11) ](#2-error-handling-practices) +2. [Error Handling Practices (13) ](#2-error-handling-practices) 3. [Code Style Practices (12) ](#3-code-style-practices) 4. [Testing And Overall Quality Practices (13) ](#4-testing-and-overall-quality-practices) 5. [Going To Production Practices (19) ](#5-going-to-production-practices) @@ -237,6 +237,16 @@ especially if the cause of the abnormal behavior is inside of the missing functi 🔗 [**Read More: returning promises**](/sections/errorhandling/returningpromises.md) +

+ +## ![✔] 2.13 Give your error's log a context by adding a correlation ID + +**TL;DR:** Correlation ID lets you linking log records, even if they belong to different services. It can save your day when a process that including 20 different microservices throws an exception in one of them, and you have no idea where did the problem started across the flow. + +**Otherwise:** Once an error will occure, you might read the logs without any context of understanding what caused the unexpected input and which logs of other services are related to your investigated transaction. + +🔗 [**Read More: Correlation ID: help your logs tell you a story and give your error a context**](/sections/errorhandling/correlationid.md) +


⬆ Return to top

diff --git a/sections/errorhandling/correlationid.md b/sections/errorhandling/correlationid.md new file mode 100644 index 000000000..7dbce16c0 --- /dev/null +++ b/sections/errorhandling/correlationid.md @@ -0,0 +1,27 @@ +# Correlation ID: help your logs tell you a story and give your error a context + +### One Paragraph Explainer + +Correlation ID is one of the best problem-solving patterns. It lets you linking log records, even if they belong to different services. If your system consumes other services and is itself a producer service, adding a correlaction ID is a must. By this pattern, your transaction logs can become into a story that tells itself by filtering your logs with a specific correlation ID, instead of try linking the cross-services transaction logs to each other by yourself. It can save your day when a process that including 20 different microservices throws an exception in one of them, and you have no idea where did the problem started across the flow. + +
+ +### Code Example: passing the correlation ID between services on the requets http context +Here is an example of using [express-http-context](https://www.npmjs.com/package/express-http-context) library to set the forwarded correlation ID on the http context: + +```javascript +const httpContext = require('express-http-context'); + +app.use((req, res, next) => { + // Extract the correlation ID from the previous request, or creating it if this is the first request in the transaction + const correlationId = req.get('X-Correlation-ID') || uuid.v4(); + + // Set the correaltion ID on the http context + httpContext.set('correlationId', correlationId); + + // Set the correaltion ID on the response + res.set('X-Correlation-ID', correlationId); + + next(); +}); +```