@jefferywa/node-logger
v2.4.6
Published
Banyan runtime logger with output to stdout and files in JSON format
Downloads
181
Maintainers
Readme
README
Simple runtime logging library based on bunyan
Quick Start
The recommended use of NodeLogger
is to create a singleton logger instance when the server application is initialized.
The easiest way to do this is to use the static Logger.create
method, passing the settings
object into it.
// TypeScript
import { Logger } from '@jefferywa/node-logger';
// or JavaScript
const { Logger } = require('@jefferywa/node-logger');
const logger = Logger.create({}); // Your logger instance
Logging
Logging levels
The values for the levels are taken from the Bunyan library and extended with a Z
value (for JSON logging)
const levels = {
70: 'Z', // JSON
50: 'E', // ERROR
40: 'W', // WARNING
30: 'I', // INFO
20: 'D', // DEBUG
10: 'T', // TRACE
};
Creating your Logger instance
You get started by creating a logger using Logger.create:
const logger = Logger.create({
name: 'EXAMPLE_PROJECT_NAME', // - Write your project name
type: 'backend', // - Write your project type, for example `backend` or `api`
level: 'INFO', // - Write default logger level, in default settings it is INFO
serializers: {
// Your serializers
err: function (err: any): any {
return {
message: JSON.stringify(err.message),
name: err.name,
stack: err.stack,
};
},
stringData: (data: any[] | object): string => {
return JSON.stringify(data);
},
secureStringData: (data: any[] | object): string => {
const dataStr = JSON.stringify(data);
return maskString(dataStr); // You can use functions to hide values
},
...
},
maxMessageLength: 256, // - Write maximum log row length, this setting worked with field `isTrim`
isTrim: true, // - If set to `true`, will enable the `Trim` mode using the `maxMessageLength` parameter, this setting working with setting 'isMapper=true'
isMapper: false, // If set to `true`, Mapper mode will be enabled, for a more detailed listing of the value in the entry log line
isJSON: true, // If set to `true`, `logger.json` method support will be enabled, by default `false`
isGelf: false, // If set to `true`, logs will be sent to graylog via gelf, this setting working with setting 'isMapper=true'
gelfConfig: {
graylogPort: 12201,
graylogHostname: '127.0.0.1',
connection: 'wan',
maxChunkSizeWan: 1420,
maxChunkSizeLan: 8154
}
});
Serializers
Configuration object containing functions that you can use in logging mods such as info and error
// Default serializers
const serializers = {
header: (headers) => {
const headerList = { ...headers };
if (headerList.cookie) {
headerList.cookie = headerList.cookie
.replace(HEADER_SID_REGEX, HEADER_REPLACE_PATTERN)
.replace(HEADER_RM_REGEX, HEADER_REPLACE_PATTERN);
}
if (headerList.authorization) {
headerList.authorization = HEADER_AUTHORIZATION_PATTERN;
}
return headerList;
},
req: (request) => {
return {
url: request.url,
method: request.method,
headers: NodeLogger.Serializers.header(request.headers),
};
},
err: (err) => {
return {
name: err.name,
message: JSON.stringify(err.message),
stack: err.stack,
};
},
};
You can also extend the set of these functions through the settings object, as shown above in the creation of a logger instance
Logger methods
logger.info('Your info log string'); // For logging string value
// {"@timestamp":"2022-08-12T15:15:30.999Z","name":"EXAMPLE_PROJECT_NAME","type":"backend","hostname":"notebook.local","pid":18585,"time":"2022-08-12T15:15:30.999Z","v":0,"level":"I","msg":"Your info log string","level_number":30}
logger.json({stringData: {data: {message: 'your data'}}}, 'Your log string'); // For logging json values
// {"@timestamp":"2022-08-12T15:15:30.999Z","name":"example","type":"example","hostname":"notebook.local","pid":18585,"stringData":"{\"data\":{\"message\":\"your data\"}}","time":"2022-08-12T15:15:30.999Z","v":0,"level":"Z","msg":"Your log string","level_number":70}
logger.error({err: {name: 'Error', message: 'Error message', stack: "Error: Error message stack trace" }}, 'Your error log string'); // For loggin errors
// {"@timestamp":"2022-08-14T17:01:24.499Z","name":"example","type":"example","hostname":"notebook.local","pid":18585,"err":{"message":"\"Error message\"","name":"Error","stack":"Error: Error message stack trace"},"time":"2022-08-14T17:01:24.498Z","v":0,"level":"E","msg":"Your error log string","level_number":50}
logger.warn('Your warning log string'); // For logging warnings
// {"@timestamp":"2022-08-14T17:04:16.330Z","name":"example","type":"example","hostname":"notebook.local","pid":18585,"time":"2022-08-14T17:04:16.330Z","v":0,"level":"W","msg":"Your warning log string","level_number":40}
// etc. As well as all the methods supported by bunyan
Installation
npm install @jefferywa/node-logger
yarn add @jefferywa/node-logger
TypeScript support
npm install @types/bunyan
yarn add @types/bunyan