From e1528d8a70408c82c6c270fb7bce967adc9174e5 Mon Sep 17 00:00:00 2001 From: "Frederic G. MARAND" Date: Wed, 5 Sep 2018 20:55:13 +0200 Subject: [PATCH] Issue #63: passing all tests except processor handling. --- __tests__/unit/contextSourcingTest.ts | 72 +++----- __tests__/unit/logContextTest.ts | 142 +++++++-------- __tests__/unit/logLevelsTest.ts | 13 +- __tests__/unit/meteorUserProcessorTest.ts | 52 +++--- __tests__/unit/mongodbSenderTest.ts | 60 +++++-- __tests__/unit/serverLoggerTest.ts | 129 +++++++------- __tests__/unit/stringifyTest.ts | 2 +- __tests__/unit/test.ts | 5 +- __tests__/unit/types.ts | 38 ++++ jest.config.js | 5 + lib/ClientLogger.js.map | 1 - lib/IContext.d.ts | 6 +- lib/Logger.js.map | 1 - lib/{ => Loggers}/ClientLogger.d.ts | 10 +- lib/{ => Loggers}/ClientLogger.js | 15 +- lib/Loggers/ClientLogger.js.map | 1 + lib/{ => Loggers}/ILogger.d.ts | 4 +- lib/{ => Loggers}/ILogger.js | 0 lib/{ => Loggers}/ILogger.js.map | 2 +- lib/{ => Loggers}/Logger.d.ts | 94 ++++++---- lib/{ => Loggers}/Logger.js | 170 +++++++++++------- lib/Loggers/Logger.js.map | 1 + lib/{ => Loggers}/ServerLogger.d.ts | 48 +++-- lib/{ => Loggers}/ServerLogger.js | 91 +++++++--- lib/Loggers/ServerLogger.js.map | 1 + lib/Loggers/index.d.ts | 21 +++ lib/{ => Loggers}/index.js | 48 ++--- lib/Loggers/index.js.map | 1 + lib/Senders/ConsoleSender.js | 14 +- lib/Senders/ConsoleSender.js.map | 2 +- lib/Senders/MeteorClientHttpSender.js | 4 +- lib/Senders/MeteorClientHttpSender.js.map | 2 +- lib/Senders/MeteorClientMethodSender.js | 11 +- lib/Senders/MeteorClientMethodSender.js.map | 2 +- lib/Senders/MongodbSender.d.ts | 2 +- lib/Senders/MongodbSender.js | 13 +- lib/Senders/MongodbSender.js.map | 2 +- lib/Senders/NullSender.js | 7 +- lib/Senders/NullSender.js.map | 2 +- lib/Senders/SenderBase.d.ts | 13 +- lib/Senders/SenderBase.js | 8 +- lib/Senders/SenderBase.js.map | 2 +- lib/Senders/SyslogSender.js | 13 +- lib/Senders/SyslogSender.js.map | 2 +- lib/Senders/TeeSender.js | 7 +- lib/Senders/TeeSender.js.map | 2 +- lib/ServerLogger.js.map | 1 - lib/Strategies/IStrategy.d.ts | 2 +- lib/Strategies/LeveledStrategy.d.ts | 2 +- lib/Strategies/LeveledStrategy.js | 4 +- lib/Strategies/LeveledStrategy.js.map | 2 +- lib/Strategies/StrategyBase.d.ts | 2 +- lib/Strategies/TrivialStrategy.d.ts | 2 +- lib/index.d.ts | 21 --- lib/index.js.map | 1 - src/IContext.ts | 2 +- src/{ => Loggers}/ClientLogger.ts | 15 +- src/{ => Loggers}/ILogger.ts | 4 +- src/{ => Loggers}/Logger.ts | 187 +++++++++++++------- src/{ => Loggers}/ServerLogger.ts | 99 +++++++---- src/Loggers/index.ts | 63 +++++++ src/Senders/ConsoleSender.ts | 12 +- src/Senders/MeteorClientHttpSender.ts | 2 +- src/Senders/MeteorClientMethodSender.ts | 4 +- src/Senders/MongodbSender.ts | 12 +- src/Senders/NullSender.ts | 2 +- src/Senders/SenderBase.ts | 8 +- src/Senders/SyslogSender.ts | 8 +- src/Senders/TeeSender.ts | 2 +- src/Strategies/IStrategy.ts | 2 +- src/Strategies/LeveledStrategy.ts | 4 +- src/Strategies/StrategyBase.ts | 2 +- src/index.ts | 63 ------- tsconfig.json | 4 +- tslint.json | 6 +- 75 files changed, 983 insertions(+), 696 deletions(-) create mode 100644 __tests__/unit/types.ts delete mode 100644 lib/ClientLogger.js.map delete mode 100644 lib/Logger.js.map rename lib/{ => Loggers}/ClientLogger.d.ts (67%) rename lib/{ => Loggers}/ClientLogger.js (84%) create mode 100644 lib/Loggers/ClientLogger.js.map rename lib/{ => Loggers}/ILogger.d.ts (95%) rename lib/{ => Loggers}/ILogger.js (100%) rename lib/{ => Loggers}/ILogger.js.map (54%) rename lib/{ => Loggers}/Logger.d.ts (75%) rename lib/{ => Loggers}/Logger.js (75%) create mode 100644 lib/Loggers/Logger.js.map rename lib/{ => Loggers}/ServerLogger.d.ts (77%) rename lib/{ => Loggers}/ServerLogger.js (82%) create mode 100644 lib/Loggers/ServerLogger.js.map create mode 100644 lib/Loggers/index.d.ts rename lib/{ => Loggers}/index.js (50%) create mode 100644 lib/Loggers/index.js.map delete mode 100644 lib/ServerLogger.js.map delete mode 100644 lib/index.d.ts delete mode 100644 lib/index.js.map rename src/{ => Loggers}/ClientLogger.ts (68%) rename src/{ => Loggers}/ILogger.ts (94%) rename src/{ => Loggers}/Logger.ts (73%) rename src/{ => Loggers}/ServerLogger.ts (81%) create mode 100644 src/Loggers/index.ts delete mode 100644 src/index.ts diff --git a/__tests__/unit/contextSourcingTest.ts b/__tests__/unit/contextSourcingTest.ts index f52d564..8638f93 100644 --- a/__tests__/unit/contextSourcingTest.ts +++ b/__tests__/unit/contextSourcingTest.ts @@ -1,52 +1,36 @@ -import ClientLogger from "../../src/ClientLogger"; import { - DETAILS_KEY, HOST_KEY, - IContext, ITimestamps, ITimestampsHash, SOURCE_KEY, TS_KEY, + DETAILS_KEY, + HOST_KEY, + IContext, + ITimestamps, + ITimestampsHash, + SOURCE_KEY, + TS_KEY, } from "../../src/IContext"; -import {ILogger} from "../../src/ILogger"; -import { Levels } from "../../src/LogLevel"; -import ServerLogger from "../../src/ServerLogger"; - -// Unit tests run on NodeJS, so we have access to its packages. -import { hostname } from "os"; +import { ClientLogger } from "../../src/Loggers/ClientLogger"; +import {ILogger} from "../../src/Loggers/ILogger"; +import {ServerLogger} from "../../src/Loggers/ServerLogger"; +import {Levels} from "../../src/LogLevel"; import {ISender} from "../../src/Senders/ISender"; -import {IStrategy} from "../../src/Strategies/IStrategy"; - -type StrategyFactory = (sender?: ISender) => IStrategy; - -const newEmptyStrategy: StrategyFactory = () => ({ - customizeLogger: () => [], - selectSenders: () => [], -}); - -class TestSender { - public result: IContext = {}; - - public send(level, message, context): void { - this.result = { level, message, context }; - } -} +import { newLogStrategy, TestSender } from "./types"; -const newLogStrategy: StrategyFactory = (sender: TestSender) => ({ - ...newEmptyStrategy(), - selectSenders: () => [sender], -}); +// Unit tests run on NodeJS, so we have access to its packages. +import {hostname} from "os"; function testContextSourcing(): void { function newClientLogger(sender: ISender): ILogger { - const cl: ILogger = new ClientLogger(newLogStrategy(sender)); - return cl; + return new ClientLogger(newLogStrategy(sender)); } function newServerLogger(sender: ISender): ServerLogger { - const sl: ServerLogger = new ServerLogger(newLogStrategy(sender)); - return sl; + return new ServerLogger(newLogStrategy(sender)); } test("Client logging, pure, no processor", () => { const sender: TestSender = new TestSender(); const cl = newClientLogger(sender); - // Constant strings are immutable. + // Constant scalars are immutable. + const level = Levels.WARNING; const message = "some message"; const side = "client"; @@ -55,17 +39,17 @@ function testContextSourcing(): void { const expectedDetails = { ...details }; const t1: number = +new Date(); - cl.log(Levels.WARNING, message, details); + cl.log(level, message, details); const t2: number = +new Date(); const expected = { context: { - [DETAILS_KEY]: details, + [DETAILS_KEY]: expectedDetails, // HOST_KEY: not on client contexts. [SOURCE_KEY]: side, // TS_KEY: Cannot test content just with toMatchObject. }, - level: Levels.WARNING, + level, message, }; expect(t2).toBeGreaterThanOrEqual(t1); @@ -92,6 +76,7 @@ function testContextSourcing(): void { const sl = newServerLogger(sender); // Constant strings are immutable. + const level = Levels.WARNING; const message = "some message"; const host = hostname(); const side = "server"; @@ -101,7 +86,7 @@ function testContextSourcing(): void { const expectedDetails = { ...details }; const t1: number = +new Date(); - sl.log(Levels.WARNING, message, details); + sl.log(level, message, details); const t2: number = +new Date(); const expected = { @@ -111,7 +96,7 @@ function testContextSourcing(): void { [SOURCE_KEY]: side, // TS_KEY: Cannot test content just with toMatchObject. }, - level: Levels.WARNING, + level, message, }; expect(t2).toBeGreaterThanOrEqual(t1); @@ -133,7 +118,8 @@ function testContextSourcing(): void { const sender: TestSender = new TestSender(); const sl = newServerLogger(sender); - // Constant strings are immutable. + // Constant scalars are immutable. + const level = Levels.WARNING; const message = "some message"; const host = hostname(); @@ -166,7 +152,7 @@ function testContextSourcing(): void { [side]: clientContext, }; - sl.logExtended(Levels.WARNING, message, initialContext, "client"); + sl.logExtended(level, message, initialContext, side); const t2: number = +new Date(); const expected = { @@ -178,7 +164,7 @@ function testContextSourcing(): void { [side]: expectedClientContext, // No "server" content without a server processor. }, - level: Levels.WARNING, + level, message, }; @@ -194,7 +180,7 @@ function testContextSourcing(): void { expect(actualContext).toHaveProperty(TS_KEY); const ts: ITimestampsHash = actualContext[TS_KEY]; - expect(typeof result[TS_KEY]).toBe("object"); + expect(typeof actualContext[TS_KEY]).toBe("object"); expect(typeof ts).toBe("object"); expect(ts).toHaveProperty(side); expect(ts).toHaveProperty("server"); diff --git a/__tests__/unit/logContextTest.ts b/__tests__/unit/logContextTest.ts index 297af55..3bdbcca 100644 --- a/__tests__/unit/logContextTest.ts +++ b/__tests__/unit/logContextTest.ts @@ -1,21 +1,14 @@ -import { - DETAILS_KEY, - IContext, - SOURCE_KEY, - TS_KEY, -} from "../../src/IContext"; -import Logger from "../../src/Logger"; +import {DETAILS_KEY, IContext, SOURCE_KEY, TS_KEY } from "../../src/IContext"; +import {Logger} from "../../src/Loggers/Logger"; +import {ServerLogger} from "../../src/Loggers/ServerLogger"; import * as LogLevel from "../../src/LogLevel"; +import {IProcessor} from "../../src/Processors/IProcessor"; import ProcessorBase from "../../src/Processors/ProcessorBase"; -import ServerLogger from "../../src/ServerLogger"; +import {newEmptyStrategy, newLogStrategy, TestSender} from "./types"; function testImmutableContext() { - const strategy = { - customizeLogger: () => [], - selectSenders: () => [], - }; test("should not modify context in log() calls", () => { - const logger = new Logger(strategy ); + const logger = new Logger(newEmptyStrategy()); logger.side = "test"; const originalContext = {}; const context = { ...originalContext }; @@ -35,18 +28,7 @@ function testImmutableContext() { } function testMessageContext() { - let result; const referenceContext = () => ({ a: "A" }); - const sender = new class { - send(level, message, context) { - result = { level, message, context }; - } - }(); - - const strategy = { - customizeLogger: () => [], - selectSenders: () => [sender], - }; /** * log(..., { a: 1 }) should ... @@ -54,14 +36,14 @@ function testMessageContext() { * - log { message_details: { a: 1} }. */ test(`should add the message argument to ${DETAILS_KEY}`, () => { - const logger = new Logger(strategy); - result = null; + const testSender: TestSender = new TestSender(); + const logger = new Logger(newLogStrategy(testSender)); logger.log(LogLevel.DEBUG, "some message", referenceContext()); - const actual = result.context[DETAILS_KEY].a; + const actualDetails = testSender.result.context[DETAILS_KEY]; const expected = "A"; // Message details is set - expect(actual).toBe(expected); + expect(actualDetails).toHaveProperty("a", expected); }); /** @@ -70,11 +52,11 @@ function testMessageContext() { * - NOT log { a: 1 }. */ test("should not add the message arguments to context root", () => { - const logger = new Logger(strategy); - result = null; + const sender = new TestSender(); + const logger = new Logger(newLogStrategy(sender)); logger.log(LogLevel.DEBUG, "some message", referenceContext()); - const actual = result.context.hasOwnProperty("a"); + const actual = sender.result.context.hasOwnProperty("a"); const expected = false; // Message details is set expect(actual).toBe(expected); @@ -87,12 +69,12 @@ function testMessageContext() { * unlike the message_details merging it did until 0.1.18 included. */ test(`should not merge contents of existing ${DETAILS_KEY} context key`, () => { - const logger = new Logger(strategy); - result = null; + const sender = new TestSender(); + const logger = new Logger(newLogStrategy(sender)); const originalContext = Object.assign({ [DETAILS_KEY]: { foo: "bar" } }, referenceContext()); logger.log(LogLevel.DEBUG, "some message", originalContext); - const actual = result.context; + const actual = sender.result.context; expect(actual).not.toHaveProperty("a"); expect(actual).not.toHaveProperty("foo"); expect(actual).toHaveProperty(DETAILS_KEY); @@ -107,7 +89,7 @@ function testMessageContext() { const actualNested = actualDetails[DETAILS_KEY]; expect(actualNested).not.toHaveProperty("a", "A"); expect(actualNested).not.toHaveProperty(DETAILS_KEY); - expect(actualNested).toHaveProperty("foo", 'bar'); + expect(actualNested).toHaveProperty("foo", "bar"); }); /** @@ -117,13 +99,14 @@ function testMessageContext() { * unlike the message_details merging it did until 0.1.18 included. */ test(`should not merge existing ${DETAILS_KEY} context key itself`, () => { - const logger = new Logger(strategy); - result = null; + const sender = new TestSender(); + const logger = new Logger(newLogStrategy(sender)); + const originalContext = Object.assign({ [DETAILS_KEY]: { a: "A" } }, referenceContext()); logger.log(LogLevel.DEBUG, "some message", originalContext); // Message_details should only contain a nested [DETAILS_KEY]. - const actual = result.context; + const actual = sender.result.context; const keys = Object.keys(actual).sort(); expect(keys.length).toBe(3); expect(keys).toEqual([DETAILS_KEY, SOURCE_KEY, TS_KEY]); @@ -147,18 +130,17 @@ function testMessageContext() { * - log { message_details: { a: "A", message_details: { a: "B" } } }. */ test(`should not merge keys within ${DETAILS_KEY}`, () => { - const logger = new Logger(strategy); - result = null; + const sender = new TestSender(); + const logger = new Logger(newLogStrategy(sender)); const originalContext = Object.assign({ [DETAILS_KEY]: { a: "B" } }, referenceContext()); logger.log(LogLevel.DEBUG, "some message", originalContext); // [KEY_DETAILS] should contain the newly added value for key "a", not the // one present in the initial [DETAILS_KEY]. - const actual = result.context[DETAILS_KEY]; + const actualDetails: { a?: any } = sender.result.context[DETAILS_KEY]; const expected = "A"; - // Message details is set. - expect(actual).toHaveProperty("a"); - expect(actual.a).toBe(expected); + // Message details are set. + expect(actualDetails).toHaveProperty("a", expected); }); } @@ -188,12 +170,12 @@ function testObjectifyContext() { undefined, ]; - scalars.forEach(v => { + scalars.forEach((v) => { const objectified = objectifyContext(v); // const printable = JSON.stringify(objectified); - let actual = typeof objectified; - let expected = "object"; + let actual: string | number | boolean | null | undefined = typeof objectified; + let expected: string | number | boolean | null | undefined = "object"; // `Result type is "object" for ${printable}.`); expect(actual).toBe(expected); @@ -223,8 +205,8 @@ function testObjectifyContext() { test("should not modify existing POJOs", () => { const raw = { a: "b" }; const actual = objectifyContext(raw); - const expected = raw; - expect(actual).toBe(expected); + const expected = { ...raw }; + expect(actual).toEqual(expected); }); test("should convert date objects to ISO date strings", () => { @@ -242,13 +224,16 @@ function testObjectifyContext() { expect(actual).toBe(expected); }); + // This test checks boxing/unboxing, so disable TSlint about it. test("should downgrade boxing classes to underlying primitives", () => { + // tslint:disable no-construct const expectations = [ // Primitive, boxed. [true, new Boolean(true)], [1E15, new Number(1E15)], ["😂 hello, α world", new String("😂 hello, α world")], ]; + // tslint:enable no-construct for (const [primitive, boxed] of expectations) { expect(typeof boxed).toBe("object"); @@ -260,14 +245,15 @@ function testObjectifyContext() { test("should downgrade miscellaneous classed objects to POJOs", () => { const value = "foo"; class Foo { + public k; constructor(v) { this.k = v; } } const initial = new Foo(value); - let actual = typeof initial; - let expected = "object"; + let actual: string = typeof initial; + let expected: string | Foo = "object"; expect(actual).toBe(expected); actual = initial.constructor.name; @@ -309,49 +295,51 @@ function testObjectifyContext() { } function testProcessors() { - class Sender { + const Sender = class extends ProcessorBase implements IProcessor { + public logs: any[][]; + constructor() { + super(); this.logs = []; } - send(level, message, context) { + public send(level, message, context) { this.logs.push([level, message, context]); } - } + }; - class Adder extends ProcessorBase { - process(context) { - const result = Object.assign({ added: "value" }, context); - return result; + const Adder = class extends ProcessorBase implements IProcessor { + public process(context) { + return Object.assign({ added: "value" }, context); } - } + }; - class Modifier extends ProcessorBase { - process(context) { + const Modifier = class extends ProcessorBase implements IProcessor { + public process(context) { context.initial = "cost"; return context; } - } + }; - class Remover extends ProcessorBase { - process(context) { + const Remover = class extends ProcessorBase implements IProcessor { + public process(context) { const { added, initial, ...rest } = context; return rest; } - } + }; /** * Class Purger attempts to remove all known properties from the context. * * Look at the timestamp test. */ - class Purger extends ProcessorBase { - process(context) { + const Purger = class extends ProcessorBase implements IProcessor { + public process(context) { return {}; } - } + }; - class TimeWarp extends ProcessorBase { + const TimeWarp = class extends ProcessorBase { // Let's do the time warp again. public process(context: IContext): IContext { context[TS_KEY] = { @@ -360,7 +348,7 @@ function testProcessors() { context.hostname = "remote"; return context; } - } + }; beforeEach(() => { this.initialContext = { initial: "initial" }; @@ -370,7 +358,7 @@ function testProcessors() { selectSenders: () => [this.sender], }; this.logger = new Logger(this.strategy); - this.logger.side = 'test'; + this.logger.side = "test"; }); test("processors should be able to modify the content of ordinary existing keys", () => { @@ -378,7 +366,7 @@ function testProcessors() { expect(this.sender.logs.length).toBe(0); this.logger.log(LogLevel.WARNING, "hello, world", this.initialContext); expect(this.sender.logs.length).toBe(1); - const [,, context] = this.sender.logs.pop(); + const [, , context] = this.sender.logs.pop(); expect(context).toHaveProperty("initial", "cost"); }); @@ -387,7 +375,7 @@ function testProcessors() { expect(this.sender.logs.length).toBe(0); this.logger.log(LogLevel.WARNING, "hello, world", this.initialContext); expect(this.sender.logs.length).toBe(1); - const [,, context] = this.sender.logs.pop(); + const [, , context] = this.sender.logs.pop(); expect(context).toHaveProperty("added", "value"); }); @@ -396,7 +384,7 @@ function testProcessors() { expect(this.sender.logs.length).toBe(0); this.logger.log(LogLevel.WARNING, "hello, world", this.initialContext); expect(this.sender.logs.length).toBe(1); - const [,, context] = this.sender.logs.pop(); + const [, , context] = this.sender.logs.pop(); expect(context.added).toBeUndefined(); expect(context.initial).toBeUndefined(); // By default, pre-processing content goes to the message_details key. @@ -408,7 +396,7 @@ function testProcessors() { expect(this.sender.logs.length).toBe(0); this.logger.log(LogLevel.WARNING, "hello, world", this.initialContext); expect(this.sender.logs.length).toBe(1); - const [,, context] = this.sender.logs.pop(); + const [, , context] = this.sender.logs.pop(); expect(context).not.toHaveProperty("added"); expect(context).not.toHaveProperty("initial"); expect(context).not.toHaveProperty("message_details"); @@ -420,7 +408,7 @@ function testProcessors() { this.logger.log(LogLevel.WARNING, "hello, world", { hostname: "local", ...this.initialContext }); const ts = +new Date(); expect(this.sender.logs.length).toBe(1); - const [,, context] = this.sender.logs.pop(); + const [, , context] = this.sender.logs.pop(); expect(context).toHaveProperty("hostname", "local"); expect(context).toHaveProperty(`${TS_KEY}.${this.logger.side}.log`); const lag = ts - context[TS_KEY][this.logger.side].log; @@ -436,7 +424,7 @@ function testProcessors() { this.logger.log(LogLevel.WARNING, "hello, world", this.initialContext); const ts = +new Date(); expect(this.sender.logs.length).toBe(1); - const [,, context] = this.sender.logs.pop(); + const [, , context] = this.sender.logs.pop(); expect(context).toHaveProperty("hostname", "remote"); expect(context).toHaveProperty(`${TS_KEY}.${this.logger.side}.log`); const lag = ts - context[TS_KEY][this.logger.side].log; diff --git a/__tests__/unit/logLevelsTest.ts b/__tests__/unit/logLevelsTest.ts index 2b59134..56dce9a 100644 --- a/__tests__/unit/logLevelsTest.ts +++ b/__tests__/unit/logLevelsTest.ts @@ -1,26 +1,29 @@ import InvalidArgumentException from "../../src/InvalidArgumentException"; -import Logger from "../../src/Logger"; +import { Logger } from "../../src/Loggers/Logger"; import * as LL from "../../src/LogLevel"; +import {newEmptyStrategy} from "./types"; function testLogLevels() { const strategy = { customizeLogger: () => [], }; test("log() should throw on non-integer levels", () => { - const logger = new Logger(strategy); + const logger = new Logger(newEmptyStrategy()); expect(() => { logger.log(4.2, "Not an integer", {}); }).toThrowError(InvalidArgumentException); expect(() => { - logger.log("5", "Not an integer", {}); + // Force type to accept invalid data. + logger.log("5" as any, "Not an integer", {}); }).toThrowError(InvalidArgumentException); expect(() => { - logger.log({}, "Not an integer", {}); + // Force type to accept invalid data. + logger.log({} as any, "Not an integer", {}); }).toThrowError(InvalidArgumentException); }); test("log() should throw on integer levels out of range", () => { - const logger = new Logger(strategy); + const logger = new Logger(newEmptyStrategy()); expect(() => { logger.log(-1, "Not an integer", {}); }).toThrowError(Error); diff --git a/__tests__/unit/meteorUserProcessorTest.ts b/__tests__/unit/meteorUserProcessorTest.ts index 435b492..5dd23ce 100644 --- a/__tests__/unit/meteorUserProcessorTest.ts +++ b/__tests__/unit/meteorUserProcessorTest.ts @@ -1,20 +1,32 @@ +import {IContext} from "../../src/IContext"; +import {ServerSide} from "../../src/Loggers/ServerLogger"; +import {IProcessor} from "../../src/Processors/IProcessor"; import MeteorUserProcessor from "../../src/Processors/MeteorUserProcessor"; -import ServerLogger from "../../src/ServerLogger"; + +interface IUserSubContext { + user: { + services: {}, + }; +} + +interface IMeteorAccountContext extends IContext { + client?: IUserSubContext; + cordova?: IUserSubContext; + server?: IUserSubContext; +} function testMeteorUserProcessor() { const mockMeteor = { isServer: true }; const mockAccountsPackage = { "accounts-base": { AccountsServer: true } }; - const SIDE = ServerLogger.side; - - const postProcessorDelete = data => { - let result = Object.assign({}, data); + const postProcessorDelete = (data) => { + const result = Object.assign({}, data); delete result.server.user.services; return result; }; const forcedUserId = 42; - const postProcessorUpdate = data => { - let result = Object.assign({}, data); + const postProcessorUpdate = (data) => { + const result = Object.assign({}, data); result.server.user = forcedUserId; return result; }; @@ -24,26 +36,26 @@ function testMeteorUserProcessor() { anything: "goes", // Actual contexts always have a "source" top-level key, added by // Logger.log() before invoking buildContext(). - "source": SIDE, + source: ServerSide, }; - global.Package = mockAccountsPackage; - const processorRaw = new MeteorUserProcessor(mockMeteor); - const processorDeletor = new MeteorUserProcessor(mockMeteor, postProcessorDelete); - const processorUpdater = new MeteorUserProcessor(mockMeteor, postProcessorUpdate); - delete global.PACKAGE; + (global as any).Package = mockAccountsPackage; + const processorRaw: IProcessor = new MeteorUserProcessor(mockMeteor as typeof Meteor); + const processorDeletor = new MeteorUserProcessor(mockMeteor as typeof Meteor, postProcessorDelete); + const processorUpdater = new MeteorUserProcessor(mockMeteor as typeof Meteor, postProcessorUpdate); + delete (global as any).Package; expect(processorRaw).toBeInstanceOf(MeteorUserProcessor); - const resultRaw = processorRaw.process(data); - expect(resultRaw).toHaveProperty(SIDE); - expect(resultRaw[SIDE].user.services).toBeDefined(); + const resultRaw: IMeteorAccountContext = processorRaw.process(data); + expect(resultRaw).toHaveProperty(ServerSide); + expect(resultRaw[ServerSide].user.services).toBeDefined(); expect(processorDeletor).toBeInstanceOf(MeteorUserProcessor); - const resultDeleted = processorDeletor.process(data); - expect(resultDeleted[SIDE].user.services).toBeUndefined(); + const resultDeleted: IMeteorAccountContext = processorDeletor.process(data); + expect(resultDeleted[ServerSide].user.services).toBeUndefined(); expect(processorUpdater).toBeInstanceOf(MeteorUserProcessor); - const resultUpdated = processorUpdater.process(data); - expect(resultUpdated[SIDE].user).toBe(forcedUserId); + const resultUpdated: IMeteorAccountContext = processorUpdater.process(data); + expect(resultUpdated[ServerSide].user).toBe(forcedUserId); }); } diff --git a/__tests__/unit/mongodbSenderTest.ts b/__tests__/unit/mongodbSenderTest.ts index 41399b0..8210878 100644 --- a/__tests__/unit/mongodbSenderTest.ts +++ b/__tests__/unit/mongodbSenderTest.ts @@ -1,51 +1,67 @@ +import sinon = require("sinon"); import {TS_KEY} from "../../src/IContext"; - -const sinon = require("sinon"); - -import Logger from "../../src/Logger"; +import * as LogLevel from "../../src/LogLevel"; import MongoDbSender from "../../src/Senders/MongodbSender"; +// This is a builtin Meteor interface: cannot rename it. +// tslint:disable-next-line +interface Mongo { + Collection: (name: string) => void; +} + function testMongoDbSender() { - const mongo = { + const mongo: Mongo = { // Do NOT replace by an arrow function: it breaks the Sinon spy. - Collection: function (name) { - this.insert = () => {}; + Collection(name): void { + // TSlint ignores the use of this method by Sinon in the 'should add a + // "send" timestamp to non-empty context' test below, so do not remove it, + // as it breaks that test. + // tslint:ignore-next-line + this.insert = () => undefined; this.name = name; }, }; + test("should accept a collection name", () => { const spy = sinon.spy(mongo, "Collection"); const sender = new MongoDbSender(mongo, "some_collection"); expect(sender).toBeInstanceOf(MongoDbSender); expect(spy.calledOnce).toBe(true); }); + test("should accept an existing collection", () => { const collection = new mongo.Collection("fake"); const sender = new MongoDbSender(mongo, collection); expect(sender).toBeInstanceOf(MongoDbSender); expect(sender.store).toBe(collection); }); + test("should reject invalid collection values", () => { - const collection = 25; - expect(() => new MongoDbSender(mongo, collection)).toThrowError(Error); + const collection = 42; + // Force type to accept invalid data. + expect(() => new MongoDbSender(mongo, collection as any)).toThrowError(Error); }); + test("should add a \"send\" timestamp to empty context", () => { const collection = new mongo.Collection("fake"); const sender = new MongoDbSender(mongo, collection); const insertSpy = sinon.spy(sender.store, "insert"); const before = +new Date(); - const inboundArgs = [0, "message", {}]; + const level: LogLevel.Levels = LogLevel.WARNING; + const message = "message"; + const details = {}; + + sender.send(level, message, details); - sender.send(...inboundArgs); const after = +new Date(); // Collection.insert was called once. expect(insertSpy.calledOnce).toBe(true); const callArgs = insertSpy.firstCall.args[0]; // Level is passed. - expect(callArgs.level).toBe(inboundArgs[0]); + expect(callArgs.level).toBe(level); // Message is passed. - expect(callArgs.message).toBe(inboundArgs[1]); + expect(callArgs.message).toBe(message); const timestamp = callArgs.context[TS_KEY].server.send; // A numeric store timestamp is passed. @@ -55,21 +71,29 @@ function testMongoDbSender() { // Timestamp is earlier than 'after'. expect(timestamp <= after).toBe(true); }); + test("should add a \"send\" timestamp to non-empty context", () => { const collection = new mongo.Collection("fake"); const sender = new MongoDbSender(mongo, collection); const insertSpy = sinon.spy(sender.store, "insert"); const before = +new Date(); - const inboundArgs = [0, "message", { timestamp: { whatever: 1480849124018 } }]; + const level: LogLevel.Levels = LogLevel.Levels.WARNING; + const message = "message"; + const details = { + [TS_KEY]: { + whatever: 1480849124018, + }, + }; - sender.send(...inboundArgs); + sender.send(level, message, details); const after = +new Date(); - expect(insertSpy.calledOnce).toBe(true, "Collection.insert was called once."); + // Collection.insert was called once. + expect(insertSpy.calledOnce).toBe(true); const callArgs = insertSpy.firstCall.args[0]; // Level is passed. - expect(callArgs.level).toBe(inboundArgs[0]); + expect(callArgs.level).toBe(level); // Message is passed. - expect(callArgs.message).toBe(inboundArgs[1]); + expect(callArgs.message).toBe(message); const timestamp = callArgs.context[TS_KEY].server.send; // A numeric store timestamp is passed. diff --git a/__tests__/unit/serverLoggerTest.ts b/__tests__/unit/serverLoggerTest.ts index b6a5c8b..aab9672 100644 --- a/__tests__/unit/serverLoggerTest.ts +++ b/__tests__/unit/serverLoggerTest.ts @@ -1,60 +1,48 @@ -/** global: jest */ - import sinon = require("sinon"); -import {DETAILS_KEY, SOURCE_KEY, TS_KEY} from "../../src/IContext"; -import Logger from "../../src/Logger"; +import {DETAILS_KEY, IContext, SOURCE_KEY, TS_KEY} from "../../src/IContext"; +import {ILogger} from "../../src/Loggers/ILogger"; +import { IServerLoggerConstructorParameters, ServerLogger } from "../../src/Loggers/ServerLogger"; import * as LogLevel from "../../src/LogLevel"; import NullFn from "../../src/NullFn"; +import {IProcessor} from "../../src/Processors/IProcessor"; import ProcessorBase from "../../src/Processors/ProcessorBase"; -import ServerLogger from "../../src/ServerLogger"; - -const emptyStrategy = () => ({ - customizeLogger: () => [], - selectSenders: () => [], -}); +import {IResult, newEmptyStrategy, newLogStrategy, TestSender} from "./types"; const LOG_SOURCE = "test"; const MAGIC = "xyzzy"; -let result; -const TestSender = new class { - public send(level, message, context): void { - result = { level, message, context }; - } -}(); -const logStrategy = { ...emptyStrategy(), selectSenders: () => [TestSender] }; - const testConstructor = () => { - global.Meteor = { methods: NullFn }; + (global as any).Meteor = { methods: NullFn }; test("Should provide default parameters", () => { - const logger = new ServerLogger(emptyStrategy()); + const logger = new ServerLogger(newEmptyStrategy()); expect(logger.enableMethod).toBe(true); expect(logger.logRequestHeaders).toBe(true); expect(logger.maxReqListeners).toBe(11); expect(logger.servePath).toBe("/logger"); }); + // These tests are only relevant to non-TS code: TS would reject the calls. test("Should not add unknown parameters", () => { // Extra property on values prototype and on object itself. Object.prototype[MAGIC] = NullFn; const values = { foo: "bar" }; - const logger = new ServerLogger(emptyStrategy(), null, values); + const logger = new ServerLogger(newEmptyStrategy(), null, values as IServerLoggerConstructorParameters); delete Object.prototype[MAGIC]; // Unknown argument from object and prototype are not set on instance. - expect(typeof logger.foo).toBe("undefined"); + expect(typeof logger["foo" as keyof ILogger]).toBe("undefined"); expect(typeof logger[MAGIC]).toBe("undefined"); }); test("Should not overwrite passed parameters", () => { - const options = { - logRequestHeaders: "foo", - servePath: 42, + const options: IServerLoggerConstructorParameters = { + logRequestHeaders: false, maxReqListeners: 30, + servePath: "nowhere", }; - const logger = new ServerLogger(emptyStrategy(), null, options); + const logger = new ServerLogger(newEmptyStrategy(), null, options); for (const k of Object.keys(options)) { expect(logger[k]).toBe(options[k]); @@ -79,25 +67,25 @@ const testConnect = () => { }); test("Should only register with connect when WebApp is passed", () => { - const loggerHappy = new ServerLogger(emptyStrategy(), mockWebApp, {}); + const loggerHappy = new ServerLogger(newEmptyStrategy(), mockWebApp as any, {}); expect(loggerHappy.constructor.name).toBe("ServerLogger"); expect(connectSpy.calledOnce).toBe(true); connectSpy.resetHistory(); - const loggerSad = new ServerLogger(emptyStrategy(), null, {}); + const loggerSad = new ServerLogger(newEmptyStrategy(), null, {}); expect(loggerSad.constructor.name).toBe("ServerLogger"); expect(connectSpy.calledOnce).toBe(true); }); test("Should register with connect with default path", () => { - const logger = new ServerLogger(emptyStrategy(), mockWebApp, {}); + const logger = new ServerLogger(newEmptyStrategy(), mockWebApp as any, {}); expect(logger.constructor.name).toBe("ServerLogger"); expect(connectSpy.alwaysCalledWith(mockWebApp, "/logger")).toBe(true); }); test("Should register with connect with chosen path", () => { const servePath = "/eightfold"; - const logger = new ServerLogger(emptyStrategy(), mockWebApp, { servePath }); + const logger = new ServerLogger(newEmptyStrategy(), mockWebApp as any, { servePath }); expect(logger.constructor.name).toBe("ServerLogger"); expect(connectSpy.calledOnce).toBe(true); expect(connectSpy.alwaysCalledWith(mockWebApp, servePath)).toBe(true); @@ -105,67 +93,69 @@ const testConnect = () => { }; const testBuildContext = () => { - test("Should apply argument source over context", () => { - const logger = new ServerLogger(emptyStrategy()); - const actual = logger.buildContext({}, LOG_SOURCE, { [SOURCE_KEY]: "other" }); + test("Should apply logger source over context", () => { + const logger: ServerLogger = new ServerLogger(newEmptyStrategy()); + logger.side = LOG_SOURCE; + const details: {} = { + [SOURCE_KEY]: "other", + }; + const actual = logger.getInitialContext(details); expect(actual).toHaveProperty(SOURCE_KEY, LOG_SOURCE); }); - test("Should merge details, applying argument over context", () => { - const logger = new ServerLogger(emptyStrategy()); + test("Should import details as details key", () => { + const logger = new ServerLogger(newEmptyStrategy()); const argumentDetails = { a: "A", d: "D1" }; - const initialContext = { [DETAILS_KEY]: { b: "B", d: "D2" } }; - const actual = logger.buildContext(argumentDetails, LOG_SOURCE, initialContext); + const actual = logger.getInitialContext(argumentDetails); const expected = { // Argument detail overwrites context detail. - [DETAILS_KEY]: { a: "A", b: "B", d: "D1" }, + [DETAILS_KEY]: argumentDetails, }; expect(actual).toMatchObject(expected); }); - - test("Should merge context", () => { - const logger = new ServerLogger(emptyStrategy()); - const initialContext = { foo: "bar" }; - const actual = logger.buildContext({}, LOG_SOURCE, initialContext); - expect(actual).toMatchObject({ [LOG_SOURCE]: initialContext }); - }); }; const testLogExtended = () => { let buildContextSpy; + let defaultContextSpy; beforeAll(() => { - buildContextSpy = sinon.spy(ServerLogger.prototype, "buildContext"); + buildContextSpy = sinon.spy(ServerLogger.prototype, "getInitialContext"); + defaultContextSpy = sinon.spy(ServerLogger.prototype, "defaultContext"); }); test("Should reject invalid log levels", () => { - const logger = new ServerLogger(emptyStrategy()); + const logger = new ServerLogger(newEmptyStrategy()); expect(() => { - logger.logExtended(-1, "message", {}, {}, LOG_SOURCE); + logger.logExtended(-1, "message", {}, LOG_SOURCE); }).toThrow(); }); - test("Should build context", () => { - const logger = new ServerLogger(emptyStrategy()); - logger.logExtended(LogLevel.INFO, "message", {}, {}, LOG_SOURCE); - expect(buildContextSpy.calledOnce).toBe(true); + test("Should default context", () => { + const logger = new ServerLogger(newEmptyStrategy()); + logger.logExtended(LogLevel.INFO, "message", {}, LOG_SOURCE); + expect(defaultContextSpy.calledOnce).toBe(true); }); test("Should timestamp context", () => { - const logger = new ServerLogger(logStrategy); + const sender = new TestSender(); + const logger = new ServerLogger(newLogStrategy(sender)); + const t0 = + new Date(); - logger.logExtended(LogLevel.INFO, "message", {}, {}, LOG_SOURCE); + logger.logExtended(LogLevel.INFO, "message", {}, LOG_SOURCE); const t1 = + new Date(); - expect(result).toHaveProperty('context.timestamp.server.log'); + const result: IResult = sender.result; + expect(result).toHaveProperty("context.timestamp.server.log"); const actual = result.context.timestamp.server.log; expect(actual).toBeGreaterThanOrEqual(t0); expect(actual).toBeLessThanOrEqual(t1); }); test("Should factor source timestamp", () => { - const logger = new ServerLogger(logStrategy); + const sender = new TestSender(); + const logger = new ServerLogger(newLogStrategy(sender)); const t0 = + new Date(); - const clientTsKey = 'whatever'; + const clientTsKey = "whatever"; const sourceContext = { [TS_KEY]: { [LOG_SOURCE]: { @@ -173,7 +163,8 @@ const testLogExtended = () => { }, }, }; - logger.logExtended(LogLevel.INFO, "message", {}, sourceContext, LOG_SOURCE); + logger.logExtended(LogLevel.INFO, "message", sourceContext, LOG_SOURCE); + const result: IResult = sender.result; expect(result).not.toHaveProperty(`context.${LOG_SOURCE}.${TS_KEY}`); expect(result).toHaveProperty(`context.${TS_KEY}`); expect(result).toHaveProperty(`context.${TS_KEY}.${LOG_SOURCE}`); @@ -182,15 +173,20 @@ const testLogExtended = () => { expect(actual).toBe(t0); }); - test("Should apply processors", () => { - const logger = new ServerLogger(logStrategy, null, { foo: "bar" }); - const P1 = class extends ProcessorBase { - process(context) { + // TODO: processors are not yet implemented in this branch. + test.skip("Should apply processors", () => { + const sender = new TestSender(); + const logger = new ServerLogger(newLogStrategy(sender), null, { foo: "bar" } as IServerLoggerConstructorParameters); + + const P1 = class extends ProcessorBase implements IProcessor { + /** @inheritDoc */ + public process(context: IContext): IContext { return { ...context, extra: "p1", p1: "p1" }; } }; - const P2 = class extends ProcessorBase { - process(context) { + const P2 = class extends ProcessorBase implements IProcessor { + /** @inheritDoc */ + public process(context: IContext): IContext { return { ...context, extra: "p2", p2: "p2" }; } }; @@ -202,7 +198,7 @@ const testLogExtended = () => { // Should be overwritten twice. extra: "initial", }; - logger.logExtended(LogLevel.INFO, "message", { "some": "detail" }, initialContext, LOG_SOURCE); + logger.logExtended(LogLevel.INFO, "message", initialContext, LOG_SOURCE); // Expected: { // message_details: (..not tested here..), // source: "test", @@ -210,7 +206,8 @@ const testLogExtended = () => { // server: { p1: "p1", p2: "p2", extra: "p2" } // timestamp: (..not tested here..) // } - expect(result).toHaveProperty('context'); + const result: IResult = sender.result; + expect(result).toHaveProperty("context"); const actual = result.context; expect(actual).not.toHaveProperty("c"); expect(actual).not.toHaveProperty("p1"); diff --git a/__tests__/unit/stringifyTest.ts b/__tests__/unit/stringifyTest.ts index 229d62c..aed6840 100644 --- a/__tests__/unit/stringifyTest.ts +++ b/__tests__/unit/stringifyTest.ts @@ -1,4 +1,4 @@ -import ServerLogger from "../../src/ServerLogger"; +import { ServerLogger } from "../../src/Loggers/ServerLogger"; function testStringifyMessage() { const stringify = ServerLogger.stringifyMessage; diff --git a/__tests__/unit/test.ts b/__tests__/unit/test.ts index d85ef15..71ff62d 100644 --- a/__tests__/unit/test.ts +++ b/__tests__/unit/test.ts @@ -19,14 +19,15 @@ describe("Unit", () => { describe("LeveledStrategy", () => { describe("reject non-senders in constructor", testStrategyConstruction); }); - describe.only("Multiple loggers", () => { + describe("Multiple loggers", () => { describe("test context sourcing", testContextSourcing); }); describe("Logger", () => { describe("validate log levels", testLogLevels); describe("validate log level names", testLogLevelNames); describe("logging does not modify context", testImmutableContext); - describe("processors can build any context", testProcessors); + // TODO: processors are not yet implemented in this branch. + describe.skip("processors can build any context", testProcessors); }); describe("ServerLogger", () => { describe("constructor", testConstructor); diff --git a/__tests__/unit/types.ts b/__tests__/unit/types.ts new file mode 100644 index 0000000..78a29f7 --- /dev/null +++ b/__tests__/unit/types.ts @@ -0,0 +1,38 @@ +import {IContext} from "../../src/IContext"; +import * as LogLevel from "../../src/LogLevel"; +import {ISender} from "../../src/Senders/ISender"; +import {IStrategy} from "../../src/Strategies/IStrategy"; + +type StrategyFactory = (sender?: ISender) => IStrategy; + +const newEmptyStrategy: StrategyFactory = () => ({ + customizeLogger: () => [], + selectSenders: () => [], +}); + +interface IResult { + level?: LogLevel.Levels; + message?: string; + context?: IContext; +} + +class TestSender { + public result: IResult = {}; + + public send(level, message, context): void { + this.result = { level, message, context }; + } +} + +const newLogStrategy: StrategyFactory = (sender: TestSender) => ({ + ...newEmptyStrategy(), + selectSenders: () => [sender], +}); + +export { + IResult, + StrategyFactory, + newEmptyStrategy, + newLogStrategy, + TestSender, +}; diff --git a/jest.config.js b/jest.config.js index 3d6c706..3c8a0fa 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,4 +1,9 @@ module.exports = { + "globals": { + "ts-jest": { + "tsConfigFile": "tsconfig.json" + } + }, moduleFileExtensions: [ "ts", "tsx", diff --git a/lib/ClientLogger.js.map b/lib/ClientLogger.js.map deleted file mode 100644 index db8af5f..0000000 --- a/lib/ClientLogger.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ClientLogger.js","sourceRoot":"","sources":["../src/ClientLogger.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;AAEH,oDAA8B;AAG9B,IAAM,IAAI,GAAG,QAAQ,CAAC;AAEtB;;;;;;;;;GASG;AACH;IAA2B,gCAAM;IAG/B,sBAAY,QAAmB;QAA/B,YACE,kBAAM,QAAQ,CAAC,SAEhB;QADC,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;IACnB,CAAC;IALsB,iBAAI,GAAG,IAAI,CAAC;IAMrC,mBAAC;CAAA,AAPD,CAA2B,gBAAM,GAOhC;AAED,kBAAe,YAAY,CAAC"} \ No newline at end of file diff --git a/lib/IContext.d.ts b/lib/IContext.d.ts index c6b656d..98e0a54 100644 --- a/lib/IContext.d.ts +++ b/lib/IContext.d.ts @@ -9,13 +9,13 @@ interface ITimestamps { [op: string]: number; } interface ITimestampsHash { - [key: string]: ITimestamps; + [side: string]: ITimestamps; } interface IContext { - [DETAILS_KEY]?: object; + [DETAILS_KEY]?: {}; [HOST_KEY]?: string; [SOURCE_KEY]?: string; [TS_KEY]?: ITimestampsHash; [key: string]: {} | undefined; } -export { DETAILS_KEY, HOST_KEY, SOURCE_KEY, TS_KEY, IDetails, IContext, ITimestampsHash, }; +export { DETAILS_KEY, HOST_KEY, SOURCE_KEY, TS_KEY, IDetails, IContext, ITimestamps, ITimestampsHash, }; diff --git a/lib/Logger.js.map b/lib/Logger.js.map deleted file mode 100644 index ad09ab1..0000000 --- a/lib/Logger.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../src/Logger.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/ClientLogger.d.ts b/lib/Loggers/ClientLogger.d.ts similarity index 67% rename from lib/ClientLogger.d.ts rename to lib/Loggers/ClientLogger.d.ts index d818230..49185ee 100644 --- a/lib/ClientLogger.d.ts +++ b/lib/Loggers/ClientLogger.d.ts @@ -1,8 +1,8 @@ /** * @fileOverview Client-side Logger implementation. */ -import Logger from "./Logger"; -import { IStrategy } from "./Strategies/IStrategy"; +import { IStrategy } from "../Strategies/IStrategy"; +import { Logger } from "./Logger"; /** * ClientLogger is the client-side implementation of Logger. * @@ -16,5 +16,9 @@ import { IStrategy } from "./Strategies/IStrategy"; declare class ClientLogger extends Logger { static readonly side: string; constructor(strategy: IStrategy); + /** + * @inheritDoc + */ + protected getHostname(): string | undefined; } -export default ClientLogger; +export { ClientLogger, }; diff --git a/lib/ClientLogger.js b/lib/Loggers/ClientLogger.js similarity index 84% rename from lib/ClientLogger.js rename to lib/Loggers/ClientLogger.js index d101e72..9c8c851 100644 --- a/lib/ClientLogger.js +++ b/lib/Loggers/ClientLogger.js @@ -15,11 +15,8 @@ var __extends = (this && this.__extends) || (function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); -var Logger_1 = __importDefault(require("./Logger")); +var Logger_1 = require("./Logger"); var SIDE = "client"; /** * ClientLogger is the client-side implementation of Logger. @@ -38,8 +35,14 @@ var ClientLogger = /** @class */ (function (_super) { _this.side = SIDE; return _this; } + /** + * @inheritDoc + */ + ClientLogger.prototype.getHostname = function () { + return undefined; + }; ClientLogger.side = SIDE; return ClientLogger; -}(Logger_1.default)); -exports.default = ClientLogger; +}(Logger_1.Logger)); +exports.ClientLogger = ClientLogger; //# sourceMappingURL=ClientLogger.js.map \ No newline at end of file diff --git a/lib/Loggers/ClientLogger.js.map b/lib/Loggers/ClientLogger.js.map new file mode 100644 index 0000000..ebcb4fb --- /dev/null +++ b/lib/Loggers/ClientLogger.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ClientLogger.js","sourceRoot":"","sources":["../../src/Loggers/ClientLogger.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;AAGH,mCAAkC;AAElC,IAAM,IAAI,GAAG,QAAQ,CAAC;AAEtB;;;;;;;;;GASG;AACH;IAA2B,gCAAM;IAG/B,sBAAY,QAAmB;QAA/B,YACE,kBAAM,QAAQ,CAAC,SAEhB;QADC,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;IACnB,CAAC;IAED;;OAEG;IACO,kCAAW,GAArB;QACE,OAAO,SAAS,CAAC;IACnB,CAAC;IAZsB,iBAAI,GAAG,IAAI,CAAC;IAarC,mBAAC;CAAA,AAdD,CAA2B,eAAM,GAchC;AAGC,oCAAY"} \ No newline at end of file diff --git a/lib/ILogger.d.ts b/lib/Loggers/ILogger.d.ts similarity index 95% rename from lib/ILogger.d.ts rename to lib/Loggers/ILogger.d.ts index 026f3e8..3093907 100644 --- a/lib/ILogger.d.ts +++ b/lib/Loggers/ILogger.d.ts @@ -1,5 +1,5 @@ -import { IContext } from "./IContext"; -import * as LogLevel from "./LogLevel"; +import { IContext } from "../IContext"; +import * as LogLevel from "../LogLevel"; interface ILogger { /** * Log an event. This is the *MAIN* method in the whole package. diff --git a/lib/ILogger.js b/lib/Loggers/ILogger.js similarity index 100% rename from lib/ILogger.js rename to lib/Loggers/ILogger.js diff --git a/lib/ILogger.js.map b/lib/Loggers/ILogger.js.map similarity index 54% rename from lib/ILogger.js.map rename to lib/Loggers/ILogger.js.map index c42b7e0..5d962ab 100644 --- a/lib/ILogger.js.map +++ b/lib/Loggers/ILogger.js.map @@ -1 +1 @@ -{"version":3,"file":"ILogger.js","sourceRoot":"","sources":["../src/ILogger.ts"],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"ILogger.js","sourceRoot":"","sources":["../../src/Loggers/ILogger.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/lib/Logger.d.ts b/lib/Loggers/Logger.d.ts similarity index 75% rename from lib/Logger.d.ts rename to lib/Loggers/Logger.d.ts index 9dbf593..d23abb4 100644 --- a/lib/Logger.d.ts +++ b/lib/Loggers/Logger.d.ts @@ -1,8 +1,11 @@ -import { IContext } from "./IContext"; +/** + * @fileOverview Base Logger class. + */ +import { IContext, ITimestampsHash } from "../IContext"; +import * as LogLevel from "../LogLevel"; +import { IProcessor } from "../Processors/IProcessor"; +import { IStrategy } from "../Strategies/IStrategy"; import { ILogger } from "./ILogger"; -import * as LogLevel from "./LogLevel"; -import { IProcessor } from "./Processors/IProcessor"; -import { IStrategy } from "./Strategies/IStrategy"; /** * Logger is the base class for loggers. */ @@ -20,6 +23,20 @@ declare class Logger implements ILogger { * The english name for the level. */ static levelName(level: number): string; + /** + * Add a timestamp to a context object on the active side. + * + * Ensure a TS_KEY will be present, and existing timestamps are not being + * overwritten, except possibly for any value already present at [TS_KEY][op]. + * + * @param context + * Mutated. The context to stamp. + * @param op + * The operation for which to add a timestamp. + * + * @protected + */ + static stamp(context: IContext, op: string, side: keyof ITimestampsHash): void; processors: IProcessor[]; side: string; tk: any; @@ -39,6 +56,38 @@ declare class Logger implements ILogger { * @see Logger#reportSubscriber */ arm(): void; + /** @inheritDoc */ + debug(message: object | string, context?: IContext): void; + /** + * Disarm the subscriber. + * + * In most cases, we do not want to disarm immediately: a stack trace being + * build may take several hundred milliseconds, and we would lose it. + * + * @param {Number} delay + * The delay before actually disarming, in milliseconds. + * + * @returns {void} + */ + disarm(delay?: number): void; + /** @inheritDoc */ + error(message: object | string, context?: IContext): void; + /** + * Provide the default context bits specific to the logger instance + details. + * + * @param details + * The message details. + * + * This method is only made public for the benefit of tests: it is not meant + * to be used outside the class and its tests. + * + * @protected + */ + getInitialContext(details?: {}): IContext; + /** @inheritDoc */ + info(message: object | string, context?: IContext): void; + /** @inheritDoc */ + log(level: LogLevel.Levels, message: object | string, details?: {}): void; /** * The callback invoked by TraceKit * @@ -74,35 +123,6 @@ declare class Logger implements ILogger { * @returns {void} */ send(strategy: IStrategy, level: LogLevel.Levels, message: string, sentContext: {}): void; - /** - * Add a timestamp to a context object on the active side. - * - * @param context - * Mutated. The context to stamp. - * @param op - * The operation for which to add a timestamp. - */ - stamp(context: IContext, op: string): void; - /** @inheritDoc */ - debug(message: object | string, context?: IContext): void; - /** - * Disarm the subscriber. - * - * In most cases, we do not want to disarm immediately: a stack trace being - * build may take several hundred milliseconds, and we would lose it. - * - * @param {Number} delay - * The delay before actually disarming, in milliseconds. - * - * @returns {void} - */ - disarm(delay?: number): void; - /** @inheritDoc */ - error(message: object | string, context?: IContext): void; - /** @inheritDoc */ - info(message: object | string, context?: IContext): void; - /** @inheritDoc */ - log(level: LogLevel.Levels, message: object | string, initialContext?: IContext, process?: boolean): void; /** * Ensure a log level is in the allowed value set. * @@ -131,5 +151,11 @@ declare class Logger implements ILogger { * @todo (or not ?) merge in the funky Meteor logic from the logging package. */ _meteorLog(): void; + /** + * Child classes are expected to re-implement this. + * + * @protected + */ + protected _getHostname(): string | undefined; } -export default Logger; +export { Logger, }; diff --git a/lib/Logger.js b/lib/Loggers/Logger.js similarity index 75% rename from lib/Logger.js rename to lib/Loggers/Logger.js index 77cc0e6..1ab859f 100644 --- a/lib/Logger.js +++ b/lib/Loggers/Logger.js @@ -1,4 +1,7 @@ "use strict"; +/** + * @fileOverview Base Logger class. + */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; @@ -10,13 +13,10 @@ var __importStar = (this && this.__importStar) || function (mod) { return result; }; Object.defineProperty(exports, "__esModule", { value: true }); -/** - * @fileOverview Base Logger class. - */ var tracekit_1 = __importDefault(require("tracekit")); -var IContext_1 = require("./IContext"); -var InvalidArgumentException_1 = __importDefault(require("./InvalidArgumentException")); -var LogLevel = __importStar(require("./LogLevel")); +var IContext_1 = require("../IContext"); +var InvalidArgumentException_1 = __importDefault(require("../InvalidArgumentException")); +var LogLevel = __importStar(require("../LogLevel")); // const logMethodNames = ["log", "debug", "info", "warn", "error", "_exception" ]; var SIDE = "unknown"; /** @@ -57,6 +57,31 @@ var Logger = /** @class */ (function () { } return LogLevel.Names[numericLevel]; }; + /** + * Add a timestamp to a context object on the active side. + * + * Ensure a TS_KEY will be present, and existing timestamps are not being + * overwritten, except possibly for any value already present at [TS_KEY][op]. + * + * @param context + * Mutated. The context to stamp. + * @param op + * The operation for which to add a timestamp. + * + * @protected + */ + Logger.stamp = function (context, op, side) { + var now = +new Date(); + // Ensure context actually contains a TS_KEY. + if (typeof context[IContext_1.TS_KEY] === "undefined") { + context[IContext_1.TS_KEY] = {}; + } + // We know context[TS_KEY] is defined because we just ensured it was. + var contextTs = context[IContext_1.TS_KEY]; + var sideTs = contextTs[side] || {}; + sideTs[op] = now; + contextTs[side] = sideTs; + }; /** * Arm the report subscriber. * @@ -67,6 +92,72 @@ var Logger = /** @class */ (function () { Logger.prototype.arm = function () { this.tk.report.subscribe(this.reportSubscriber.bind(this)); }; + /** @inheritDoc */ + Logger.prototype.debug = function (message, context) { + if (context === void 0) { context = {}; } + this.log(LogLevel.DEBUG, message, context); + }; + /** + * Disarm the subscriber. + * + * In most cases, we do not want to disarm immediately: a stack trace being + * build may take several hundred milliseconds, and we would lose it. + * + * @param {Number} delay + * The delay before actually disarming, in milliseconds. + * + * @returns {void} + */ + Logger.prototype.disarm = function (delay) { + var _this = this; + if (delay === void 0) { delay = 2000; } + setTimeout(function () { + _this.tk.report.unsubscribe(_this.reportSubscriber); + }, delay); + }; + /** @inheritDoc */ + Logger.prototype.error = function (message, context) { + if (context === void 0) { context = {}; } + // FIXME: message may not be a string. + this.log(LogLevel.ERROR, message, context); + }; + /** + * Provide the default context bits specific to the logger instance + details. + * + * @param details + * The message details. + * + * This method is only made public for the benefit of tests: it is not meant + * to be used outside the class and its tests. + * + * @protected + */ + Logger.prototype.getInitialContext = function (details) { + if (details === void 0) { details = {}; } + var _a; + var cx = (_a = {}, + _a[IContext_1.DETAILS_KEY] = details, + _a[IContext_1.SOURCE_KEY] = this.side, + _a); + var hostName = this._getHostname(); + if (typeof hostName === "string") { + cx[IContext_1.HOST_KEY] = hostName; + } + Logger.stamp(cx, "log", this.side); + return cx; + }; + /** @inheritDoc */ + Logger.prototype.info = function (message, context) { + if (context === void 0) { context = {}; } + this.log(LogLevel.INFORMATIONAL, message, context); + }; + /** @inheritDoc */ + Logger.prototype.log = function (level, message, details) { + if (details === void 0) { details = {}; } + this.validateLevel(level); + var c1 = this.getInitialContext(details); + this.send(this.strategy, level, String(message), c1); + }; /** * The callback invoked by TraceKit * @@ -111,63 +202,6 @@ var Logger = /** @class */ (function () { sender.send(level, message, sentContext); }); }; - /** - * Add a timestamp to a context object on the active side. - * - * @param context - * Mutated. The context to stamp. - * @param op - * The operation for which to add a timestamp. - */ - Logger.prototype.stamp = function (context, op) { - var now = +new Date(); - if (!context[IContext_1.TS_KEY]) { - context[IContext_1.TS_KEY] = {}; - } - var contextTs = context[IContext_1.TS_KEY]; - var side = contextTs[this.side] || {}; - side[op] = now; - }; - /** @inheritDoc */ - Logger.prototype.debug = function (message, context) { - if (context === void 0) { context = {}; } - this.log(LogLevel.DEBUG, message, context); - }; - /** - * Disarm the subscriber. - * - * In most cases, we do not want to disarm immediately: a stack trace being - * build may take several hundred milliseconds, and we would lose it. - * - * @param {Number} delay - * The delay before actually disarming, in milliseconds. - * - * @returns {void} - */ - Logger.prototype.disarm = function (delay) { - var _this = this; - if (delay === void 0) { delay = 2000; } - setTimeout(function () { - _this.tk.report.unsubscribe(_this.reportSubscriber); - }, delay); - }; - /** @inheritDoc */ - Logger.prototype.error = function (message, context) { - if (context === void 0) { context = {}; } - // FIXME: message may not be a string. - this.log(LogLevel.ERROR, message, context); - }; - /** @inheritDoc */ - Logger.prototype.info = function (message, context) { - if (context === void 0) { context = {}; } - this.log(LogLevel.INFORMATIONAL, message, context); - }; - /** @inheritDoc */ - Logger.prototype.log = function (level, message, initialContext, process) { - if (initialContext === void 0) { initialContext = {}; } - if (process === void 0) { process = true; } - this.send(this.strategy, level, String(message), initialContext); - }; /** * Ensure a log level is in the allowed value set. * @@ -205,9 +239,17 @@ var Logger = /** @class */ (function () { * @todo (or not ?) merge in the funky Meteor logic from the logging package. */ Logger.prototype._meteorLog = function () { return; }; + /** + * Child classes are expected to re-implement this. + * + * @protected + */ + Logger.prototype._getHostname = function () { + return undefined; + }; Logger.METHOD = "filog:log"; Logger.side = SIDE; return Logger; }()); -exports.default = Logger; +exports.Logger = Logger; //# sourceMappingURL=Logger.js.map \ No newline at end of file diff --git a/lib/Loggers/Logger.js.map b/lib/Loggers/Logger.js.map new file mode 100644 index 0000000..0f8d035 --- /dev/null +++ b/lib/Loggers/Logger.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/Loggers/Logger.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/ServerLogger.d.ts b/lib/Loggers/ServerLogger.d.ts similarity index 77% rename from lib/ServerLogger.d.ts rename to lib/Loggers/ServerLogger.d.ts index bb6807a..b7bf8bc 100644 --- a/lib/ServerLogger.d.ts +++ b/lib/Loggers/ServerLogger.d.ts @@ -2,15 +2,19 @@ * @fileOverview Server-side Logger. */ /// +import * as connect from "connect"; import { IncomingMessage, ServerResponse } from "http"; import { WebApp } from "meteor/webapp"; -import Logger from "./Logger"; -import * as LogLevel from "./LogLevel"; -import { IStrategy } from "./Strategies/IStrategy"; -import WriteStream = NodeJS.WriteStream; -import { IContext } from "./IContext"; +import { IContext } from "../IContext"; +import * as LogLevel from "../LogLevel"; +import { IStrategy } from "../Strategies/IStrategy"; import { ILogger } from "./ILogger"; -declare type OptionalWebApp = typeof WebApp | null; +import { Logger } from "./Logger"; +import WriteStream = NodeJS.WriteStream; +interface IWebApp { + connectHandlers: connect.Server; +} +declare type OptionalWebApp = typeof WebApp | IWebApp | null; interface IServerLoggerConstructorParameters { enableMethod?: boolean; logRequestHeaders?: boolean; @@ -18,6 +22,7 @@ interface IServerLoggerConstructorParameters { servePath?: string; verbose?: boolean; } +declare const SIDE = "server"; /** * An extension of the base logger which accepts log input on a HTTP URL. * @@ -57,7 +62,7 @@ declare class ServerLogger extends Logger implements ILogger { maxReqListeners: number; output: WriteStream; servePath: string; - readonly side: string; + side: string; verbose: boolean; /** * @constructor @@ -73,6 +78,22 @@ declare class ServerLogger extends Logger implements ILogger { * - servePath: the path on which to expose the logger endpoint. Defaults to "/logger". */ constructor(strategy: IStrategy, webapp?: OptionalWebApp, parameters?: IServerLoggerConstructorParameters); + /** + * Add defaults to the initial context. + * + * @param initialContext + * The context passed to logExtended(). + * @param source + * The source whence the event originated. + * + * @see logExtended() + * + * This method is only made public for the benefit of tests: it is not meant + * to be used outside the class and its tests. + * + * @protected + */ + defaultContext(initialContext: IContext, source: string): IContext; /** * Handle a log message from the client. * @@ -89,7 +110,7 @@ declare class ServerLogger extends Logger implements ILogger { /** * @inheritDoc */ - log(level: LogLevel.Levels, message: string, rawContext: IContext, cooked?: boolean): void; + log(level: LogLevel.Levels, message: string, rawContext: IContext): void; /** * Extended syntax for log() method. * @@ -99,9 +120,6 @@ declare class ServerLogger extends Logger implements ILogger { * The event level. * @param message * The event message. - * @param details - * The details submitted with the message: any additional data added to - * the message by the upstream (client/cordova) log() caller(). * @param context * The context added to the details by upstream processors. * @param source @@ -109,7 +127,7 @@ declare class ServerLogger extends Logger implements ILogger { * * @throws InvalidArgumentException */ - logExtended(level: LogLevel.Levels, message: string, details: {}, context: IContext, source: string): void; + logExtended(level: LogLevel.Levels, message: string, context: IContext, source: string): void; /** * The Meteor server method registered a ${Logger.METHOD}. * @@ -136,5 +154,9 @@ declare class ServerLogger extends Logger implements ILogger { * The path on which to expose the server logger. Must NOT start by a "/". */ setupConnect(webapp: OptionalWebApp, servePath: string): void; + /** + * @inheritDoc + */ + protected _getHostname(): string | undefined; } -export default ServerLogger; +export { IServerLoggerConstructorParameters, ServerLogger, SIDE as ServerSide, }; diff --git a/lib/ServerLogger.js b/lib/Loggers/ServerLogger.js similarity index 82% rename from lib/ServerLogger.js rename to lib/Loggers/ServerLogger.js index 76cb177..2ab1b1c 100644 --- a/lib/ServerLogger.js +++ b/lib/Loggers/ServerLogger.js @@ -15,6 +15,17 @@ var __extends = (this && this.__extends) || (function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) @@ -24,9 +35,6 @@ var __rest = (this && this.__rest) || function (s, e) { t[p[i]] = s[p[i]]; return t; }; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; @@ -34,17 +42,21 @@ var __importStar = (this && this.__importStar) || function (mod) { result["default"] = mod; return result; }; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); // Node.JS packages: this is server-side code. -var os_1 = require("os"); +var os = __importStar(require("os")); var process_1 = __importDefault(require("process")); var util = __importStar(require("util")); // Package imports. -var ClientLogger_1 = __importDefault(require("./ClientLogger")); -var Logger_1 = __importDefault(require("./Logger")); -var LogLevel = __importStar(require("./LogLevel")); -var IContext_1 = require("./IContext"); +var IContext_1 = require("../IContext"); +var LogLevel = __importStar(require("../LogLevel")); +var ClientLogger_1 = require("./ClientLogger"); +var Logger_1 = require("./Logger"); var SIDE = "server"; +exports.ServerSide = SIDE; /** * An extension of the base logger which accepts log input on a HTTP URL. * @@ -78,6 +90,7 @@ var ServerLogger = /** @class */ (function (_super) { _this.logRequestHeaders = true; _this.maxReqListeners = 11; _this.servePath = "/logger"; + // Should usually not be modified. _this.side = "server"; _this.verbose = false; _this.output = process_1.default.stdout; @@ -101,9 +114,9 @@ var ServerLogger = /** @class */ (function (_super) { _this[k] = value; } } - _this.hostname = os_1.hostname(); + _this.hostname = os.hostname(); if (_this.enableMethod) { - Meteor.methods((_a = {}, _a[Logger_1.default.METHOD] = _this.logMethod.bind(_this), _a)); + Meteor.methods((_a = {}, _a[Logger_1.Logger.METHOD] = _this.logMethod.bind(_this), _a)); } _this.setupConnect(webapp, _this.servePath); return _this; @@ -179,8 +192,28 @@ var ServerLogger = /** @class */ (function (_super) { return rawMessage.toString(); } } - var message = util.inspect(doc); - return message; + return util.inspect(doc); + }; + /** + * Add defaults to the initial context. + * + * @param initialContext + * The context passed to logExtended(). + * @param source + * The source whence the event originated. + * + * @see logExtended() + * + * This method is only made public for the benefit of tests: it is not meant + * to be used outside the class and its tests. + * + * @protected + */ + ServerLogger.prototype.defaultContext = function (initialContext, source) { + var _a; + var cx1 = __assign((_a = {}, _a[IContext_1.HOST_KEY] = this._getHostname(), _a[IContext_1.SOURCE_KEY] = source, _a), initialContext); + Logger_1.Logger.stamp(cx1, "log", this.side); + return cx1; }; /** * Handle a log message from the client. @@ -223,8 +256,10 @@ var ServerLogger = /** @class */ (function (_super) { if (_this.logRequestHeaders) { context.requestHeaders = req.headers; } - var _a = IContext_1.DETAILS_KEY, details = context[_a], nonDetails = __rest(context, [typeof _a === "symbol" ? _a : _a + ""]); - _this.logExtended(level, message, details, nonDetails, ClientLogger_1.default.side); + var _a = IContext_1.DETAILS_KEY, details = context[_a], + // tslint:disable-next-line + nonDetails = __rest(context, [typeof _a === "symbol" ? _a : _a + ""]); + _this.logExtended(level, message, nonDetails, ClientLogger_1.ClientLogger.side); res.statusCode = 200; result = ""; } @@ -238,10 +273,9 @@ var ServerLogger = /** @class */ (function (_super) { /** * @inheritDoc */ - ServerLogger.prototype.log = function (level, message, rawContext, cooked) { - if (cooked === void 0) { cooked = true; } + ServerLogger.prototype.log = function (level, message, rawContext) { rawContext.hostname = this.hostname; - _super.prototype.log.call(this, level, message, rawContext, cooked); + _super.prototype.log.call(this, level, message, rawContext); }; /** * Extended syntax for log() method. @@ -252,9 +286,6 @@ var ServerLogger = /** @class */ (function (_super) { * The event level. * @param message * The event message. - * @param details - * The details submitted with the message: any additional data added to - * the message by the upstream (client/cordova) log() caller(). * @param context * The context added to the details by upstream processors. * @param source @@ -262,9 +293,10 @@ var ServerLogger = /** @class */ (function (_super) { * * @throws InvalidArgumentException */ - ServerLogger.prototype.logExtended = function (level, message, details, context, source) { + ServerLogger.prototype.logExtended = function (level, message, context, source) { this.validateLevel(level); - this.send(this.strategy, level, message, context3); + var cx1 = this.defaultContext(context, source); + this.send(this.strategy, level, message, cx1); }; /** * The Meteor server method registered a ${Logger.METHOD}. @@ -280,7 +312,7 @@ var ServerLogger = /** @class */ (function (_super) { */ ServerLogger.prototype.logMethod = function (_a) { var _b = _a.level, level = _b === void 0 ? LogLevel.INFO : _b, _c = _a.message, message = _c === void 0 ? "" : _c, _d = _a.context, context = _d === void 0 ? {} : _d; - this.logExtended(level, message, {}, context, ClientLogger_1.default.side); + this.logExtended(level, message, context, ClientLogger_1.ClientLogger.side); }; /** * Sets up the Connect routing within the Meteor webapp component. @@ -305,7 +337,16 @@ var ServerLogger = /** @class */ (function (_super) { } } }; + /** + * @inheritDoc + */ + ServerLogger.prototype._getHostname = function () { + if (!this.hostname) { + this.hostname = os.hostname(); + } + return this.hostname; + }; return ServerLogger; -}(Logger_1.default)); -exports.default = ServerLogger; +}(Logger_1.Logger)); +exports.ServerLogger = ServerLogger; //# sourceMappingURL=ServerLogger.js.map \ No newline at end of file diff --git a/lib/Loggers/ServerLogger.js.map b/lib/Loggers/ServerLogger.js.map new file mode 100644 index 0000000..5afe524 --- /dev/null +++ b/lib/Loggers/ServerLogger.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ServerLogger.js","sourceRoot":"","sources":["../../src/Loggers/ServerLogger.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Loggers/index.d.ts b/lib/Loggers/index.d.ts new file mode 100644 index 0000000..ca9d308 --- /dev/null +++ b/lib/Loggers/index.d.ts @@ -0,0 +1,21 @@ +import InvalidArgumentException from "../InvalidArgumentException"; +import * as LogLevel from "../LogLevel"; +import { ClientLogger } from "./ClientLogger"; +import { Logger } from "./Logger"; +import { ServerLogger } from "./ServerLogger"; +import { BrowserProcessor } from "../Processors/BrowserProcessor"; +import MeteorUserProcessor from "../Processors/MeteorUserProcessor"; +import ProcessorBase from "../Processors/ProcessorBase"; +import RoutingProcessor from "../Processors/RoutingProcessor"; +import LeveledStrategy from "../Strategies/LeveledStrategy"; +import StrategyBase from "../Strategies/StrategyBase"; +import TrivialStrategy from "../Strategies/TrivialStrategy"; +import ConsoleSender from "../Senders/ConsoleSender"; +import MeteorClientHttpSender from "../Senders/MeteorClientHttpSender"; +import MeteorClientMethodSender from "../Senders/MeteorClientMethodSender"; +import MongodbSender from "../Senders/MongodbSender"; +import NullSender from "../Senders/NullSender"; +import { SenderBase } from "../Senders/SenderBase"; +import TeeSender from "../Senders/TeeSender"; +declare const SyslogSender: any; +export { InvalidArgumentException, LogLevel, Logger, ClientLogger, ServerLogger, ProcessorBase, BrowserProcessor, MeteorUserProcessor, RoutingProcessor, StrategyBase, LeveledStrategy, TrivialStrategy, SenderBase, NullSender, ConsoleSender, MeteorClientHttpSender, MeteorClientMethodSender, MongodbSender, SyslogSender, TeeSender, }; diff --git a/lib/index.js b/lib/Loggers/index.js similarity index 50% rename from lib/index.js rename to lib/Loggers/index.js index b269206..c9b276e 100644 --- a/lib/index.js +++ b/lib/Loggers/index.js @@ -10,43 +10,43 @@ var __importStar = (this && this.__importStar) || function (mod) { return result; }; Object.defineProperty(exports, "__esModule", { value: true }); -var InvalidArgumentException_1 = __importDefault(require("./InvalidArgumentException")); +var InvalidArgumentException_1 = __importDefault(require("../InvalidArgumentException")); exports.InvalidArgumentException = InvalidArgumentException_1.default; -var LogLevel = __importStar(require("./LogLevel")); +var LogLevel = __importStar(require("../LogLevel")); exports.LogLevel = LogLevel; -var ClientLogger_1 = __importDefault(require("./ClientLogger")); -exports.ClientLogger = ClientLogger_1.default; -var Logger_1 = __importDefault(require("./Logger")); -exports.Logger = Logger_1.default; -var ServerLogger_1 = __importDefault(require("./ServerLogger")); -exports.ServerLogger = ServerLogger_1.default; -var BrowserProcessor_1 = require("./Processors/BrowserProcessor"); +var ClientLogger_1 = require("./ClientLogger"); +exports.ClientLogger = ClientLogger_1.ClientLogger; +var Logger_1 = require("./Logger"); +exports.Logger = Logger_1.Logger; +var ServerLogger_1 = require("./ServerLogger"); +exports.ServerLogger = ServerLogger_1.ServerLogger; +var BrowserProcessor_1 = require("../Processors/BrowserProcessor"); exports.BrowserProcessor = BrowserProcessor_1.BrowserProcessor; -var MeteorUserProcessor_1 = __importDefault(require("./Processors/MeteorUserProcessor")); +var MeteorUserProcessor_1 = __importDefault(require("../Processors/MeteorUserProcessor")); exports.MeteorUserProcessor = MeteorUserProcessor_1.default; -var ProcessorBase_1 = __importDefault(require("./Processors/ProcessorBase")); +var ProcessorBase_1 = __importDefault(require("../Processors/ProcessorBase")); exports.ProcessorBase = ProcessorBase_1.default; -var RoutingProcessor_1 = __importDefault(require("./Processors/RoutingProcessor")); +var RoutingProcessor_1 = __importDefault(require("../Processors/RoutingProcessor")); exports.RoutingProcessor = RoutingProcessor_1.default; -var LeveledStrategy_1 = __importDefault(require("./Strategies/LeveledStrategy")); +var LeveledStrategy_1 = __importDefault(require("../Strategies/LeveledStrategy")); exports.LeveledStrategy = LeveledStrategy_1.default; -var StrategyBase_1 = __importDefault(require("./Strategies/StrategyBase")); +var StrategyBase_1 = __importDefault(require("../Strategies/StrategyBase")); exports.StrategyBase = StrategyBase_1.default; -var TrivialStrategy_1 = __importDefault(require("./Strategies/TrivialStrategy")); +var TrivialStrategy_1 = __importDefault(require("../Strategies/TrivialStrategy")); exports.TrivialStrategy = TrivialStrategy_1.default; -var ConsoleSender_1 = __importDefault(require("./Senders/ConsoleSender")); +var ConsoleSender_1 = __importDefault(require("../Senders/ConsoleSender")); exports.ConsoleSender = ConsoleSender_1.default; -var MeteorClientHttpSender_1 = __importDefault(require("./Senders/MeteorClientHttpSender")); +var MeteorClientHttpSender_1 = __importDefault(require("../Senders/MeteorClientHttpSender")); exports.MeteorClientHttpSender = MeteorClientHttpSender_1.default; -var MeteorClientMethodSender_1 = __importDefault(require("./Senders/MeteorClientMethodSender")); +var MeteorClientMethodSender_1 = __importDefault(require("../Senders/MeteorClientMethodSender")); exports.MeteorClientMethodSender = MeteorClientMethodSender_1.default; -var MongodbSender_1 = __importDefault(require("./Senders/MongodbSender")); +var MongodbSender_1 = __importDefault(require("../Senders/MongodbSender")); exports.MongodbSender = MongodbSender_1.default; -var NullSender_1 = __importDefault(require("./Senders/NullSender")); +var NullSender_1 = __importDefault(require("../Senders/NullSender")); exports.NullSender = NullSender_1.default; -var SenderBase_1 = __importDefault(require("./Senders/SenderBase")); -exports.SenderBase = SenderBase_1.default; -var TeeSender_1 = __importDefault(require("./Senders/TeeSender")); +var SenderBase_1 = require("../Senders/SenderBase"); +exports.SenderBase = SenderBase_1.SenderBase; +var TeeSender_1 = __importDefault(require("../Senders/TeeSender")); exports.TeeSender = TeeSender_1.default; /* modern-syslog is not usable on the client side, because it fails to load * its compiled binary dependency, hence the dynamic require and tslint disable. @@ -55,7 +55,7 @@ exports.TeeSender = TeeSender_1.default; */ var SyslogSender = Meteor.isServer // tslint:disable-next-line - ? require("./Senders/SyslogSender").default + ? require("../Senders/SyslogSender").default : NullSender_1.default; exports.SyslogSender = SyslogSender; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/Loggers/index.js.map b/lib/Loggers/index.js.map new file mode 100644 index 0000000..3d5cdc4 --- /dev/null +++ b/lib/Loggers/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Loggers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yFAAmE;AAmCjE,mCAnCK,kCAAwB,CAmCL;AAlC1B,oDAAwC;AAmCtC,4BAAQ;AAjCV,+CAA8C;AAoC5C,uBApCO,2BAAY,CAoCP;AAnCd,mCAAkC;AAkChC,iBAlCO,eAAM,CAkCP;AAjCR,+CAA8C;AAmC5C,uBAnCO,2BAAY,CAmCP;AAjCd,mEAAkE;AAqChE,2BArCO,mCAAgB,CAqCP;AApClB,0FAAoE;AAqClE,8BArCK,6BAAmB,CAqCL;AApCrB,8EAAwD;AAkCtD,wBAlCK,uBAAa,CAkCL;AAjCf,oFAA8D;AAoC5D,2BApCK,0BAAgB,CAoCL;AAlClB,kFAA4D;AAsC1D,0BAtCK,yBAAe,CAsCL;AArCjB,4EAAsD;AAoCpD,uBApCK,sBAAY,CAoCL;AAnCd,kFAA4D;AAqC1D,0BArCK,yBAAe,CAqCL;AAnCjB,2EAAqD;AAwCnD,wBAxCK,uBAAa,CAwCL;AAvCf,6FAAuE;AAwCrE,iCAxCK,gCAAsB,CAwCL;AAvCxB,iGAA2E;AAwCzE,mCAxCK,kCAAwB,CAwCL;AAvC1B,2EAAqD;AAwCnD,wBAxCK,uBAAa,CAwCL;AAvCf,qEAA+C;AAmC7C,qBAnCK,oBAAU,CAmCL;AAlCZ,oDAAmD;AAiCjD,qBAjCO,uBAAU,CAiCP;AAhCZ,mEAA6C;AAuC3C,oBAvCK,mBAAS,CAuCL;AArCX;;;;GAIG;AACH,IAAM,YAAY,GAAG,MAAM,CAAC,QAAQ;IAClC,2BAA2B;IAC3B,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,OAAO;IAC5C,CAAC,CAAC,oBAAU,CAAC;AA4Bb,oCAAY"} \ No newline at end of file diff --git a/lib/Senders/ConsoleSender.js b/lib/Senders/ConsoleSender.js index f22868c..90ad893 100644 --- a/lib/Senders/ConsoleSender.js +++ b/lib/Senders/ConsoleSender.js @@ -26,12 +26,9 @@ var __importStar = (this && this.__importStar) || function (mod) { result["default"] = mod; return result; }; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); var LogLevel = __importStar(require("../LogLevel")); -var SenderBase_1 = __importDefault(require("./SenderBase")); +var SenderBase_1 = require("./SenderBase"); /** * ConsoleSender sends the log events it receives to the browser console. * @@ -41,7 +38,12 @@ var ConsoleSender = /** @class */ (function (_super) { __extends(class_1, _super); function class_1() { var _this = _super.call(this) || this; - if (!(console instanceof Console)) { + // Checkint "if (!(console instanceof Console)" compiles, but fails to + // execute during tests, which run in Node.JS in which Console is not a type + // but only the name of the console constructor. Since checking + // console.constructor.name is liable to fail in minified code, we need a + // weaker check. + if (typeof console === "undefined" || console === null || typeof console !== "object") { throw new Error("Console sender needs a console object."); } ["log", "info", "warn", "error"].forEach(function (method) { @@ -70,6 +72,6 @@ var ConsoleSender = /** @class */ (function (_super) { method(LogLevel.Names[level], message, context); }; return class_1; -}(SenderBase_1.default)); +}(SenderBase_1.SenderBase)); exports.default = ConsoleSender; //# sourceMappingURL=ConsoleSender.js.map \ No newline at end of file diff --git a/lib/Senders/ConsoleSender.js.map b/lib/Senders/ConsoleSender.js.map index f494959..51aa1cd 100644 --- a/lib/Senders/ConsoleSender.js.map +++ b/lib/Senders/ConsoleSender.js.map @@ -1 +1 @@ -{"version":3,"file":"ConsoleSender.js","sourceRoot":"","sources":["../../src/Senders/ConsoleSender.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;AACH,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;AAE/B,oDAAwC;AACxC,4DAAsC;AAEtC;;;;GAIG;AACH,IAAM,aAAa;IAAiB,2BAAU;IAC5C;QAAA,YACE,iBAAO,SAYR;QAXC,IAAI,CAAC,CAAC,OAAO,YAAY,OAAO,CAAC,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;SAC3D;QACD,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,UAAC,MAAM;YAC9C,IAAI,OAAO,OAAO,CAAC,MAAuB,CAAC,KAAK,WAAW,EAAE;gBAC3D,MAAM,IAAI,KAAK,CAAC,+BAA6B,MAAM,MAAG,CAAC,CAAC;aACzD;YACD,IAAI,OAAO,CAAC,MAAuB,CAAC,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE;gBACpE,MAAM,IAAI,KAAK,CAAC,6BAA2B,MAAM,wBAAqB,CAAC,CAAC;aACzE;QACH,CAAC,CAAC,CAAC;;IACL,CAAC;IAED,kBAAkB;IACX,sBAAI,GAAX,UAAY,KAAsB,EAAE,OAAe,EAAE,OAAe;QAClE,IAAM,OAAO,GAAG;YACd,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,IAAI;YACZ,OAAO,CAAC,IAAI;YACZ,OAAO,CAAC,IAAI;YACZ,OAAO,CAAC,GAAG;SACZ,CAAC;QAEF,IAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IACH,cAAC;AAAD,CAAC,AAhCqB,CAAc,oBAAU,EAgC7C,CAAC;AAEF,kBAAe,aAAa,CAAC"} \ No newline at end of file +{"version":3,"file":"ConsoleSender.js","sourceRoot":"","sources":["../../src/Senders/ConsoleSender.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;AACH,+BAA+B;;;;;;;;;;;;;;;;;;;;;;AAE/B,oDAAwC;AAExC,2CAA0C;AAE1C;;;;GAIG;AACH,IAAM,aAAa;IAAiB,2BAAU;IAC5C;QAAA,YACE,iBAAO,SAiBR;QAhBC,sEAAsE;QACtE,4EAA4E;QAC5E,+DAA+D;QAC/D,yEAAyE;QACzE,gBAAgB;QAChB,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YACrF,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;SAC3D;QACD,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,UAAC,MAAM;YAC9C,IAAI,OAAO,OAAO,CAAC,MAAuB,CAAC,KAAK,WAAW,EAAE;gBAC3D,MAAM,IAAI,KAAK,CAAC,+BAA6B,MAAM,MAAG,CAAC,CAAC;aACzD;YACD,IAAI,OAAO,CAAC,MAAuB,CAAC,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE;gBACpE,MAAM,IAAI,KAAK,CAAC,6BAA2B,MAAM,wBAAqB,CAAC,CAAC;aACzE;QACH,CAAC,CAAC,CAAC;;IACL,CAAC;IAED,kBAAkB;IACX,sBAAI,GAAX,UAAY,KAAsB,EAAE,OAAe,EAAE,OAAe;QAClE,IAAM,OAAO,GAAG;YACd,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,IAAI;YACZ,OAAO,CAAC,IAAI;YACZ,OAAO,CAAC,IAAI;YACZ,OAAO,CAAC,GAAG;SACZ,CAAC;QAEF,IAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IACH,cAAC;AAAD,CAAC,AArCqB,CAAc,uBAAU,EAqC7C,CAAC;AAEF,kBAAe,aAAa,CAAC"} \ No newline at end of file diff --git a/lib/Senders/MeteorClientHttpSender.js b/lib/Senders/MeteorClientHttpSender.js index 6fa9ec2..c94b067 100644 --- a/lib/Senders/MeteorClientHttpSender.js +++ b/lib/Senders/MeteorClientHttpSender.js @@ -21,7 +21,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); * @fileOverview Meteor Client HTTP Sender class. */ var NullFn_1 = __importDefault(require("../NullFn")); -var SenderBase_1 = __importDefault(require("./SenderBase")); +var SenderBase_1 = require("./SenderBase"); /** * MeteorClientHttpSender send data from the client to the server over HTTP. * @@ -64,6 +64,6 @@ var MeteorClientHttpSender = /** @class */ (function (_super) { this.http.post(this.loggerUrl, options, NullFn_1.default); }; return class_1; -}(SenderBase_1.default)); +}(SenderBase_1.SenderBase)); exports.default = MeteorClientHttpSender; //# sourceMappingURL=MeteorClientHttpSender.js.map \ No newline at end of file diff --git a/lib/Senders/MeteorClientHttpSender.js.map b/lib/Senders/MeteorClientHttpSender.js.map index 0c54915..a6adc34 100644 --- a/lib/Senders/MeteorClientHttpSender.js.map +++ b/lib/Senders/MeteorClientHttpSender.js.map @@ -1 +1 @@ -{"version":3,"file":"MeteorClientHttpSender.js","sourceRoot":"","sources":["../../src/Senders/MeteorClientHttpSender.ts"],"names":[],"mappings":";AAAA,2BAA2B;;;;;;;;;;;;;;;;;;AAE3B;;GAEG;AAEH,qDAA+B;AAC/B,4DAAsC;AAEtC;;;;GAIG;AACH,IAAM,sBAAsB;IAAiB,2BAAU;IAIrD,uCAAuC;IACvC;;;;;OAKG;IACH,iBAAmB,SAAiB;QAApC,YACE,iBAAO,SAYR;QAbkB,eAAS,GAAT,SAAS,CAAQ;QAElC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;SACjF;QACD,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;SACvF;QAED,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAI,CAAC,cAAc,GAAG;YACpB,cAAc,EAAE,kBAAkB;SACnC,CAAC;;IACJ,CAAC;IAED,kBAAkB;IACX,sBAAI,GAAX,UAAY,KAAa,EAAE,OAAe,EAAE,OAAe;QACzD,IAAM,IAAI,GAAG,EAAE,KAAK,OAAA,EAAE,OAAO,SAAA,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC7C,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;YAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;SACxB;QAED,IAAM,OAAO,GAAG;YACd,IAAI,MAAA;YACJ,OAAO,EAAE,IAAI,CAAC,cAAc;SAC7B,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,gBAAM,CAAC,CAAC;IAClD,CAAC;IACH,cAAC;AAAD,CAAC,AAvC8B,CAAc,oBAAU,EAuCtD,CAAC;AAEF,kBAAe,sBAAsB,CAAC"} \ No newline at end of file +{"version":3,"file":"MeteorClientHttpSender.js","sourceRoot":"","sources":["../../src/Senders/MeteorClientHttpSender.ts"],"names":[],"mappings":";AAAA,2BAA2B;;;;;;;;;;;;;;;;;;AAE3B;;GAEG;AAEH,qDAA+B;AAC/B,2CAA0C;AAE1C;;;;GAIG;AACH,IAAM,sBAAsB;IAAiB,2BAAU;IAIrD,uCAAuC;IACvC;;;;;OAKG;IACH,iBAAmB,SAAiB;QAApC,YACE,iBAAO,SAYR;QAbkB,eAAS,GAAT,SAAS,CAAQ;QAElC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;SACjF;QACD,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;SACvF;QAED,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAI,CAAC,cAAc,GAAG;YACpB,cAAc,EAAE,kBAAkB;SACnC,CAAC;;IACJ,CAAC;IAED,kBAAkB;IACX,sBAAI,GAAX,UAAY,KAAa,EAAE,OAAe,EAAE,OAAe;QACzD,IAAM,IAAI,GAAG,EAAE,KAAK,OAAA,EAAE,OAAO,SAAA,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC7C,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;YAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;SACxB;QAED,IAAM,OAAO,GAAG;YACd,IAAI,MAAA;YACJ,OAAO,EAAE,IAAI,CAAC,cAAc;SAC7B,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,gBAAM,CAAC,CAAC;IAClD,CAAC;IACH,cAAC;AAAD,CAAC,AAvC8B,CAAc,uBAAU,EAuCtD,CAAC;AAEF,kBAAe,sBAAsB,CAAC"} \ No newline at end of file diff --git a/lib/Senders/MeteorClientMethodSender.js b/lib/Senders/MeteorClientMethodSender.js index 76b5d09..06f3db5 100644 --- a/lib/Senders/MeteorClientMethodSender.js +++ b/lib/Senders/MeteorClientMethodSender.js @@ -13,15 +13,12 @@ var __extends = (this && this.__extends) || (function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); /** * @fileOverview Meteor Client Method Sender class. */ -var Logger_1 = __importDefault(require("../Logger")); -var SenderBase_1 = __importDefault(require("./SenderBase")); +var Logger_1 = require("../Loggers/Logger"); +var SenderBase_1 = require("./SenderBase"); /** * MeteorClientMethodSender send data from the client to the server over DDP. * @@ -48,9 +45,9 @@ var MeteorClientMethodSender = /** @class */ (function (_super) { if (typeof context !== "undefined") { data.context = context; } - Meteor.call(Logger_1.default.METHOD, data); + Meteor.call(Logger_1.Logger.METHOD, data); }; return class_1; -}(SenderBase_1.default)); +}(SenderBase_1.SenderBase)); exports.default = MeteorClientMethodSender; //# sourceMappingURL=MeteorClientMethodSender.js.map \ No newline at end of file diff --git a/lib/Senders/MeteorClientMethodSender.js.map b/lib/Senders/MeteorClientMethodSender.js.map index 904f386..b5914d5 100644 --- a/lib/Senders/MeteorClientMethodSender.js.map +++ b/lib/Senders/MeteorClientMethodSender.js.map @@ -1 +1 @@ -{"version":3,"file":"MeteorClientMethodSender.js","sourceRoot":"","sources":["../../src/Senders/MeteorClientMethodSender.ts"],"names":[],"mappings":";AAAA,qBAAqB;;;;;;;;;;;;;;;;;;AAErB;;GAEG;AAEH,qDAA+B;AAC/B,4DAAsC;AAEtC;;;;GAIG;AACH,IAAM,wBAAwB;IAAiB,2BAAU;IACvD;;;;;OAKG;IACH;QAAA,YACE,iBAAO,SAIR;QAHC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;SACnF;;IACH,CAAC;IAED,kBAAkB;IACX,sBAAI,GAAX,UAAY,KAAa,EAAE,OAAe,EAAE,OAAe;QACzD,IAAM,IAAI,GAAG,EAAE,KAAK,OAAA,EAAE,OAAO,SAAA,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC7C,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;YAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;SACxB;QAED,MAAM,CAAC,IAAI,CAAC,gBAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IACH,cAAC;AAAD,CAAC,AAvBgC,CAAc,oBAAU,EAuBxD,CAAC;AAEF,kBAAe,wBAAwB,CAAC"} \ No newline at end of file +{"version":3,"file":"MeteorClientMethodSender.js","sourceRoot":"","sources":["../../src/Senders/MeteorClientMethodSender.ts"],"names":[],"mappings":";AAAA,qBAAqB;;;;;;;;;;;;;;;AAErB;;GAEG;AAEH,4CAA2C;AAC3C,2CAA0C;AAE1C;;;;GAIG;AACH,IAAM,wBAAwB;IAAiB,2BAAU;IACvD;;;;;OAKG;IACH;QAAA,YACE,iBAAO,SAIR;QAHC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;SACnF;;IACH,CAAC;IAED,kBAAkB;IACX,sBAAI,GAAX,UAAY,KAAa,EAAE,OAAe,EAAE,OAAe;QACzD,IAAM,IAAI,GAAG,EAAE,KAAK,OAAA,EAAE,OAAO,SAAA,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC7C,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;YAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;SACxB;QAED,MAAM,CAAC,IAAI,CAAC,eAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IACH,cAAC;AAAD,CAAC,AAvBgC,CAAc,uBAAU,EAuBxD,CAAC;AAEF,kBAAe,wBAAwB,CAAC"} \ No newline at end of file diff --git a/lib/Senders/MongodbSender.d.ts b/lib/Senders/MongodbSender.d.ts index ee8c03a..5e2c1ed 100644 --- a/lib/Senders/MongodbSender.d.ts +++ b/lib/Senders/MongodbSender.d.ts @@ -8,7 +8,7 @@ import { Mongo } from "meteor/mongo"; * @extends SenderBase */ declare const MongodbSender: { - new (mongo: typeof Mongo, collection?: string | Mongo.Collection): { + new (mongo: any, collection?: string | Mongo.Collection): { store: Mongo.Collection; /** @inheritDoc */ send(level: number, message: string, context: object): void; diff --git a/lib/Senders/MongodbSender.js b/lib/Senders/MongodbSender.js index 68f240a..ebb3414 100644 --- a/lib/Senders/MongodbSender.js +++ b/lib/Senders/MongodbSender.js @@ -23,14 +23,11 @@ var __assign = (this && this.__assign) || function () { }; return __assign.apply(this, arguments); }; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); var IContext_1 = require("../IContext"); -var Logger_1 = __importDefault(require("../Logger")); -var ServerLogger_1 = __importDefault(require("../ServerLogger")); -var SenderBase_1 = __importDefault(require("./SenderBase")); +var Logger_1 = require("../Loggers/Logger"); +var ServerLogger_1 = require("../Loggers/ServerLogger"); +var SenderBase_1 = require("./SenderBase"); /** * MongodbSender sends logs to the Meteor standard database. * @@ -74,10 +71,10 @@ var MongodbSender = /** @class */ (function (_super) { } doc.context = defaultedContext; // doc.context.timestamp.server is known to exist from above. - Logger_1.default.prototype.stamp.call({ side: ServerLogger_1.default.side }, doc.context, "send"); + Logger_1.Logger.stamp(doc.context, "send", ServerLogger_1.ServerSide); this.store.insert(doc); }; return class_1; -}(SenderBase_1.default)); +}(SenderBase_1.SenderBase)); exports.default = MongodbSender; //# sourceMappingURL=MongodbSender.js.map \ No newline at end of file diff --git a/lib/Senders/MongodbSender.js.map b/lib/Senders/MongodbSender.js.map index 3a5c707..e4d0321 100644 --- a/lib/Senders/MongodbSender.js.map +++ b/lib/Senders/MongodbSender.js.map @@ -1 +1 @@ -{"version":3,"file":"MongodbSender.js","sourceRoot":"","sources":["../../src/Senders/MongodbSender.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,wCAA6C;AAC7C,qDAA+B;AAC/B,iEAA2C;AAC3C,4DAAsC;AAEtC;;;;GAIG;AACH,IAAM,aAAa;IAAiB,2BAAU;IAG5C,uCAAuC;IACvC;;;;;;;OAOG;IACH,iBAAY,KAAmB,EAAE,UAAsD;QAAtD,2BAAA,EAAA,qBAAsD;QAAvF,YACE,iBAAO,SASR;QARC,IAAI,UAAU,YAAY,KAAK,CAAC,UAAU,EAAE;YAC1C,KAAI,CAAC,KAAK,GAAG,UAAU,CAAC;SACzB;aAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YACzC,IAAM,cAAc,GAAG,UAAU,CAAC;YAClC,KAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;SACnD;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;SAC7E;;IACH,CAAC;IAED,kBAAkB;IACX,sBAAI,GAAX,UAAY,KAAa,EAAE,OAAe,EAAE,OAAe;QACzD,IAAM,gBAAgB,gBAAkB,OAAO,IAAE,SAAS,EAAE,EAAE,GAAE,CAAC;QACjE,IAAM,GAAG,GAAG,EAAE,KAAK,OAAA,EAAE,OAAO,SAAA,EAAE,OAAO,EAAE,EAAc,EAAE,CAAC;QAExD,2EAA2E;QAC3E,IAAI,OAAO,gBAAgB,CAAC,iBAAM,CAAC,KAAK,WAAW,EAAE;YACnD,gBAAgB,CAAC,iBAAM,CAAC,GAAG;gBACzB,MAAM,EAAE,EAAE;aACX,CAAC;SACH;QACD,GAAG,CAAC,OAAO,GAAG,gBAAgB,CAAC;QAE/B,6DAA6D;QAC7D,gBAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAY,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9E,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IACH,cAAC;AAAD,CAAC,AAzCqB,CAAc,oBAAU,EAyC7C,CAAC;AAEF,kBAAe,aAAa,CAAC"} \ No newline at end of file +{"version":3,"file":"MongodbSender.js","sourceRoot":"","sources":["../../src/Senders/MongodbSender.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,wCAA6C;AAC7C,4CAA2C;AAC3C,wDAAqD;AACrD,2CAA0C;AAE1C;;;;GAIG;AACH,IAAM,aAAa;IAAiB,2BAAU;IAG5C,uCAAuC;IACvC;;;;;;;OAOG;IACH,iBAAY,KAAU,EAAE,UAAsD;QAAtD,2BAAA,EAAA,qBAAsD;QAA9E,YACE,iBAAO,SASR;QARC,IAAI,UAAU,YAAY,KAAK,CAAC,UAAU,EAAE;YAC1C,KAAI,CAAC,KAAK,GAAG,UAAsC,CAAC;SACrD;aAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YACzC,IAAM,cAAc,GAAG,UAAU,CAAC;YAClC,KAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;SACnD;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;SAC7E;;IACH,CAAC;IAED,kBAAkB;IACX,sBAAI,GAAX,UAAY,KAAa,EAAE,OAAe,EAAE,OAAe;QACzD,IAAM,gBAAgB,gBAAkB,OAAO,IAAE,SAAS,EAAE,EAAE,GAAE,CAAC;QACjE,IAAM,GAAG,GAAG,EAAE,KAAK,OAAA,EAAE,OAAO,SAAA,EAAE,OAAO,EAAE,EAAc,EAAE,CAAC;QAExD,2EAA2E;QAC3E,IAAI,OAAO,gBAAgB,CAAC,iBAAM,CAAC,KAAK,WAAW,EAAE;YACnD,gBAAgB,CAAC,iBAAM,CAAC,GAAG;gBACzB,MAAM,EAAE,EAAE;aACX,CAAC;SACH;QACD,GAAG,CAAC,OAAO,GAAG,gBAAgB,CAAC;QAE/B,6DAA6D;QAC7D,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,yBAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IACH,cAAC;AAAD,CAAC,AAzCqB,CAAc,uBAAU,EAyC7C,CAAC;AAEF,kBAAe,aAAa,CAAC"} \ No newline at end of file diff --git a/lib/Senders/NullSender.js b/lib/Senders/NullSender.js index f0a381d..7fa0596 100644 --- a/lib/Senders/NullSender.js +++ b/lib/Senders/NullSender.js @@ -15,11 +15,8 @@ var __extends = (this && this.__extends) || (function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); -var SenderBase_1 = __importDefault(require("./SenderBase")); +var SenderBase_1 = require("./SenderBase"); /** * NullSender defines an explicit null sender. * @@ -34,6 +31,6 @@ var NullSender = /** @class */ (function (_super) { return _super !== null && _super.apply(this, arguments) || this; } return class_1; -}(SenderBase_1.default)); +}(SenderBase_1.SenderBase)); exports.default = NullSender; //# sourceMappingURL=NullSender.js.map \ No newline at end of file diff --git a/lib/Senders/NullSender.js.map b/lib/Senders/NullSender.js.map index aaf69ec..c607034 100644 --- a/lib/Senders/NullSender.js.map +++ b/lib/Senders/NullSender.js.map @@ -1 +1 @@ -{"version":3,"file":"NullSender.js","sourceRoot":"","sources":["../../src/Senders/NullSender.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;AAEH,4DAAsC;AAEtC;;;;;;;GAOG;AACH,IAAM,UAAU;IAAiB,2BAAU;IAAxB;;IAA0B,CAAC;IAAD,cAAC;AAAD,CAAC,AAA3B,CAAc,oBAAU,EAAG,CAAC;AAE/C,kBAAe,UAAU,CAAC"} \ No newline at end of file +{"version":3,"file":"NullSender.js","sourceRoot":"","sources":["../../src/Senders/NullSender.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;AAEH,2CAA0C;AAE1C;;;;;;;GAOG;AACH,IAAM,UAAU;IAAiB,2BAAU;IAAxB;;IAA0B,CAAC;IAAD,cAAC;AAAD,CAAC,AAA3B,CAAc,uBAAU,EAAG,CAAC;AAE/C,kBAAe,UAAU,CAAC"} \ No newline at end of file diff --git a/lib/Senders/SenderBase.d.ts b/lib/Senders/SenderBase.d.ts index 61318fc..7007d18 100644 --- a/lib/Senders/SenderBase.d.ts +++ b/lib/Senders/SenderBase.d.ts @@ -2,13 +2,12 @@ * @fileOverview Base Sender class. */ import * as LogLevel from "../LogLevel"; +import { ISender } from "./ISender"; /** * SenderBase is an "abstract" class defining the sender interface. */ -declare const SenderBase: { - new (): { - /** @inheritDoc */ - send(_1: LogLevel.Levels, _2: string, _3: object): void; - }; -}; -export default SenderBase; +declare class SenderBase implements ISender { + /** @inheritDoc */ + send(_1: LogLevel.Levels, _2: string, _3: object): void; +} +export { SenderBase, }; diff --git a/lib/Senders/SenderBase.js b/lib/Senders/SenderBase.js index 34d7015..6491f4b 100644 --- a/lib/Senders/SenderBase.js +++ b/lib/Senders/SenderBase.js @@ -7,11 +7,11 @@ Object.defineProperty(exports, "__esModule", { value: true }); * SenderBase is an "abstract" class defining the sender interface. */ var SenderBase = /** @class */ (function () { - function class_1() { + function SenderBase() { } /** @inheritDoc */ - class_1.prototype.send = function (_1, _2, _3) { return; }; - return class_1; + SenderBase.prototype.send = function (_1, _2, _3) { return; }; + return SenderBase; }()); -exports.default = SenderBase; +exports.SenderBase = SenderBase; //# sourceMappingURL=SenderBase.js.map \ No newline at end of file diff --git a/lib/Senders/SenderBase.js.map b/lib/Senders/SenderBase.js.map index d049c7d..cab644f 100644 --- a/lib/Senders/SenderBase.js.map +++ b/lib/Senders/SenderBase.js.map @@ -1 +1 @@ -{"version":3,"file":"SenderBase.js","sourceRoot":"","sources":["../../src/Senders/SenderBase.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAKH;;GAEG;AACH,IAAM,UAAU;IAAG;IAGnB,CAAC;IAFC,kBAAkB;IACX,sBAAI,GAAX,UAAY,EAAmB,EAAE,EAAU,EAAE,EAAU,IAAU,OAAO,CAAC,CAAC;IAC5E,cAAC;AAAD,CAAC,AAHkB,GAGlB,CAAC;AAEF,kBAAe,UAAU,CAAC"} \ No newline at end of file +{"version":3,"file":"SenderBase.js","sourceRoot":"","sources":["../../src/Senders/SenderBase.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAKH;;GAEG;AACH;IAAA;IAGA,CAAC;IAFC,kBAAkB;IACX,yBAAI,GAAX,UAAY,EAAmB,EAAE,EAAU,EAAE,EAAU,IAAU,OAAO,CAAC,CAAC;IAC5E,iBAAC;AAAD,CAAC,AAHD,IAGC;AAGC,gCAAU"} \ No newline at end of file diff --git a/lib/Senders/SyslogSender.js b/lib/Senders/SyslogSender.js index d053a9f..796b22f 100644 --- a/lib/Senders/SyslogSender.js +++ b/lib/Senders/SyslogSender.js @@ -22,17 +22,14 @@ var __importStar = (this && this.__importStar) || function (mod) { result["default"] = mod; return result; }; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); var modernSyslog = require("modern-syslog"); var path = __importStar(require("path")); var util = __importStar(require("util")); var IContext_1 = require("../IContext"); -var Logger_1 = __importDefault(require("../Logger")); -var ServerLogger_1 = __importDefault(require("../ServerLogger")); -var SenderBase_1 = __importDefault(require("./SenderBase")); +var Logger_1 = require("../Loggers/Logger"); +var ServerLogger_1 = require("../Loggers/ServerLogger"); +var SenderBase_1 = require("./SenderBase"); /** * SyslogSender sends messages to a syslog server. * @@ -111,7 +108,7 @@ var SyslogSender = /** @class */ (function (_super) { doc.context[IContext_1.TS_KEY] = {}; } // doc.context.timestamp.server is known to exist from above. - Logger_1.default.prototype.stamp.call({ side: ServerLogger_1.default.side }, doc.context, "send"); + Logger_1.Logger.stamp(doc.context, "send", ServerLogger_1.ServerLogger.side); this.syslog.log(level, this.serialize(doc)); }; /** @@ -168,6 +165,6 @@ var SyslogSender = /** @class */ (function (_super) { return result; }; return class_1; -}(SenderBase_1.default)); +}(SenderBase_1.SenderBase)); exports.default = SyslogSender; //# sourceMappingURL=SyslogSender.js.map \ No newline at end of file diff --git a/lib/Senders/SyslogSender.js.map b/lib/Senders/SyslogSender.js.map index bdf2fe6..8609f13 100644 --- a/lib/Senders/SyslogSender.js.map +++ b/lib/Senders/SyslogSender.js.map @@ -1 +1 @@ -{"version":3,"file":"SyslogSender.js","sourceRoot":"","sources":["../../src/Senders/SyslogSender.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"SyslogSender.js","sourceRoot":"","sources":["../../src/Senders/SyslogSender.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Senders/TeeSender.js b/lib/Senders/TeeSender.js index 2af1431..cba9401 100644 --- a/lib/Senders/TeeSender.js +++ b/lib/Senders/TeeSender.js @@ -15,11 +15,8 @@ var __extends = (this && this.__extends) || (function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); -var SenderBase_1 = __importDefault(require("./SenderBase")); +var SenderBase_1 = require("./SenderBase"); /** * Like a UNIX tee(1), the TeeSender sends its input to multiple outputs. * @@ -43,6 +40,6 @@ var TeeSender = /** @class */ (function (_super) { this.senders.map(function (sender) { return sender.send(level, message, context); }); }; return class_1; -}(SenderBase_1.default)); +}(SenderBase_1.SenderBase)); exports.default = TeeSender; //# sourceMappingURL=TeeSender.js.map \ No newline at end of file diff --git a/lib/Senders/TeeSender.js.map b/lib/Senders/TeeSender.js.map index 195c334..488f398 100644 --- a/lib/Senders/TeeSender.js.map +++ b/lib/Senders/TeeSender.js.map @@ -1 +1 @@ -{"version":3,"file":"TeeSender.js","sourceRoot":"","sources":["../../src/Senders/TeeSender.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;AAGH,4DAAsC;AAEtC;;;;GAIG;AACH,IAAM,SAAS;IAAiB,2BAAU;IACxC;;;;;OAKG;IACH,iBAAmB,OAAkB;QAArC,YACE,iBAAO,SACR;QAFkB,aAAO,GAAP,OAAO,CAAW;;IAErC,CAAC;IAED,kBAAkB;IACX,sBAAI,GAAX,UAAY,KAAa,EAAE,OAAe,EAAE,OAAe;QACzD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAC,MAAM,IAAK,OAAA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAApC,CAAoC,CAAC,CAAC;IACrE,CAAC;IACH,cAAC;AAAD,CAAC,AAfiB,CAAc,oBAAU,EAezC,CAAC;AAEF,kBAAe,SAAS,CAAC"} \ No newline at end of file +{"version":3,"file":"TeeSender.js","sourceRoot":"","sources":["../../src/Senders/TeeSender.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;AAGH,2CAA0C;AAE1C;;;;GAIG;AACH,IAAM,SAAS;IAAiB,2BAAU;IACxC;;;;;OAKG;IACH,iBAAmB,OAAkB;QAArC,YACE,iBAAO,SACR;QAFkB,aAAO,GAAP,OAAO,CAAW;;IAErC,CAAC;IAED,kBAAkB;IACX,sBAAI,GAAX,UAAY,KAAa,EAAE,OAAe,EAAE,OAAe;QACzD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAC,MAAM,IAAK,OAAA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAApC,CAAoC,CAAC,CAAC;IACrE,CAAC;IACH,cAAC;AAAD,CAAC,AAfiB,CAAc,uBAAU,EAezC,CAAC;AAEF,kBAAe,SAAS,CAAC"} \ No newline at end of file diff --git a/lib/ServerLogger.js.map b/lib/ServerLogger.js.map deleted file mode 100644 index 4210a8d..0000000 --- a/lib/ServerLogger.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ServerLogger.js","sourceRoot":"","sources":["../src/ServerLogger.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Strategies/IStrategy.d.ts b/lib/Strategies/IStrategy.d.ts index 1f91170..84f7083 100644 --- a/lib/Strategies/IStrategy.d.ts +++ b/lib/Strategies/IStrategy.d.ts @@ -1,4 +1,4 @@ -import { ILogger } from "../ILogger"; +import { ILogger } from "../Loggers/ILogger"; import * as LogLevel from "../LogLevel"; import { ISender } from "../Senders/ISender"; interface IStrategy { diff --git a/lib/Strategies/LeveledStrategy.d.ts b/lib/Strategies/LeveledStrategy.d.ts index e5aa2cd..6706c4a 100644 --- a/lib/Strategies/LeveledStrategy.d.ts +++ b/lib/Strategies/LeveledStrategy.d.ts @@ -1,7 +1,7 @@ /** * @fileOverview Level-based Strategy. */ -import { ILogger } from "../ILogger"; +import { ILogger } from "../Loggers/ILogger"; import * as LogLevel from "../LogLevel"; import { ISender } from "../Senders/ISender"; /** diff --git a/lib/Strategies/LeveledStrategy.js b/lib/Strategies/LeveledStrategy.js index 63d533b..f5e4cea 100644 --- a/lib/Strategies/LeveledStrategy.js +++ b/lib/Strategies/LeveledStrategy.js @@ -29,7 +29,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); var LogLevel = __importStar(require("../LogLevel")); var NullFn_1 = __importDefault(require("../NullFn")); var NullSender_1 = __importDefault(require("../Senders/NullSender")); -var SenderBase_1 = __importDefault(require("../Senders/SenderBase")); +var SenderBase_1 = require("../Senders/SenderBase"); var StrategyBase_1 = __importDefault(require("./StrategyBase")); /** * LeveledStrategy defines a single sender per level. @@ -66,7 +66,7 @@ var LeveledStrategy = /** @class */ (function (_super) { _this.maxHigh = maxHigh; _this.senders = [low, medium, high]; _this.senders.forEach(function (sender) { - if (!(sender instanceof SenderBase_1.default)) { + if (!(sender instanceof SenderBase_1.SenderBase)) { throw new Error("LeveledStrategy: senders must be instances of a Sender class."); } }); diff --git a/lib/Strategies/LeveledStrategy.js.map b/lib/Strategies/LeveledStrategy.js.map index 27c2564..24c5230 100644 --- a/lib/Strategies/LeveledStrategy.js.map +++ b/lib/Strategies/LeveledStrategy.js.map @@ -1 +1 @@ -{"version":3,"file":"LeveledStrategy.js","sourceRoot":"","sources":["../../src/Strategies/LeveledStrategy.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;AAGH,oDAAwC;AACxC,qDAA+B;AAE/B,qEAA+C;AAC/C,qEAA+C;AAC/C,gEAA0C;AAE1C;;;;GAIG;AACH,IAAM,eAAe;IAAiB,2BAAY;IAEhD,uCAAuC;IACvC;;;;;;;;;;;;;OAaG;IACH,iBACS,GAAY,EACZ,MAAe,EACf,IAAa,EACb,MAAwC,EACxC,OAA2C;QAD3C,uBAAA,EAAA,SAA0B,QAAQ,CAAC,KAAK;QACxC,wBAAA,EAAA,UAA2B,QAAQ,CAAC,OAAO;QALpD;QAME,2CAA2C;QAC3C,kBAAM,KAAK,CAAC,SAQb;QAdQ,SAAG,GAAH,GAAG,CAAS;QACZ,YAAM,GAAN,MAAM,CAAS;QACf,UAAI,GAAJ,IAAI,CAAS;QACb,YAAM,GAAN,MAAM,CAAkC;QACxC,aAAO,GAAP,OAAO,CAAoC;QAGlD,KAAI,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAEnC,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;YAC1B,IAAI,CAAC,CAAC,MAAM,YAAY,oBAAU,CAAC,EAAE;gBACnC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;aAClF;QACH,CAAC,CAAC,CAAC;;IACL,CAAC;IAEM,iCAAe,GAAtB,UAAuB,MAAe;QAAtC,iBAMC;QALC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK;YACtC,IAAI,KAAI,CAAC,KAAmB,CAAC,YAAY,oBAAU,EAAE;gBACnD,MAAM,CAAC,KAAK,GAAG,gBAAM,CAAC;aACvB;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,+BAAa,GAApB,UAAqB,KAAsB,EAAE,EAAU,EAAE,EAAU;QACjE,IAAI,MAAM,CAAC;QACX,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YACxB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;SACnB;aAAM,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;YAChC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;SACpB;aAAM;YACL,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;SACtB;QAED,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IACH,cAAC;AAAD,CAAC,AAtDuB,CAAc,sBAAY,EAsDjD,CAAC;AAEF,kBAAe,eAAe,CAAC"} \ No newline at end of file +{"version":3,"file":"LeveledStrategy.js","sourceRoot":"","sources":["../../src/Strategies/LeveledStrategy.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;AAGH,oDAAwC;AACxC,qDAA+B;AAE/B,qEAA+C;AAC/C,oDAAmD;AACnD,gEAA0C;AAE1C;;;;GAIG;AACH,IAAM,eAAe;IAAiB,2BAAY;IAEhD,uCAAuC;IACvC;;;;;;;;;;;;;OAaG;IACH,iBACS,GAAY,EACZ,MAAe,EACf,IAAa,EACb,MAAwC,EACxC,OAA2C;QAD3C,uBAAA,EAAA,SAA0B,QAAQ,CAAC,KAAK;QACxC,wBAAA,EAAA,UAA2B,QAAQ,CAAC,OAAO;QALpD;QAME,2CAA2C;QAC3C,kBAAM,KAAK,CAAC,SAQb;QAdQ,SAAG,GAAH,GAAG,CAAS;QACZ,YAAM,GAAN,MAAM,CAAS;QACf,UAAI,GAAJ,IAAI,CAAS;QACb,YAAM,GAAN,MAAM,CAAkC;QACxC,aAAO,GAAP,OAAO,CAAoC;QAGlD,KAAI,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAEnC,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;YAC1B,IAAI,CAAC,CAAC,MAAM,YAAY,uBAAU,CAAC,EAAE;gBACnC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;aAClF;QACH,CAAC,CAAC,CAAC;;IACL,CAAC;IAEM,iCAAe,GAAtB,UAAuB,MAAe;QAAtC,iBAMC;QALC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK;YACtC,IAAI,KAAI,CAAC,KAAmB,CAAC,YAAY,oBAAU,EAAE;gBACnD,MAAM,CAAC,KAAK,GAAG,gBAAM,CAAC;aACvB;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,+BAAa,GAApB,UAAqB,KAAsB,EAAE,EAAU,EAAE,EAAU;QACjE,IAAI,MAAM,CAAC;QACX,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YACxB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;SACnB;aAAM,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;YAChC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;SACpB;aAAM;YACL,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;SACtB;QAED,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IACH,cAAC;AAAD,CAAC,AAtDuB,CAAc,sBAAY,EAsDjD,CAAC;AAEF,kBAAe,eAAe,CAAC"} \ No newline at end of file diff --git a/lib/Strategies/StrategyBase.d.ts b/lib/Strategies/StrategyBase.d.ts index 727493e..51495fc 100644 --- a/lib/Strategies/StrategyBase.d.ts +++ b/lib/Strategies/StrategyBase.d.ts @@ -1,7 +1,7 @@ /** * @fileOverview Base Strategy. */ -import { ILogger } from "../ILogger"; +import { ILogger } from "../Loggers/ILogger"; import * as LogLevel from "../LogLevel"; import { ISender } from "../Senders/ISender"; /** diff --git a/lib/Strategies/TrivialStrategy.d.ts b/lib/Strategies/TrivialStrategy.d.ts index 39b801d..46446a2 100644 --- a/lib/Strategies/TrivialStrategy.d.ts +++ b/lib/Strategies/TrivialStrategy.d.ts @@ -13,7 +13,7 @@ declare const TrivialStrategy: { new (sender: ISender): { senders: ISender[]; selectSenders(_1: Levels, _2: string, _3: object): ISender[]; - customizeLogger(_: import("../ILogger").ILogger): void; + customizeLogger(_: import("../Loggers/ILogger").ILogger): void; }; }; export default TrivialStrategy; diff --git a/lib/index.d.ts b/lib/index.d.ts deleted file mode 100644 index 4a28342..0000000 --- a/lib/index.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import InvalidArgumentException from "./InvalidArgumentException"; -import * as LogLevel from "./LogLevel"; -import ClientLogger from "./ClientLogger"; -import Logger from "./Logger"; -import ServerLogger from "./ServerLogger"; -import { BrowserProcessor } from "./Processors/BrowserProcessor"; -import MeteorUserProcessor from "./Processors/MeteorUserProcessor"; -import ProcessorBase from "./Processors/ProcessorBase"; -import RoutingProcessor from "./Processors/RoutingProcessor"; -import LeveledStrategy from "./Strategies/LeveledStrategy"; -import StrategyBase from "./Strategies/StrategyBase"; -import TrivialStrategy from "./Strategies/TrivialStrategy"; -import ConsoleSender from "./Senders/ConsoleSender"; -import MeteorClientHttpSender from "./Senders/MeteorClientHttpSender"; -import MeteorClientMethodSender from "./Senders/MeteorClientMethodSender"; -import MongodbSender from "./Senders/MongodbSender"; -import NullSender from "./Senders/NullSender"; -import SenderBase from "./Senders/SenderBase"; -import TeeSender from "./Senders/TeeSender"; -declare const SyslogSender: any; -export { InvalidArgumentException, LogLevel, Logger, ClientLogger, ServerLogger, ProcessorBase, BrowserProcessor, MeteorUserProcessor, RoutingProcessor, StrategyBase, LeveledStrategy, TrivialStrategy, SenderBase, NullSender, ConsoleSender, MeteorClientHttpSender, MeteorClientMethodSender, MongodbSender, SyslogSender, TeeSender, }; diff --git a/lib/index.js.map b/lib/index.js.map deleted file mode 100644 index a7ee48c..0000000 --- a/lib/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wFAAkE;AAmChE,mCAnCK,kCAAwB,CAmCL;AAlC1B,mDAAuC;AAmCrC,4BAAQ;AAjCV,gEAA0C;AAoCxC,uBApCK,sBAAY,CAoCL;AAnCd,oDAA8B;AAkC5B,iBAlCK,gBAAM,CAkCL;AAjCR,gEAA0C;AAmCxC,uBAnCK,sBAAY,CAmCL;AAjCd,kEAAiE;AAqC/D,2BArCO,mCAAgB,CAqCP;AApClB,yFAAmE;AAqCjE,8BArCK,6BAAmB,CAqCL;AApCrB,6EAAuD;AAkCrD,wBAlCK,uBAAa,CAkCL;AAjCf,mFAA6D;AAoC3D,2BApCK,0BAAgB,CAoCL;AAlClB,iFAA2D;AAsCzD,0BAtCK,yBAAe,CAsCL;AArCjB,2EAAqD;AAoCnD,uBApCK,sBAAY,CAoCL;AAnCd,iFAA2D;AAqCzD,0BArCK,yBAAe,CAqCL;AAnCjB,0EAAoD;AAwClD,wBAxCK,uBAAa,CAwCL;AAvCf,4FAAsE;AAwCpE,iCAxCK,gCAAsB,CAwCL;AAvCxB,gGAA0E;AAwCxE,mCAxCK,kCAAwB,CAwCL;AAvC1B,0EAAoD;AAwClD,wBAxCK,uBAAa,CAwCL;AAvCf,oEAA8C;AAmC5C,qBAnCK,oBAAU,CAmCL;AAlCZ,oEAA8C;AAiC5C,qBAjCK,oBAAU,CAiCL;AAhCZ,kEAA4C;AAuC1C,oBAvCK,mBAAS,CAuCL;AArCX;;;;GAIG;AACH,IAAM,YAAY,GAAG,MAAM,CAAC,QAAQ;IAClC,2BAA2B;IAC3B,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,OAAO;IAC3C,CAAC,CAAC,oBAAU,CAAC;AA4Bb,oCAAY"} \ No newline at end of file diff --git a/src/IContext.ts b/src/IContext.ts index 299c242..0f42234 100644 --- a/src/IContext.ts +++ b/src/IContext.ts @@ -17,7 +17,7 @@ interface ITimestampsHash { } interface IContext { - [DETAILS_KEY]?: object; + [DETAILS_KEY]?: {}; [HOST_KEY]?: string; [SOURCE_KEY]?: string; [TS_KEY]?: ITimestampsHash; diff --git a/src/ClientLogger.ts b/src/Loggers/ClientLogger.ts similarity index 68% rename from src/ClientLogger.ts rename to src/Loggers/ClientLogger.ts index 6240fa2..7811b3e 100644 --- a/src/ClientLogger.ts +++ b/src/Loggers/ClientLogger.ts @@ -2,8 +2,8 @@ * @fileOverview Client-side Logger implementation. */ -import Logger from "./Logger"; -import {IStrategy} from "./Strategies/IStrategy"; +import {IStrategy} from "../Strategies/IStrategy"; +import { Logger } from "./Logger"; const SIDE = "client"; @@ -24,6 +24,15 @@ class ClientLogger extends Logger { super(strategy); this.side = SIDE; } + + /** + * @inheritDoc + */ + protected getHostname(): string | undefined { + return undefined; + } } -export default ClientLogger; +export { + ClientLogger, +}; diff --git a/src/ILogger.ts b/src/Loggers/ILogger.ts similarity index 94% rename from src/ILogger.ts rename to src/Loggers/ILogger.ts index 5c28a4b..5c834ad 100644 --- a/src/ILogger.ts +++ b/src/Loggers/ILogger.ts @@ -1,5 +1,5 @@ -import {IContext} from "./IContext"; -import * as LogLevel from "./LogLevel"; +import {IContext} from "../IContext"; +import * as LogLevel from "../LogLevel"; interface ILogger { diff --git a/src/Logger.ts b/src/Loggers/Logger.ts similarity index 73% rename from src/Logger.ts rename to src/Loggers/Logger.ts index 43a8735..ffa2c6c 100644 --- a/src/Logger.ts +++ b/src/Loggers/Logger.ts @@ -1,17 +1,20 @@ /** * @fileOverview Base Logger class. */ + import TraceKit from "tracekit"; + import { + DETAILS_KEY, HOST_KEY, IContext, - ITimestampsHash, + ITimestampsHash, SOURCE_KEY, TS_KEY, -} from "./IContext"; +} from "../IContext"; +import InvalidArgumentException from "../InvalidArgumentException"; +import * as LogLevel from "../LogLevel"; +import {IProcessor} from "../Processors/IProcessor"; +import {IStrategy} from "../Strategies/IStrategy"; import {ILogger} from "./ILogger"; -import InvalidArgumentException from "./InvalidArgumentException"; -import * as LogLevel from "./LogLevel"; -import {IProcessor} from "./Processors/IProcessor"; -import {IStrategy} from "./Strategies/IStrategy"; // const logMethodNames = ["log", "debug", "info", "warn", "error", "_exception" ]; @@ -43,6 +46,34 @@ class Logger implements ILogger { return LogLevel.Names[numericLevel]; } + /** + * Add a timestamp to a context object on the active side. + * + * Ensure a TS_KEY will be present, and existing timestamps are not being + * overwritten, except possibly for any value already present at [TS_KEY][op]. + * + * @param context + * Mutated. The context to stamp. + * @param op + * The operation for which to add a timestamp. + * + * @protected + */ + public static stamp(context: IContext, op: string, side: keyof ITimestampsHash): void { + const now = + new Date(); + // Ensure context actually contains a TS_KEY. + if (typeof context[TS_KEY] === "undefined") { + context[TS_KEY] = {} as ITimestampsHash; + } + + // We know context[TS_KEY] is defined because we just ensured it was. + const contextTs: ITimestampsHash = context[TS_KEY]!; + + const sideTs = contextTs[side] || {}; + sideTs[op] = now; + contextTs[side] = sideTs; + } + public processors: IProcessor[] = []; public side: string = SIDE; // FIXME Cannot use TraceKit as a type as it's a namespace. @@ -73,6 +104,76 @@ class Logger implements ILogger { this.tk.report.subscribe(this.reportSubscriber.bind(this)); } + /** @inheritDoc */ + public debug(message: object|string, context: IContext = {}): void { + this.log(LogLevel.DEBUG, message, context); + } + + /** + * Disarm the subscriber. + * + * In most cases, we do not want to disarm immediately: a stack trace being + * build may take several hundred milliseconds, and we would lose it. + * + * @param {Number} delay + * The delay before actually disarming, in milliseconds. + * + * @returns {void} + */ + public disarm(delay = 2000) { + setTimeout(() => { + this.tk.report.unsubscribe(this.reportSubscriber); + }, delay); + } + + /** @inheritDoc */ + public error(message: object|string, context: IContext = {}): void { + // FIXME: message may not be a string. + this.log(LogLevel.ERROR, message as string, context); + } + + /** + * Provide the default context bits specific to the logger instance + details. + * + * @param details + * The message details. + * + * This method is only made public for the benefit of tests: it is not meant + * to be used outside the class and its tests. + * + * @protected + */ + public getInitialContext(details = {}): IContext { + const cx: IContext = { + [DETAILS_KEY]: details, + [SOURCE_KEY]: this.side, + }; + + const hostName = this._getHostname(); + if (typeof hostName === "string") { + cx[HOST_KEY] = hostName; + } + + Logger.stamp(cx, "log", this.side); + return cx; + } + + /** @inheritDoc */ + public info(message: object|string, context: IContext = {}): void { + this.log(LogLevel.INFORMATIONAL, message, context); + } + + /** @inheritDoc */ + public log( + level: LogLevel.Levels, + message: object|string, + details: {} = {}, + ): void { + this.validateLevel(level); + const c1 = this.getInitialContext(details); + this.send(this.strategy, level, String(message), c1); + } + /** * The callback invoked by TraceKit * @@ -120,67 +221,6 @@ class Logger implements ILogger { }); } - /** - * Add a timestamp to a context object on the active side. - * - * @param context - * Mutated. The context to stamp. - * @param op - * The operation for which to add a timestamp. - */ - public stamp(context: IContext, op: string): void { - const now = + new Date(); - if (!context[TS_KEY]) { - context[TS_KEY] = {}; - } - const contextTs: ITimestampsHash = context[TS_KEY]!; - const side = contextTs[this.side as keyof ITimestampsHash] || {}; - side[op] = now; - } - - /** @inheritDoc */ - public debug(message: object|string, context: IContext = {}): void { - this.log(LogLevel.DEBUG, message, context); - } - - /** - * Disarm the subscriber. - * - * In most cases, we do not want to disarm immediately: a stack trace being - * build may take several hundred milliseconds, and we would lose it. - * - * @param {Number} delay - * The delay before actually disarming, in milliseconds. - * - * @returns {void} - */ - public disarm(delay = 2000) { - setTimeout(() => { - this.tk.report.unsubscribe(this.reportSubscriber); - }, delay); - } - - /** @inheritDoc */ - public error(message: object|string, context: IContext = {}): void { - // FIXME: message may not be a string. - this.log(LogLevel.ERROR, message as string, context); - } - - /** @inheritDoc */ - public info(message: object|string, context: IContext = {}): void { - this.log(LogLevel.INFORMATIONAL, message, context); - } - - /** @inheritDoc */ - public log( - level: LogLevel.Levels, - message: object|string, - initialContext: IContext = {}, - process: boolean = true, - ): void { - this.send(this.strategy, level, String(message), initialContext); - } - /** * Ensure a log level is in the allowed value set. * @@ -219,6 +259,17 @@ class Logger implements ILogger { * @todo (or not ?) merge in the funky Meteor logic from the logging package. */ public _meteorLog(): void { return; } + + /** + * Child classes are expected to re-implement this. + * + * @protected + */ + protected _getHostname(): string | undefined { + return undefined; + } } -export default Logger; +export { + Logger, +}; diff --git a/src/ServerLogger.ts b/src/Loggers/ServerLogger.ts similarity index 81% rename from src/ServerLogger.ts rename to src/Loggers/ServerLogger.ts index 2e23ea8..acebd65 100644 --- a/src/ServerLogger.ts +++ b/src/Loggers/ServerLogger.ts @@ -3,31 +3,26 @@ */ // Meteor imports. +import * as connect from "connect"; import {IncomingMessage, ServerResponse} from "http"; import {WebApp} from "meteor/webapp"; - // Node.JS packages: this is server-side code. -import { hostname } from "os"; +import * as os from "os"; import process from "process"; import * as util from "util"; - // Package imports. -import ClientLogger from "./ClientLogger"; -import Logger from "./Logger"; -import * as LogLevel from "./LogLevel"; -import {IStrategy} from "./Strategies/IStrategy"; - -import WriteStream = NodeJS.WriteStream; -import { - DETAILS_KEY, - HOST_KEY, - IContext, - SOURCE_KEY, - TS_KEY, -} from "./IContext"; +import {DETAILS_KEY, HOST_KEY, IContext, SOURCE_KEY } from "../IContext"; +import * as LogLevel from "../LogLevel"; +import {IStrategy} from "../Strategies/IStrategy"; +import {ClientLogger} from "./ClientLogger"; import {ILogger} from "./ILogger"; +import {Logger} from "./Logger"; +import WriteStream = NodeJS.WriteStream; -type OptionalWebApp = typeof WebApp | null; +interface IWebApp { + connectHandlers: connect.Server; +} +type OptionalWebApp = typeof WebApp | IWebApp | null; interface IServerLoggerConstructorParameters { enableMethod?: boolean; @@ -123,8 +118,7 @@ class ServerLogger extends Logger implements ILogger { } } - const message = util.inspect(doc); - return message; + return util.inspect(doc); } public enableMethod: boolean = true; @@ -133,7 +127,8 @@ class ServerLogger extends Logger implements ILogger { public maxReqListeners: number = 11; public output: WriteStream; public servePath: string = "/logger"; - public readonly side = "server"; + // Should usually not be modified. + public side = "server"; public verbose: boolean = false; // noinspection JSClassNamingConvention @@ -179,7 +174,7 @@ class ServerLogger extends Logger implements ILogger { } } - this.hostname = hostname(); + this.hostname = os.hostname(); if (this.enableMethod) { Meteor.methods({ [Logger.METHOD]: this.logMethod.bind(this) }); @@ -188,6 +183,31 @@ class ServerLogger extends Logger implements ILogger { this.setupConnect(webapp, this.servePath); } + /** + * Add defaults to the initial context. + * + * @param initialContext + * The context passed to logExtended(). + * @param source + * The source whence the event originated. + * + * @see logExtended() + * + * This method is only made public for the benefit of tests: it is not meant + * to be used outside the class and its tests. + * + * @protected + */ + public defaultContext(initialContext: IContext, source: string): IContext { + const cx1 = { + [HOST_KEY]: this._getHostname(), + [SOURCE_KEY]: source, + ...initialContext, + }; + Logger.stamp(cx1, "log", this.side); + return cx1; + } + /** * Handle a log message from the client. * @@ -233,8 +253,12 @@ class ServerLogger extends Logger implements ILogger { if (this.logRequestHeaders) { context.requestHeaders = req.headers; } - const { [DETAILS_KEY]: details, ...nonDetails } = context; - this.logExtended(level, message, details, nonDetails, ClientLogger.side); + const { + [DETAILS_KEY]: details, + // tslint:disable-next-line + ...nonDetails + } = context; + this.logExtended(level, message, nonDetails, ClientLogger.side); res.statusCode = 200; result = ""; } catch (err) { @@ -251,9 +275,9 @@ class ServerLogger extends Logger implements ILogger { /** * @inheritDoc */ - public log(level: LogLevel.Levels, message: string, rawContext: IContext, cooked = true): void { + public log(level: LogLevel.Levels, message: string, rawContext: IContext): void { rawContext.hostname = this.hostname; - super.log(level, message, rawContext, cooked); + super.log(level, message, rawContext); } /** @@ -274,7 +298,8 @@ class ServerLogger extends Logger implements ILogger { */ public logExtended(level: LogLevel.Levels, message: string, context: IContext, source: string): void { this.validateLevel(level); - this.send(this.strategy, level, message, context); + const cx1 = this.defaultContext(context, source); + this.send(this.strategy, level, message, cx1); } /** @@ -307,15 +332,29 @@ class ServerLogger extends Logger implements ILogger { if (this.verbose) { this.output.write(`Serving logger on ${servePath}.\n`); } - let app = this.webapp.connectHandlers; + const app = this.webapp.connectHandlers; app.use(this.servePath, this.handleClientLogRequest.bind(this)); - } - else { + } else { if (this.verbose) { this.output.write(`Not serving logger, path ${servePath}.\n`); } } } + + /** + * @inheritDoc + */ + protected _getHostname(): string | undefined { + if (!this.hostname) { + this.hostname = os.hostname(); + } + + return this.hostname; + } } -export default ServerLogger; +export { + IServerLoggerConstructorParameters, + ServerLogger, + SIDE as ServerSide, +}; diff --git a/src/Loggers/index.ts b/src/Loggers/index.ts new file mode 100644 index 0000000..45585a9 --- /dev/null +++ b/src/Loggers/index.ts @@ -0,0 +1,63 @@ +import InvalidArgumentException from "../InvalidArgumentException"; +import * as LogLevel from "../LogLevel"; + +import { ClientLogger } from "./ClientLogger"; +import { Logger } from "./Logger"; +import { ServerLogger } from "./ServerLogger"; + +import { BrowserProcessor } from "../Processors/BrowserProcessor"; +import MeteorUserProcessor from "../Processors/MeteorUserProcessor"; +import ProcessorBase from "../Processors/ProcessorBase"; +import RoutingProcessor from "../Processors/RoutingProcessor"; + +import LeveledStrategy from "../Strategies/LeveledStrategy"; +import StrategyBase from "../Strategies/StrategyBase"; +import TrivialStrategy from "../Strategies/TrivialStrategy"; + +import ConsoleSender from "../Senders/ConsoleSender"; +import MeteorClientHttpSender from "../Senders/MeteorClientHttpSender"; +import MeteorClientMethodSender from "../Senders/MeteorClientMethodSender"; +import MongodbSender from "../Senders/MongodbSender"; +import NullSender from "../Senders/NullSender"; +import { SenderBase } from "../Senders/SenderBase"; +import TeeSender from "../Senders/TeeSender"; + +/* modern-syslog is not usable on the client side, because it fails to load + * its compiled binary dependency, hence the dynamic require and tslint disable. + * + * @type {NullSender|SyslogSender} + */ +const SyslogSender = Meteor.isServer + // tslint:disable-next-line + ? require("../Senders/SyslogSender").default + : NullSender; + +export { + InvalidArgumentException, + LogLevel, + + Logger, + ClientLogger, + ServerLogger, + + // ProcessorBase is the "abstract" base class from which to extend custom processors. + ProcessorBase, + BrowserProcessor, + MeteorUserProcessor, + RoutingProcessor, + + // StrategyBase is the "abstract" base class from which to extend custom strategies. + StrategyBase, + LeveledStrategy, + TrivialStrategy, + + // SenderBase is the "abstract" base class from which to extend custom senders. + SenderBase, + NullSender, + ConsoleSender, + MeteorClientHttpSender, + MeteorClientMethodSender, + MongodbSender, + SyslogSender, + TeeSender, +}; diff --git a/src/Senders/ConsoleSender.ts b/src/Senders/ConsoleSender.ts index bb584f8..19a9b4b 100644 --- a/src/Senders/ConsoleSender.ts +++ b/src/Senders/ConsoleSender.ts @@ -7,17 +7,23 @@ /* tslint:disable:no-console */ import * as LogLevel from "../LogLevel"; -import SenderBase from "./SenderBase"; +import {ISender} from "./ISender"; +import { SenderBase } from "./SenderBase"; /** * ConsoleSender sends the log events it receives to the browser console. * * @extends SenderBase */ -const ConsoleSender = class extends SenderBase { +const ConsoleSender = class extends SenderBase implements ISender { constructor() { super(); - if (!(console instanceof Console)) { + // Checkint "if (!(console instanceof Console)" compiles, but fails to + // execute during tests, which run in Node.JS in which Console is not a type + // but only the name of the console constructor. Since checking + // console.constructor.name is liable to fail in minified code, we need a + // weaker check. + if (typeof console === "undefined" || console === null || typeof console !== "object") { throw new Error("Console sender needs a console object."); } ["log", "info", "warn", "error"].forEach((method) => { diff --git a/src/Senders/MeteorClientHttpSender.ts b/src/Senders/MeteorClientHttpSender.ts index 236b7ce..992e9ab 100644 --- a/src/Senders/MeteorClientHttpSender.ts +++ b/src/Senders/MeteorClientHttpSender.ts @@ -5,7 +5,7 @@ */ import NullFn from "../NullFn"; -import SenderBase from "./SenderBase"; +import { SenderBase } from "./SenderBase"; /** * MeteorClientHttpSender send data from the client to the server over HTTP. diff --git a/src/Senders/MeteorClientMethodSender.ts b/src/Senders/MeteorClientMethodSender.ts index 8f3c0cf..3b609f1 100644 --- a/src/Senders/MeteorClientMethodSender.ts +++ b/src/Senders/MeteorClientMethodSender.ts @@ -4,8 +4,8 @@ * @fileOverview Meteor Client Method Sender class. */ -import Logger from "../Logger"; -import SenderBase from "./SenderBase"; +import { Logger } from "../Loggers/Logger"; +import { SenderBase } from "./SenderBase"; /** * MeteorClientMethodSender send data from the client to the server over DDP. diff --git a/src/Senders/MongodbSender.ts b/src/Senders/MongodbSender.ts index 124d8dd..bb0e3ec 100644 --- a/src/Senders/MongodbSender.ts +++ b/src/Senders/MongodbSender.ts @@ -3,9 +3,9 @@ */ import {Mongo} from "meteor/mongo"; import {IContext, TS_KEY} from "../IContext"; -import Logger from "../Logger"; -import ServerLogger from "../ServerLogger"; -import SenderBase from "./SenderBase"; +import { Logger } from "../Loggers/Logger"; +import { ServerSide } from "../Loggers/ServerLogger"; +import { SenderBase } from "./SenderBase"; /** * MongodbSender sends logs to the Meteor standard database. @@ -24,10 +24,10 @@ const MongodbSender = class extends SenderBase { * @param {(String|Collection)} collection * The collection or the name of the collection in which to log. */ - constructor(mongo: typeof Mongo, collection: string|Mongo.Collection = "logger") { + constructor(mongo: any, collection: string|Mongo.Collection = "logger") { super(); if (collection instanceof mongo.Collection) { - this.store = collection; + this.store = collection as Mongo.Collection; } else if (typeof collection === "string") { const collectionName = collection; this.store = new mongo.Collection(collectionName); @@ -50,7 +50,7 @@ const MongodbSender = class extends SenderBase { doc.context = defaultedContext; // doc.context.timestamp.server is known to exist from above. - Logger.prototype.stamp.call({ side: ServerLogger.side }, doc.context, "send"); + Logger.stamp(doc.context, "send", ServerSide); this.store.insert(doc); } }; diff --git a/src/Senders/NullSender.ts b/src/Senders/NullSender.ts index 6c56a66..2e5fa6a 100644 --- a/src/Senders/NullSender.ts +++ b/src/Senders/NullSender.ts @@ -2,7 +2,7 @@ * @fileOverview NulllSender class. */ -import SenderBase from "./SenderBase"; +import { SenderBase } from "./SenderBase"; /** * NullSender defines an explicit null sender. diff --git a/src/Senders/SenderBase.ts b/src/Senders/SenderBase.ts index 127b9b7..fb10f81 100644 --- a/src/Senders/SenderBase.ts +++ b/src/Senders/SenderBase.ts @@ -8,9 +8,11 @@ import {ISender} from "./ISender"; /** * SenderBase is an "abstract" class defining the sender interface. */ -const SenderBase = class implements ISender { +class SenderBase implements ISender { /** @inheritDoc */ public send(_1: LogLevel.Levels, _2: string, _3: object): void { return; } -}; +} -export default SenderBase; +export { + SenderBase, +}; diff --git a/src/Senders/SyslogSender.ts b/src/Senders/SyslogSender.ts index d921f3b..d54c5a4 100644 --- a/src/Senders/SyslogSender.ts +++ b/src/Senders/SyslogSender.ts @@ -6,10 +6,10 @@ import modernSyslog = require("modern-syslog"); import * as path from "path"; import * as util from "util"; import {IContext, TS_KEY} from "../IContext"; -import Logger from "../Logger"; +import { Logger } from "../Loggers/Logger"; import * as LogLevel from "../LogLevel"; -import ServerLogger from "../ServerLogger"; -import SenderBase from "./SenderBase"; +import { ServerLogger } from "../Loggers/ServerLogger"; +import { SenderBase } from "./SenderBase"; type Serializer = (doc: object) => string; @@ -106,7 +106,7 @@ const SyslogSender = class extends SenderBase { } // doc.context.timestamp.server is known to exist from above. - Logger.prototype.stamp.call({ side: ServerLogger.side }, doc.context, "send"); + Logger.stamp(doc.context, "send", ServerLogger.side); this.syslog.log(level, this.serialize(doc)); } diff --git a/src/Senders/TeeSender.ts b/src/Senders/TeeSender.ts index ad3c4bd..9110082 100644 --- a/src/Senders/TeeSender.ts +++ b/src/Senders/TeeSender.ts @@ -3,7 +3,7 @@ */ import {ISender} from "./ISender"; -import SenderBase from "./SenderBase"; +import { SenderBase } from "./SenderBase"; /** * Like a UNIX tee(1), the TeeSender sends its input to multiple outputs. diff --git a/src/Strategies/IStrategy.ts b/src/Strategies/IStrategy.ts index 69227c5..5e3d98b 100644 --- a/src/Strategies/IStrategy.ts +++ b/src/Strategies/IStrategy.ts @@ -1,4 +1,4 @@ -import {ILogger} from "../ILogger"; +import {ILogger} from "../Loggers/ILogger"; import * as LogLevel from "../LogLevel"; import {ISender} from "../Senders/ISender"; diff --git a/src/Strategies/LeveledStrategy.ts b/src/Strategies/LeveledStrategy.ts index 9920168..761a036 100644 --- a/src/Strategies/LeveledStrategy.ts +++ b/src/Strategies/LeveledStrategy.ts @@ -2,12 +2,12 @@ * @fileOverview Level-based Strategy. */ -import {ILogger} from "../ILogger"; +import {ILogger} from "../Loggers/ILogger"; import * as LogLevel from "../LogLevel"; import NullFn from "../NullFn"; import {ISender} from "../Senders/ISender"; import NullSender from "../Senders/NullSender"; -import SenderBase from "../Senders/SenderBase"; +import { SenderBase } from "../Senders/SenderBase"; import StrategyBase from "./StrategyBase"; /** diff --git a/src/Strategies/StrategyBase.ts b/src/Strategies/StrategyBase.ts index e4df70a..473f71a 100644 --- a/src/Strategies/StrategyBase.ts +++ b/src/Strategies/StrategyBase.ts @@ -2,7 +2,7 @@ * @fileOverview Base Strategy. */ -import {ILogger} from "../ILogger"; +import {ILogger} from "../Loggers/ILogger"; import * as LogLevel from "../LogLevel"; import {ISender} from "../Senders/ISender"; import NullSender from "../Senders/NullSender"; diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 546097a..0000000 --- a/src/index.ts +++ /dev/null @@ -1,63 +0,0 @@ -import InvalidArgumentException from "./InvalidArgumentException"; -import * as LogLevel from "./LogLevel"; - -import ClientLogger from "./ClientLogger"; -import Logger from "./Logger"; -import ServerLogger from "./ServerLogger"; - -import { BrowserProcessor } from "./Processors/BrowserProcessor"; -import MeteorUserProcessor from "./Processors/MeteorUserProcessor"; -import ProcessorBase from "./Processors/ProcessorBase"; -import RoutingProcessor from "./Processors/RoutingProcessor"; - -import LeveledStrategy from "./Strategies/LeveledStrategy"; -import StrategyBase from "./Strategies/StrategyBase"; -import TrivialStrategy from "./Strategies/TrivialStrategy"; - -import ConsoleSender from "./Senders/ConsoleSender"; -import MeteorClientHttpSender from "./Senders/MeteorClientHttpSender"; -import MeteorClientMethodSender from "./Senders/MeteorClientMethodSender"; -import MongodbSender from "./Senders/MongodbSender"; -import NullSender from "./Senders/NullSender"; -import SenderBase from "./Senders/SenderBase"; -import TeeSender from "./Senders/TeeSender"; - -/* modern-syslog is not usable on the client side, because it fails to load - * its compiled binary dependency, hence the dynamic require and tslint disable. - * - * @type {NullSender|SyslogSender} - */ -const SyslogSender = Meteor.isServer - // tslint:disable-next-line - ? require("./Senders/SyslogSender").default - : NullSender; - -export { - InvalidArgumentException, - LogLevel, - - Logger, - ClientLogger, - ServerLogger, - - // ProcessorBase is the "abstract" base class from which to extend custom processors. - ProcessorBase, - BrowserProcessor, - MeteorUserProcessor, - RoutingProcessor, - - // StrategyBase is the "abstract" base class from which to extend custom strategies. - StrategyBase, - LeveledStrategy, - TrivialStrategy, - - // SenderBase is the "abstract" base class from which to extend custom senders. - SenderBase, - NullSender, - ConsoleSender, - MeteorClientHttpSender, - MeteorClientMethodSender, - MongodbSender, - SyslogSender, - TeeSender, -}; diff --git a/tsconfig.json b/tsconfig.json index 3f2a7a2..f7ebedf 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,8 +4,8 @@ "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ "lib": [ - "dom", - "es2015" + "es2017", + "dom" ], // JS[X] // "allowJs": true, diff --git a/tslint.json b/tslint.json index 32fa6e5..7bc6316 100644 --- a/tslint.json +++ b/tslint.json @@ -4,6 +4,8 @@ "tslint:recommended" ], "jsRules": {}, - "rules": {}, + "rules": { + "max-classes-per-file": [true, 1, "exclude-class-expressions"] + }, "rulesDirectory": [] -} \ No newline at end of file +}