Socket
Socket
Sign inDemoInstall

@zenvia/logger

Package Overview
Dependencies
31
Maintainers
6
Versions
5
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.4.1 to 1.4.3

2

package.json
{
"name": "@zenvia/logger",
"version": "1.4.1",
"version": "1.4.3",
"description": "A wrapper for Winston Logging Node.js library that formats the output on STDOUT as Logstash JSON format.",

@@ -5,0 +5,0 @@ "license": "MIT",

declare module '@zenvia/logger' {
import { Logger } from 'winston';
const logger: Logger;
import { Logger, LeveledLogMethod } from 'winston';
interface ZenviaLogger extends Logger {
fatal: LeveledLogMethod;
isFatalEnabled(): boolean;
}
const logger: ZenviaLogger;
export = logger;
}

@@ -0,3 +1,5 @@

/* eslint-disable prefer-rest-params */
/* eslint-disable no-param-reassign */
/* eslint-disable import/no-dynamic-require */
/* eslint-disable no-use-before-define */

@@ -34,3 +36,2 @@ const winston = require('winston');

const customCombineJson = winston.format.combine(
winston.format.splat(),
customFormatJson(),

@@ -42,27 +43,10 @@ winston.format.json(),

winston.format.timestamp(),
winston.format.splat(),
winston.format.printf((info) => (`${info.timestamp} - ${info.level}: ${info.message}`)),
);
const customErrorFormatter = winston.format((info) => {
if (info instanceof Error) {
return {
message: info.message,
stack: info.stack,
...info,
};
}
return info;
});
const createConsoleTransport = () => new winston.transports.Console({
level: process.env.LOGGING_LEVEL || 'debug',
stderrLevels: ['fatal', 'error'],
format: process.env.LOGGING_FORMATTER_DISABLED && process.env.LOGGING_FORMATTER_DISABLED === 'true' ? customCombineSimple : customCombineJson,
handleExceptions: true,
humanReadableUnhandledException: true,
});
/* eslint-disable new-cap */
const logger = new winston.createLogger({
const logger = winston.createLogger({
levels: {

@@ -77,6 +61,5 @@ fatal: 0,

},
format: winston.format.combine(
customErrorFormatter(),
winston.format.json(),
),
level: process.env.LOGGING_LEVEL || 'debug',
handleExceptions: true,
format: process.env.LOGGING_FORMATTER_DISABLED && process.env.LOGGING_FORMATTER_DISABLED === 'true' ? customCombineSimple : customCombineJson,
transports: [

@@ -88,2 +71,41 @@ createConsoleTransport(),

function leveledLogFn(level) {
return function log(...args) {
return logFn(level, ...args);
};
}
function logFn(level, msg) {
if (arguments.length === 1 && typeof level !== 'object') {
return logger;
}
if (arguments.length === 2) {
if (msg && typeof msg === 'object') {
msg = {
message: msg.message,
stack: msg.stack,
...msg,
};
}
}
return logger.realLog(...arguments);
}
function isLevelEnabledFn(level) {
return function isLevelEnabled() {
return logger.isLevelEnabled(level);
};
}
logger.fatal = leveledLogFn('fatal');
logger.error = leveledLogFn('error');
logger.warn = leveledLogFn('warn');
logger.info = leveledLogFn('info');
logger.debug = leveledLogFn('debug');
logger.verbose = leveledLogFn('verbose');
logger.silly = leveledLogFn('silly');
logger.isFatalEnabled = isLevelEnabledFn('fatal');
logger.realLog = logger.log;
logger.log = logFn;
module.exports = logger;

@@ -48,15 +48,10 @@ const os = require('os');

it('should log empty message fields when message is not provided', () => {
it('should not log when message is not provided', () => {
logger.info();
const expectedOutput = {
'@timestamp': '2018-06-05T18:20:42.345Z',
'@version': 1,
application: 'application-name',
host: os.hostname(),
message: '',
level: 'INFO',
};
stdMocks.flush().stdout.length.should.be.equal(0);
});
const actualOutput = stdMocks.flush().stdout[0];
JSON.parse(actualOutput).should.be.deep.equal(expectedOutput);
it('should not log when only level provided', () => {
logger.log('info');
stdMocks.flush().stdout.length.should.be.equal(0);
});

@@ -179,3 +174,11 @@

describe('Logging level', () => {
it('should log with LogEntry', () => {
const obj = { level: 'info', message: 'some message', property: 'some value' };
logger.log(obj);
const actualOutput = JSON.parse(stdMocks.flush().stdout[0]);
actualOutput.should.have.property('level').and.be.equal('INFO');
});
it('should log as FATAL level', () => {
logger.isFatalEnabled().should.be.equal(true);
logger.fatal('some message');

@@ -256,2 +259,32 @@ const actualOutput = JSON.parse(stdMocks.flush().stderr[0]);

});
describe('Reliability', () => {
it('should not mutate the original error object when log this object without any other data', () => {
const error = new Error('some reason');
error.should.not.have.property('level');
logger.info(error);
error.should.not.have.property('level');
});
it('should not mutate the original object when log this object without any other data', () => {
const obj = { message: 'some value' };
obj.should.not.have.property('level');
logger.info(obj);
obj.should.not.have.property('level');
});
it('should not mutate the original error object when log with level and object', () => {
const error = new Error('some reason');
error.should.not.have.property('level');
logger.log('error', error);
error.should.not.have.property('level');
});
it('should not mutate the original object when log with level and object', () => {
const obj = { property: 'some value' };
obj.should.not.have.property('level');
logger.log('info', obj);
obj.should.not.have.property('level');
});
});
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc