logger4node
Version:
 [](https://codecov.io/gh/yog27ray/logger4node)
884 lines • 35 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const sinon_1 = require("sinon");
const logger_1 = require("../src/logger/logger");
const logger4_node_1 = require("../src/logger/logger4-node");
const test_logs_1 = require("./test-logs");
const currentFolder = __dirname;
describe('Logger4nodeJSON', () => {
describe('logging in different level', () => {
let callbackSpy;
let logger1;
let logger1Instance1;
let logger1Instance2;
let logger2;
let logger2Instance1;
beforeAll(() => {
logger1 = new logger4_node_1.Logger4Node('Logger1');
logger1.setJsonLogging(true);
logger1Instance1 = logger1.instance('Instance1');
logger1Instance2 = logger1.instance('Instance2');
logger2 = new logger4_node_1.Logger4Node('Logger2');
logger2.setJsonLogging(true);
logger2Instance1 = logger2.instance('Instance1');
});
beforeEach(() => {
logger1.setLogPattern('Logger1:*');
logger2.setLogPattern('Logger1:*');
logger1.setLogLevel(logger_1.LogSeverity.VERBOSE);
logger2.setLogLevel(logger_1.LogSeverity.VERBOSE);
Object.keys(logger_1.LogLevel).forEach((logSeverity) => logger1.setLogSeverityPattern(logSeverity, undefined));
Object.keys(logger_1.LogLevel).forEach((logSeverity) => logger2.setLogSeverityPattern(logSeverity, undefined));
callbackSpy = (0, sinon_1.spy)(console, 'log');
});
it('should print all logs', async () => {
await (0, test_logs_1.printLogsInDifferentLevel)(logger1Instance1);
const logs = (0, test_logs_1.stringLogsToJSON)(callbackSpy);
expect(logs).toEqual([
{
level: 'verbose',
time: 0,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '15',
column: '10',
},
message: 'verbose log',
},
{
level: 'debug',
time: 1,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '16',
column: '10',
},
message: 'debug log',
},
{
level: 'info',
time: 2,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '17',
column: '10',
},
message: 'info log',
},
{
level: 'warn',
time: 3,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '18',
column: '10',
},
message: 'warn log',
},
{
level: 'error',
time: 4,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '19',
column: '10',
},
message: 'error log',
},
]);
});
it('should not print logger2 logs', async () => {
await (0, test_logs_1.printLogsInDifferentLevel)(logger2Instance1);
expect(callbackSpy.callCount).toBe(0);
});
it('should allow print logger2 logs', async () => {
logger2.setLogPattern('Logger1:*,Logger2:*');
logger2.setLogPattern('Logger1:*,Logger2:*');
await (0, test_logs_1.printLogsInDifferentLevel)(logger2Instance1);
const logs = (0, test_logs_1.stringLogsToJSON)(callbackSpy);
expect(logs).toEqual([
{
level: 'verbose',
time: 0,
extra: {},
stack: '',
className: 'Logger2:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '15',
column: '10',
},
message: 'verbose log',
},
{
level: 'debug',
time: 1,
extra: {},
stack: '',
className: 'Logger2:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '16',
column: '10',
},
message: 'debug log',
},
{
level: 'info',
time: 2,
extra: {},
stack: '',
className: 'Logger2:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '17',
column: '10',
},
message: 'info log',
},
{
level: 'warn',
time: 3,
extra: {},
stack: '',
className: 'Logger2:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '18',
column: '10',
},
message: 'warn log',
},
{
level: 'error',
time: 4,
extra: {},
stack: '',
className: 'Logger2:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '19',
column: '10',
},
message: 'error log',
},
]);
});
it('should print only Logger1 Debug and above logs', async () => {
logger1.setLogLevel(logger_1.LogSeverity.WARN);
logger2.setLogLevel(logger_1.LogSeverity.WARN);
await (0, test_logs_1.printLogsInDifferentLevel)(logger1Instance1);
await (0, test_logs_1.printLogsInDifferentLevel)(logger2Instance1);
const logs = (0, test_logs_1.stringLogsToJSON)(callbackSpy);
expect(logs).toEqual([
{
level: 'warn',
time: 0,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '18',
column: '10',
},
message: 'warn log',
},
{
level: 'error',
time: 1,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '19',
column: '10',
},
message: 'error log',
},
]);
});
it('should print only Logger1 Debug and above logs and logger2 only Debug: ', async () => {
logger1.setLogLevel(logger_1.LogSeverity.WARN);
logger2.setLogLevel(logger_1.LogSeverity.WARN);
logger1.setLogSeverityPattern(logger_1.LogSeverity.WARN, 'Logger2:*');
logger2.setLogSeverityPattern(logger_1.LogSeverity.WARN, 'Logger2:*');
await (0, test_logs_1.printLogsInDifferentLevel)(logger1Instance1);
await (0, test_logs_1.printLogsInDifferentLevel)(logger2Instance1);
const logs = (0, test_logs_1.stringLogsToJSON)(callbackSpy);
expect(logs).toEqual([
{
level: 'warn',
time: 0,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '18',
column: '10',
},
message: 'warn log',
},
{
level: 'error',
time: 1,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '19',
column: '10',
},
message: 'error log',
},
{
level: 'warn',
time: 2,
extra: {},
stack: '',
className: 'Logger2:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '18',
column: '10',
},
message: 'warn log',
},
]);
});
it('should print both instance of Logger1', async () => {
await (0, test_logs_1.printLogsInDifferentLevel)(logger1Instance1);
await (0, test_logs_1.printLogsInDifferentLevel)(logger1Instance2);
const logs = (0, test_logs_1.stringLogsToJSON)(callbackSpy);
expect(logs).toEqual([
{
level: 'verbose',
time: 0,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '15',
column: '10',
},
message: 'verbose log',
},
{
level: 'debug',
time: 1,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '16',
column: '10',
},
message: 'debug log',
},
{
level: 'info',
time: 2,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '17',
column: '10',
},
message: 'info log',
},
{
level: 'warn',
time: 3,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '18',
column: '10',
},
message: 'warn log',
},
{
level: 'error',
time: 4,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '19',
column: '10',
},
message: 'error log',
},
{
level: 'verbose',
time: 5,
extra: {},
stack: '',
className: 'Logger1:Instance2',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '15',
column: '10',
},
message: 'verbose log',
},
{
level: 'debug',
time: 6,
extra: {},
stack: '',
className: 'Logger1:Instance2',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '16',
column: '10',
},
message: 'debug log',
},
{
level: 'info',
time: 7,
extra: {},
stack: '',
className: 'Logger1:Instance2',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '17',
column: '10',
},
message: 'info log',
},
{
level: 'warn',
time: 8,
extra: {},
stack: '',
className: 'Logger1:Instance2',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '18',
column: '10',
},
message: 'warn log',
},
{
level: 'error',
time: 9,
extra: {},
stack: '',
className: 'Logger1:Instance2',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '19',
column: '10',
},
message: 'error log',
},
]);
});
it('should print only instance1 of Logger1', async () => {
logger1.setLogPattern('Logger1:*,-Logger1:Instance2*');
logger2.setLogPattern('Logger1:*,-Logger1:Instance2*');
await (0, test_logs_1.printLogsInDifferentLevel)(logger1Instance1);
await (0, test_logs_1.printLogsInDifferentLevel)(logger1Instance2);
const logs = (0, test_logs_1.stringLogsToJSON)(callbackSpy);
expect(logs).toEqual([
{
level: 'verbose',
time: 0,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '15',
column: '10',
},
message: 'verbose log',
},
{
level: 'debug',
time: 1,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '16',
column: '10',
},
message: 'debug log',
},
{
level: 'info',
time: 2,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '17',
column: '10',
},
message: 'info log',
},
{
level: 'warn',
time: 3,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '18',
column: '10',
},
message: 'warn log',
},
{
level: 'error',
time: 4,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '19',
column: '10',
},
message: 'error log',
},
]);
});
it('should print session information', async () => {
logger1.setLogPattern('Logger1:*,-Logger1:Instance2*');
logger2.setLogPattern('Logger1:*,-Logger1:Instance2*');
logger4_node_1.Logger4Node.Trace.requestHandler(() => ({ key1: 'value1', key2: 'value2' }))({}, {}, async () => {
await (0, test_logs_1.printLogsInDifferentLevel)(logger1Instance1);
await (0, test_logs_1.printLogsWithExtraFields)(logger1Instance1);
});
await (0, test_logs_1.wait)(400);
expect(callbackSpy.callCount).toBe(6);
const calls = (0, test_logs_1.stringLogsToJSON)(callbackSpy);
calls.forEach((each_) => {
const each = each_;
expect(each.request.id).toBeDefined();
delete each.request.id;
});
expect(calls).toEqual([{
level: 'verbose',
time: 0,
extra: {},
stack: '',
className: 'Logger1:Instance1',
request: { key1: 'value1', key2: 'value2' },
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '15',
column: '10',
},
message: 'verbose log',
}, {
level: 'debug',
time: 1,
extra: {},
stack: '',
className: 'Logger1:Instance1',
request: { key1: 'value1', key2: 'value2' },
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '16',
column: '10',
},
message: 'debug log',
}, {
level: 'info',
time: 2,
extra: {},
stack: '',
className: 'Logger1:Instance1',
request: { key1: 'value1', key2: 'value2' },
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '17',
column: '10',
},
message: 'info log',
},
{
level: 'warn',
time: 3,
extra: {},
stack: '',
className: 'Logger1:Instance1',
request: { key1: 'value1', key2: 'value2' },
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '18',
column: '10',
},
message: 'warn log',
},
{
level: 'error',
time: 4,
extra: {},
stack: '',
className: 'Logger1:Instance1',
request: { key1: 'value1', key2: 'value2' },
source: {
caller: 'printLogsInDifferentLevel',
fileName: 'test-logs.ts',
path: currentFolder,
line: '19',
column: '10',
},
message: 'error log',
},
{
level: 'error',
time: 5,
stack: '',
className: 'Logger1:Instance1',
request: { key1: 'value1', key2: 'value2' },
extra: { extraField: 'extraValue' },
source: {
caller: 'printLogsWithExtraFields',
fileName: 'test-logs.ts',
path: currentFolder,
line: '24',
column: '10',
},
message: 'verbose log',
}]);
});
afterEach(() => {
callbackSpy.restore();
test_logs_1.loggerSpy.reset();
});
});
describe('logging in different type', () => {
let callbackSpy;
let logger1;
let logger1Instance1;
let logger2;
let logger2Instance1;
beforeAll(() => {
logger1 = new logger4_node_1.Logger4Node('Logger1');
logger1.setJsonLogging(true);
logger1Instance1 = logger1.instance('Instance1');
logger2 = new logger4_node_1.Logger4Node('Logger2');
logger2.setJsonLogging(true);
logger2.setStringLogging(true);
logger2Instance1 = logger2.instance('Instance1');
});
beforeEach(() => {
logger1.setLogPattern('Logger1:*,Logger2:*');
logger2.setLogPattern('Logger1:*,Logger2:*');
logger1.setLogLevel(logger_1.LogSeverity.VERBOSE);
logger2.setLogLevel(logger_1.LogSeverity.VERBOSE);
Object.keys(logger_1.LogLevel).forEach((logSeverity) => logger1.setLogSeverityPattern(logSeverity, undefined));
Object.keys(logger_1.LogLevel).forEach((logSeverity) => logger2.setLogSeverityPattern(logSeverity, undefined));
callbackSpy = (0, sinon_1.spy)(console, 'log');
});
it('should print logs not only in string', async () => {
await (0, test_logs_1.printLogsInDifferentType)(logger1Instance1);
const logs = (0, test_logs_1.stringLogsToJSON)(callbackSpy);
expect(logs).toEqual([
{
level: 'error',
time: 0,
extra: {},
stack: '',
className: 'Logger1:Instance1',
source: {
caller: 'printLogsInDifferentType',
fileName: 'test-logs.ts',
path: currentFolder,
line: '29',
column: '10',
},
message: 'this is 1 true {"key1":1,"value":2}',
},
]);
});
it('should print logs only in string', async () => {
await (0, test_logs_1.printLogsInDifferentType)(logger2Instance1);
const logs = (0, test_logs_1.stringLogsToJSON)(callbackSpy);
expect(logs).toEqual([
{
level: 'error',
time: 0,
extra: {},
stack: '',
className: 'Logger2:Instance1',
source: {
caller: 'printLogsInDifferentType',
fileName: 'test-logs.ts',
path: currentFolder,
line: '29',
column: '10',
},
message: 'this is 1 true {"key1":1,"value":2}',
},
]);
});
it('should print logs only in string for fatal', async () => {
await (0, test_logs_1.printFatalLogsInDifferentType)(logger2Instance1);
const logs = (0, test_logs_1.stringLogsToJSON)(callbackSpy);
expect(logs).toEqual([
{
level: 'fatal',
time: 0,
extra: {},
stack: '',
className: 'Logger2:Instance1',
source: {
caller: 'printFatalLogsInDifferentType',
fileName: 'test-logs.ts',
path: currentFolder,
line: '34',
column: '10',
},
message: 'this is 1 true {"key1":1,"value":2}',
},
]);
});
afterEach(() => {
callbackSpy.restore();
test_logs_1.loggerSpy.reset();
});
});
describe('logging string, object, array in one log', () => {
let logger;
let callbackSpy;
let loggerInstance;
beforeAll(() => {
logger = new logger4_node_1.Logger4Node('Logger');
loggerInstance = logger.instance('Instance');
logger.setJsonLogging(true);
});
beforeEach(() => {
logger.setLogPattern('Logger:*');
logger.setLogLevel(logger_1.LogSeverity.VERBOSE);
Object.keys(logger_1.LogLevel).forEach((logSeverity) => logger.setLogSeverityPattern(logSeverity, undefined));
callbackSpy = (0, sinon_1.spy)(console, 'log');
});
it('should log multi line string in one line', async () => {
await (0, test_logs_1.printLogWithMultipleEndCharacters)(loggerInstance);
const logs = (0, test_logs_1.stringLogsToJSON)(callbackSpy);
expect(logs).toEqual([
{
level: 'error',
time: 0,
extra: {},
stack: '',
className: 'Logger:Instance',
source: {
caller: 'printLogWithMultipleEndCharacters',
fileName: 'test-logs.ts',
path: currentFolder,
line: '39',
column: '10',
},
message: 'this is line1\nline2\nline2 {"var":1,"var2":2}',
},
]);
});
it('should log properly when message contains \\"', async () => {
await (0, test_logs_1.printLogWithBackSlashCharacter)(loggerInstance);
const logs = (0, test_logs_1.stringLogsToJSON)(callbackSpy);
expect(logs).toEqual([
{
level: 'error',
time: 0,
extra: {},
stack: '',
className: 'Logger:Instance',
source: {
caller: 'printLogWithBackSlashCharacter',
fileName: 'test-logs.ts',
path: currentFolder,
line: '44',
column: '10',
},
message: 'this is line1 \\" {"var":1,"var2":2}',
},
]);
});
it('should log properly when message contains \t', async () => {
await (0, test_logs_1.printLogWithSpecialTabCharacter)(loggerInstance);
const logs = (0, test_logs_1.stringLogsToJSON)(callbackSpy);
expect(logs).toEqual([
{
level: 'error',
time: 0,
extra: {},
stack: '',
className: 'Logger:Instance',
source: {
caller: 'printLogWithSpecialTabCharacter',
fileName: 'test-logs.ts',
path: currentFolder,
line: '49',
column: '10',
},
message: 'this is line1 \t',
},
]);
});
it('should log properly when message contains new line character with \n', async () => {
await (0, test_logs_1.printLogWithNewLineAndSlashNCharacter)(loggerInstance);
expect(callbackSpy.callCount).toBe(1);
expect(typeof JSON.parse(callbackSpy.getCall(0).args[0])).toBe('object');
});
afterEach(() => {
callbackSpy.restore();
test_logs_1.loggerSpy.reset();
});
});
describe('github link logging', () => {
let logger;
let callbackSpy;
let loggerInstance;
beforeAll(() => {
const currentPathSplit = __dirname.split('/');
logger = new logger4_node_1.Logger4Node('Logger', {
github: {
basePath: currentPathSplit.slice(0, currentPathSplit.length - 1).join('/'),
commitHash: 'fd4a2de07ed9e31d890370e05fb4b8a416f27224',
org: 'yog27ray',
repo: 'logger4node',
},
});
loggerInstance = logger.instance('Instance');
logger.setJsonLogging(true);
});
beforeEach(() => {
logger.setLogPattern('Logger:*');
logger.setLogLevel(logger_1.LogSeverity.VERBOSE);
Object.keys(logger_1.LogLevel).forEach((logSeverity) => logger.setLogSeverityPattern(logSeverity, undefined));
callbackSpy = (0, sinon_1.spy)(console, 'log');
});
it('should log github detail', async () => {
await (0, test_logs_1.printLogSingleLine)(loggerInstance);
const logs = (0, test_logs_1.stringLogsToJSON)(callbackSpy);
expect(logs).toEqual([
{
level: 'error',
time: 0,
extra: {},
stack: '',
className: 'Logger:Instance',
source: {
caller: 'printLogSingleLine',
fileName: 'test-logs.ts',
path: currentFolder,
line: '54',
column: '10',
github: 'https://github.com/yog27ray/logger4node/blob/fd4a2de07ed9e31d890370e05fb4b8a416f27224/spec/test-logs.ts#L54',
},
message: 'this is string',
},
]);
});
afterEach(() => {
callbackSpy.restore();
test_logs_1.loggerSpy.reset();
});
});
});
//# sourceMappingURL=test-json.test.js.map