You're Invited: Meet the Socket team at BSidesSF and RSAC - April 27 - May 1.RSVP
Socket
Sign inDemoInstall
Socket

nestjs-pino

Package Overview
Dependencies
Maintainers
1
Versions
1341
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

nestjs-pino - npm Package Compare versions

Comparing version

to
2.1.0-alpha.0a6fbe

2

InjectPinoLogger.js

@@ -10,3 +10,3 @@ "use strict";

decoratedLoggers.add(context);
return common_1.Inject(getLoggerToken(context));
return (0, common_1.Inject)(getLoggerToken(context));
}

@@ -13,0 +13,0 @@ exports.InjectPinoLogger = InjectPinoLogger;

@@ -63,4 +63,4 @@ "use strict";

Logger = __decorate([
common_1.Injectable(),
__param(1, common_1.Inject(params_1.PARAMS_PROVIDER_TOKEN)),
(0, common_1.Injectable)(),
__param(1, (0, common_1.Inject)(params_1.PARAMS_PROVIDER_TOKEN)),
__metadata("design:paramtypes", [PinoLogger_1.PinoLogger, Object])

@@ -67,0 +67,0 @@ ], Logger);

@@ -34,3 +34,3 @@ "use strict";

};
const decorated = InjectPinoLogger_1.createProvidersForDecorated();
const decorated = (0, InjectPinoLogger_1.createProvidersForDecorated)();
return {

@@ -48,3 +48,3 @@ module: LoggerModule_1,

};
const decorated = InjectPinoLogger_1.createProvidersForDecorated();
const decorated = (0, InjectPinoLogger_1.createProvidersForDecorated)();
const providers = [

@@ -79,5 +79,5 @@ Logger_1.Logger,

LoggerModule = LoggerModule_1 = __decorate([
common_1.Global(),
common_1.Module({ providers: [Logger_1.Logger], exports: [Logger_1.Logger] }),
__param(0, common_1.Inject(params_1.PARAMS_PROVIDER_TOKEN)),
(0, common_1.Global)(),
(0, common_1.Module)({ providers: [Logger_1.Logger], exports: [Logger_1.Logger] }),
__param(0, (0, common_1.Inject)(params_1.PARAMS_PROVIDER_TOKEN)),
__metadata("design:paramtypes", [Object])

@@ -91,7 +91,15 @@ ], LoggerModule);

if (Array.isArray(params)) {
return [pinoHttp(...params), bindLoggerMiddleware];
const middleware = pinoHttp(...params);
// @ts-expect-error: root is readonly field, but this is the place where
// it's set actually
PinoLogger_1.PinoLogger.root = middleware.logger;
return [middleware, bindLoggerMiddleware];
}
const middleware = pinoHttp(params);
// @ts-expect-error: root is readonly field, but this is the place where
// it's set actually
PinoLogger_1.PinoLogger.root = middleware.logger;
// FIXME: params type here is pinoHttp.Options | pino.DestinationStream
// pinoHttp has two overloads, each of them takes those types
return [pinoHttp(params), bindLoggerMiddleware];
return [middleware, bindLoggerMiddleware];
}

@@ -101,4 +109,4 @@ function bindLoggerMiddleware(req, _res, next) {

// be called without arguments
storage_1.storage.run(req.log, next);
storage_1.storage.run(new storage_1.Store(req.log), next);
}
//# sourceMappingURL=LoggerModule.js.map
{
"name": "nestjs-pino",
"version": "2.0.2",
"version": "2.1.0-alpha.0a6fbe",
"description": "Pino logger for NestJS",

@@ -58,3 +58,3 @@ "main": "index.js",

"eslint-plugin-prettier": "^3.4.1",
"jest": "27.0.6",
"jest": "27.1.0",
"memorystream": "^0.3.1",

@@ -61,0 +61,0 @@ "pino-http": "^5.6.0",

@@ -6,5 +6,10 @@ import * as pino from 'pino';

export declare class PinoLogger implements PinoMethods {
/**
* root is the most root logger that can be used to change params at runtime.
* Accessible only when `useExisting` is not set to `true` in `Params`.
* Readonly, but you can change it's properties.
*/
static readonly root: pino.Logger;
private context;
private readonly contextName;
private readonly opts;
constructor({ pinoHttp, renameContext }: Params);

@@ -26,3 +31,4 @@ trace(msg: string, ...args: any[]): void;

get logger(): pino.Logger;
assign(fields: pino.Bindings): void;
}
export {};

@@ -14,2 +14,3 @@ "use strict";

};
var PinoLogger_1;
Object.defineProperty(exports, "__esModule", { value: true });

@@ -25,5 +26,7 @@ exports.PinoLogger = exports.__resetOutOfContextForTests = void 0;

outOfContext = undefined;
// @ts-ignore reset root for tests only
PinoLogger.root = undefined;
}
exports.__resetOutOfContextForTests = __resetOutOfContextForTests;
let PinoLogger = class PinoLogger {
let PinoLogger = PinoLogger_1 = class PinoLogger {
constructor({ pinoHttp, renameContext }) {

@@ -35,3 +38,3 @@ this.context = '';

}
else if (params_1.isPassedLogger(pinoHttp)) {
else if ((0, params_1.isPassedLogger)(pinoHttp)) {
outOfContext = pinoHttp.logger;

@@ -49,3 +52,2 @@ }

this.contextName = renameContext || 'context';
this.opts = pinoHttp;
}

@@ -98,10 +100,18 @@ trace(...args) {

get logger() {
var _a;
// outOfContext is always set in runtime before starts using
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
return storage_1.storage.getStore() || outOfContext;
return ((_a = storage_1.storage.getStore()) === null || _a === void 0 ? void 0 : _a.logger) || outOfContext;
}
assign(fields) {
const store = storage_1.storage.getStore();
if (!store) {
throw new Error(`${PinoLogger_1.name}: unable to assign extra fields out of request scope`);
}
store.logger = store.logger.child(fields);
}
};
PinoLogger = __decorate([
common_1.Injectable({ scope: common_1.Scope.TRANSIENT }),
__param(0, common_1.Inject(params_1.PARAMS_PROVIDER_TOKEN)),
PinoLogger = PinoLogger_1 = __decorate([
(0, common_1.Injectable)({ scope: common_1.Scope.TRANSIENT }),
__param(0, (0, common_1.Inject)(params_1.PARAMS_PROVIDER_TOKEN)),
__metadata("design:paramtypes", [Object])

@@ -108,0 +118,0 @@ ], PinoLogger);

@@ -11,3 +11,3 @@ <p align="center">

</a>
<img alt="GitHub branch checks state" src="https://img.shields.io/github/checks-status/iamolegga/nestjs-pino/master">
<img alt="GitHub branch checks state" src="https://badgen.net/github/checks/iamolegga/nestjs-pino">
<a href="https://codeclimate.com/github/iamolegga/nestjs-pino/test_coverage">

@@ -378,2 +378,49 @@ <img src="https://api.codeclimate.com/v1/badges/2821150bb93506cb66fc/test_coverage" />

## Assign extra fields for future calls
You can enrich logs before calling log methods. It's possible by using `assign` method of `PinoLogger` instance. As `Logger` class is used only for NestJS built-in `Logger` substitution via `app.useLogger(...)` this feature is only limited to `PinoLogger` class. Example:
```ts
@Controller('/')
class TestController {
constructor(
private readonly logger: PinoLogger,
private readonly service: MyService,
) {}
@Get()
get() {
// assign extra fields in one place...
this.logger.assign({ userID: '42' });
return this.service.test();
}
}
@Injectable()
class MyService {
private readonly logger = new Logger(MyService.name);
test() {
// ...and it will be logged in another one
this.logger.log('hello world');
}
}
```
## Change pino params at runtime
Pino root instance with passed via module registration params creates a separate child logger for every request. This root logger params can be changed at runtime via `PinoLogger.root` property which is the pointer to logger instance. Example:
```ts
@Controller('/')
class TestController {
@Post('/change-loggin-level')
setLevel() {
PinoLogger.root.level = 'info';
return null;
}
}
```
## Migration

@@ -380,0 +427,0 @@

/// <reference types="node" />
import { AsyncLocalStorage } from 'async_hooks';
import { Logger } from 'pino';
export declare const storage: AsyncLocalStorage<Logger>;
export declare class Store {
logger: Logger;
constructor(logger: Logger);
}
export declare const storage: AsyncLocalStorage<Store>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.storage = void 0;
exports.storage = exports.Store = void 0;
const async_hooks_1 = require("async_hooks");
class Store {
constructor(logger) {
this.logger = logger;
}
}
exports.Store = Store;
exports.storage = new async_hooks_1.AsyncLocalStorage();
//# sourceMappingURL=storage.js.map