Merge pull request #1 from yedidyas/errors-handling-correlation-id

Error handling - Correlation ID
This commit is contained in:
Yedidya Schwartz
2021-01-27 20:43:57 +02:00
committed by GitHub
2 changed files with 38 additions and 1 deletions

View File

@ -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)
<br/><br/>
## ![✔] 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)
<br/><br/><br/>
<p align="right"><a href="#table-of-contents">⬆ Return to top</a></p>

View File

@ -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.
<br/>
### 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();
});
```