Product
Introducing SSO
Streamline your login process and enhance security by enabling Single Sign-On (SSO) on the Socket platform, now available for all customers on the Enterprise plan, supporting 20+ identity providers.
concurrency-logger
Advanced tools
Readme
HTTP logging middleware especially useful to unwind concurrent operations without losing the request context
Launch demo in your browser
$ npm install concurrency-logger
import Koa from 'koa';
import createLogger from 'concurrency-logger';
const app = new Koa;
// Logger is stateful as it contains information about concurrent requests
// Same instance needs to be reused across requests
const logger = createLogger(/* options */);
app.use(logger);
// Log something in context to a specific request to trace it back easily -
// also when there are multiple concurrent requests
app.use(async (context, next) => {
context.log('Log!');
context.log.info('Info!');
context.log.error('Error!');
await next();
});
const logger = createLogger({
req: context => (
context.originalUrl + '\n' +
context.get('User-Agent')
)
});
const logger = createLogger({
timestamp: true
});
import { createWriteStream } from 'fs';
// To read log use program that interprets ANSI escape codes,
// e.g. cat or less -r
const log = createWriteStream('logs/requests.log');
const logger = createLogger({
reporter: log
});
const logger = createLogger({
getLevel: (responseTime, context) => {
/*
GET
0 - 99ms: 0
100 - 149ms: 1
150 - 199ms: 2
200 - 249ms: 3
250 - 299ms: 4
300 - 349ms: 5
> 350ms : 6
POST
0 - 149ms: 0
150 - 225ms: 1
... : ...
*/
let threshold = 50; // ms
if (['POST', 'PUT'].includes(context.method)) {
threshold *= 1.5;
}
return Math.floor(responseTime / threshold) - 1;
}
});
import createLogger from 'concurrency-logger';
const logger = createLogger(/* options */);
(async () => {
const context = {
method: 'GET',
originalUrl: '/'
};
const next = async () => {
await new Promise(resolve => setTimeout(resolve, 100));
context.status = 200;
};
try {
await logger(context, next);
} catch (error) {
// Errors are passed through
}
})();
Option | Type | Default | Description | Example |
---|---|---|---|---|
minSlots | integer | 1 | Amount of space that is provisioned to display concurrent request lanes. Number of lanes will automatically scale up as the number of concurrent requests grow. | 3 |
getLevel | integer: function(responseTime: integer) | responseTime => Math.floor(responseTime / 50) - 1 | Map response time to alert level. Alert levels go from 0 (default color) to 6 (dark red). By default that means <100ms: 0 , <150ms: 1 <200ms: 2 , ..., >=350ms: 6 . | responseTime => Math.floor(responseTime / 100) |
width | integer, boolean(false ) | undefined | If no width is provided, it will be dynamically read from process.stdout.columns . Pass in an integer to break all lines according to the specified fixed (terminal character) width. Pass in false if you want the lines not to break at all. | 80 , 132 , false |
timestamp | boolean | false | Print localized timestamp for every requests. | true , false |
slim | boolean | false | "Slim mode": don't use an extra character between request lanes to shrink width, but make them harder to separate visually. | true , false |
reporter | writable stream | process.stdout | Specify a stream that handles the output lines. Write to terminal or stream to a log file, for example. Note that the lines contain ANSI color codes, so when streaming to a file you might need a program that can read those. E.g. less -r requests.log | require('fs').createWriteStream('logs/requests.log') |
req | any: function(context: object) | context => context.originalUrl | Attach additional information to the request log line. | context => context.originalUrl + '\n' + context.get('User-Agent') |
res | any: function(context: object) | context => context.originalUrl | Attach additional information to the response log line. | context => context.originalUrl + '\n' + context.get('User-Agent') |
Install development dependencies
$ npm install
Create new fixtures to test against
$ npm run create-fixtures
Manually review fixtures (you need a program that renders ANSI escape codes)
$ less -r test/fixtures/*
Run tests
$ npm test
Run code linter
$ npm run lint
Compile to ES5 from /src to /lib
$ npm run compile
Initialize demo project
$ git clone git@github.com:PabloSichert/concurrency-logger demo
$ cd demo
demo $ git checkout gh-pages
demo $ npm install
Build demo
demo $ npm run compile
FAQs
Log HTTP requests/responses separately, visualize their concurrency and report logs/errors in context of a request
The npm package concurrency-logger receives a total of 516 weekly downloads. As such, concurrency-logger popularity was classified as not popular.
We found that concurrency-logger demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Streamline your login process and enhance security by enabling Single Sign-On (SSO) on the Socket platform, now available for all customers on the Enterprise plan, supporting 20+ identity providers.
Security News
Tea.xyz, a crypto project aimed at rewarding open source contributions, is once again facing backlash due to an influx of spam packages flooding public package registries.
Security News
As cyber threats become more autonomous, AI-powered defenses are crucial for businesses to stay ahead of attackers who can exploit software vulnerabilities at scale.