Skip to content

Commit

Permalink
Merge pull request #1 from yedidyas/errors-handling-correlation-id
Browse files Browse the repository at this point in the history
Error handling - Correlation ID
  • Loading branch information
yedidyas authored Jan 27, 2021
2 parents 3e117cb + ddc713c commit d686e2d
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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>
Expand Down
27 changes: 27 additions & 0 deletions sections/errorhandling/correlationid.md
Original file line number Diff line number Diff line change
@@ -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();
});
```

0 comments on commit d686e2d

Please sign in to comment.