Comparing version 1.0.0 to 1.0.2
@@ -5,2 +5,18 @@ # Changelog | ||
### 1.0.2 (2021-02-09) | ||
### NPM Resolution | ||
* Resolve version match with NPM and Git | ||
## 1.0.1 (2021-02-08) | ||
### Documentation | ||
* Update package.json with repo links | ||
* Update Readme with examples, installation | ||
## 1.0.0 (2021-02-08) | ||
@@ -7,0 +23,0 @@ |
{ | ||
"name": "chip-log", | ||
"version": "1.0.0", | ||
"description": "", | ||
"version": "1.0.2", | ||
"description": "Structured logging with extended attributes", | ||
"homepage": "https://github.com/gregdaynes/chip-log", | ||
"bugs": "https://github.com/gregdaynes/chip-log/issues", | ||
"repository": "github:gregdaynes/chip-log", | ||
"main": "src/index.js", | ||
@@ -6,0 +9,0 @@ "scripts": { |
183
readme.md
@@ -1,12 +0,24 @@ | ||
A simple structured logger that provides extended attributes: | ||
- [Installation](#installation) | ||
- - [General Logger](#use-as-a-general-purpose-logger) | ||
- - [Express Logging](#use-with-express) | ||
- [Levels](#log-levels) | ||
- [Configuration](#configuration) | ||
- [Debug Wrapping](#debug-wrapper) | ||
- [Middleware](#middleware) | ||
- - [Context](#context-middleware) | ||
- - [Request](#request-middleware) | ||
- [Example Application](#example-application) | ||
Chip-log provides NodeJS with structured logging which includes extended attributes | ||
- module, function name, and line number of the caller | ||
- requestId pulled from async hook in the request (provided by the middleware) | ||
- context middleware logger for associating logs to a request | ||
- - request_id attribute on logs called after middleware | ||
- request logging middleware for express | ||
- - log request params and response, diagnostic info, and Request ID if using context middleware | ||
- requestId pulled from async hook in the request (express) | ||
- request logging (express) | ||
- wrapper for Debug for faster debug logs | ||
```sh | ||
[1611629195127] INFO (17914 on evil.lan): nested | ||
# Examples below using pino-pretty as formatter | ||
[1611629195127] INFO (17914 on evil.lan): nested | ||
module: "example-appserver" | ||
@@ -16,3 +28,6 @@ function: "nestedHandler" | ||
requestId: "10279b7c-69fe-4767-b36a-80f6b0b2266c" | ||
[1611629195128] INFO (17914 on evil.lan): finished | ||
payload: { | ||
myData: "example payload" | ||
} | ||
[1611629195128] INFO (17914 on evil.lan): finished | ||
module: "example-appserver" | ||
@@ -24,4 +39,37 @@ function: "helloWorldHandler" | ||
## Options | ||
## Installation | ||
Requirements | ||
- NodeJS 14+ | ||
- [optional] Express v4+ | ||
### Use as a general purpose logger | ||
Import chip-log and call the log level with a message, a json object, or both | ||
``` | ||
const log = require('chip-log'); | ||
log.info('hello world') | ||
log.error(err.message, { error }) | ||
``` | ||
### Use with Express | ||
See [example-app](#example-application) below, | ||
or the [Chip-Log Repo](https://github.com/gregdaynes/chip-log/tree/main/example-app) on Github | ||
## Log Levels | ||
- error | ||
- warn | ||
- info | ||
- debug | ||
- trace | ||
- fatal | ||
- silent | ||
## Configuration | ||
Envars to configure | ||
@@ -53,1 +101,118 @@ | ||
``` | ||
## Debug Wrapping | ||
To wrap debug messages provided from [Debug](https://npm.im/debug), ensure Chip-Log is the first import of the entry file for your module. | ||
## Middleware | ||
__requires Express v4+__ | ||
### Context Middleware | ||
Using NodeJS Async Hooks, attach a Request ID to a request. When logging in a function as part of a Express request, the `requestId` will be one of the attributes on the log | ||
In your application setup for express, when declaring middleware `.use()`, | ||
aim to add the `context` middleware as close to being first as possible. | ||
``` | ||
const app = require('express')() | ||
const { context } = require('chip-log').middleware; | ||
app.use(context()) | ||
``` | ||
```sh | ||
# example output using pino-pretty | ||
[1611629195128] INFO (17914 on evil.lan): finished | ||
module: "example-appserver" | ||
function: "helloWorldHandler" | ||
lineNum: 12 | ||
requestId: "10279b7c-69fe-4767-b36a-80f6b0b2266c" | ||
``` | ||
### Request Middleware | ||
Provides details of the request and response from Express for a request. If used with Context middleware, the log will also contain the `requestId` | ||
In your application setup for express, when declaring middleware `.use()`, | ||
you can place `request` anywhere before routes are declared. | ||
If using with the Context middleware, place anywhere after, before the routes | ||
``` | ||
const app = require('express')() | ||
const { context, request } = require('chip-log').middleware; | ||
app.use(context()) | ||
app.use(request()) | ||
``` | ||
```sh | ||
# example output using pino-pretty | ||
[1612893183539] INFO (25216 on RR3D-MAC0005.lan): request completed | ||
req: { | ||
"id": "8c276c5d-2717-47b5-8dbf-c4d33964e057", | ||
"method": "GET", | ||
"url": "/favicon.ico", | ||
"headers": { | ||
"host": "localhost:3000", | ||
"connection": "keep-alive", | ||
"sec-ch-ua": "\"Google Chrome\";v=\"87\", \" Not;A Brand\";v=\"99\", \"Chromium\";v=\"87\"", | ||
"sec-ch-ua-mobile": "?0", | ||
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36", | ||
"accept": "image/avif,image/webp,image/apng,image/*,*/*;q=0.8", | ||
"sec-fetch-site": "same-origin", | ||
"sec-fetch-mode": "no-cors", | ||
"sec-fetch-dest": "image", | ||
"referer": "http://localhost:3000/", | ||
"accept-encoding": "gzip, deflate, br", | ||
"accept-language": "en-US,en;q=0.9" | ||
}, | ||
"remoteAddress": "::1", | ||
"remotePort": 50622 | ||
} | ||
requestId: "8c276c5d-2717-47b5-8dbf-c4d33964e057" | ||
res: { | ||
"statusCode": 404, | ||
"headers": { | ||
"x-powered-by": "Express", | ||
"content-security-policy": "default-src 'none'", | ||
"x-content-type-options": "nosniff", | ||
"content-type": "text/html; charset=utf-8", | ||
"content-length": 150 | ||
} | ||
} | ||
responseTime: 2 | ||
``` | ||
## Example Application | ||
```javascript | ||
const app = require('express')() | ||
const log = require('chip-log') | ||
const { | ||
context, | ||
request, | ||
} = log.middleware | ||
const nestedHandler = () => { | ||
log.info('nested') | ||
} | ||
const helloWorldHandler = (req, res) => { | ||
nestedHandler() | ||
log.info('finished', { test: 'one' }) | ||
res.send('Hello world') | ||
} | ||
app.use(context()) | ||
app.use(request()) | ||
app.get('/', helloWorldHandler) | ||
app.listen(3000, () => log.info('Running')) | ||
``` | ||
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
19979
0
216