diff --git a/packages/logger/src/SimpleLoggerFactory.test.ts b/packages/logger/src/SimpleLoggerFactory.test.ts index 779be0f..4030fae 100644 --- a/packages/logger/src/SimpleLoggerFactory.test.ts +++ b/packages/logger/src/SimpleLoggerFactory.test.ts @@ -1,15 +1,17 @@ import stdMocks from 'std-mocks' import loggerFactory from './' import { SimpleLoggerFactory } from './SimpleLoggerFactory' +import { LogLevel } from './LogLevel' describe('SimpleLoggerFactory', () => { let getLogger: typeof SimpleLoggerFactory.prototype.getLogger + let factory: SimpleLoggerFactory beforeEach(() => { - getLogger = SimpleLoggerFactory.init({ + factory = SimpleLoggerFactory.init({ logs: 'test1:verbose,-test3,t4,logtest5', }) - .getLogger + getLogger = factory.getLogger stdMocks.use() @@ -66,6 +68,20 @@ describe('SimpleLoggerFactory', () => { ]]) }) + it('can set logger level', () => { + loggerFactory.setLoggerLevel('log-level-test', LogLevel.INFO) + const logger = loggerFactory.getLogger('log-level-test') + logger.info('test1') + expect((global.console.log as any).mock.calls).toEqual([[ + 'log-level-test INFO test1', + ]]) + loggerFactory.setLoggerLevel('log-level-test', LogLevel.OFF) + logger.info('test2') + expect((global.console.log as any).mock.calls).toEqual([[ + 'log-level-test INFO test1', + ]]) + }) + describe('getCorrelationId', () => { it('returns an empty string by default', () => { expect(loggerFactory.getCorrelationId()).toBe('') diff --git a/packages/logger/src/SimpleLoggerFactory.ts b/packages/logger/src/SimpleLoggerFactory.ts index 38968d1..70321c8 100644 --- a/packages/logger/src/SimpleLoggerFactory.ts +++ b/packages/logger/src/SimpleLoggerFactory.ts @@ -10,7 +10,7 @@ import { ConsoleTransport } from './transports' // and disable all sql logs. export interface EnabledLoggers { - readonly [key: string]: LogLevel + [key: string]: LogLevel } export interface LoggerOptions { @@ -49,6 +49,14 @@ export class SimpleLoggerFactory implements LoggerFactory { return enabledLoggers[name] || this.defaultLogLevel } + setLoggerLevel(name: string, level: LogLevel) { + this.options.enabledLoggers[name] = level + if (this.loggers[name]) { + const logger = this.loggers[name] as SimpleLogger + logger.config.transports.forEach(t => t.level = level) + } + } + getLogger = (name: string): Logger => { if (this.loggers[name]) { return this.loggers[name] diff --git a/packages/logger/src/logger/SimpleLogger.ts b/packages/logger/src/logger/SimpleLogger.ts index d0fd556..dc5feec 100644 --- a/packages/logger/src/logger/SimpleLogger.ts +++ b/packages/logger/src/logger/SimpleLogger.ts @@ -11,7 +11,7 @@ interface LoggerParams { } export class SimpleLogger implements Logger { - constructor(protected readonly config: LoggerParams) {} + constructor(readonly config: LoggerParams) {} protected log(level: LogLevel, message: string, params: unknown[]) { const initialMessage: Message = { diff --git a/packages/logger/src/transports/ConsoleTransport.ts b/packages/logger/src/transports/ConsoleTransport.ts index 3077e04..77f495e 100644 --- a/packages/logger/src/transports/ConsoleTransport.ts +++ b/packages/logger/src/transports/ConsoleTransport.ts @@ -3,7 +3,7 @@ import { Message } from '../Message' import { LogLevel } from '../LogLevel' export class ConsoleTransport implements Transport { - constructor(readonly level: LogLevel) {} + constructor(public level: LogLevel) {} write(entry: Message) { if (entry.level <= this.level) { diff --git a/packages/logger/src/transports/Transport.ts b/packages/logger/src/transports/Transport.ts index 2b0fc62..6de5b24 100644 --- a/packages/logger/src/transports/Transport.ts +++ b/packages/logger/src/transports/Transport.ts @@ -2,6 +2,6 @@ import { Message } from '../Message' import { LogLevel } from '../LogLevel' export interface Transport { - readonly level: LogLevel + level: LogLevel write(message: Message): void }