@loopback/logging
Version:
An extension exposes logging for Winston and Fluentd with LoopBack 4
75 lines (68 loc) • 1.81 kB
text/typescript
// Copyright IBM Corp. and LoopBack contributors 2019. All Rights Reserved.
// Node module: @loopback/logging
// This file is licensed under the MIT License.
// License text available at https://opensource.org/licenses/MIT
import {config, extensions, Getter, Provider} from '@loopback/core';
import {Format} from 'logform';
import {
createLogger,
format,
Logger,
LoggerOptions,
transports as commonTransports,
} from 'winston';
import * as Transport from 'winston-transport';
/**
* Re-export logform/winston types
*/
export {
Format as WinstonFormat,
TransformableInfo as WinstonLogRecord,
} from 'logform';
export {
format,
Logger as WinstonLogger,
LoggerOptions as WinstonLoggerOptions,
transports as WinstonTransports,
} from 'winston';
/**
* An extension point for winston transports
*/
export const WINSTON_TRANSPORT = 'logging.winston.transport';
/**
* An extension point for winston formats
*/
export const WINSTON_FORMAT = 'logging.winston.format';
/**
* A provider class that creates WinstonLogger instances
*/
export class WinstonLoggerProvider implements Provider<Logger> {
constructor(
/**
* Getter for transports
*/
(WINSTON_TRANSPORT)
private transports: Getter<Transport[]>,
/**
* Getter for formats
*/
(WINSTON_FORMAT)
private formats: Getter<Format[]>,
/**
* Configuration for the logger
*/
() private options: LoggerOptions = {},
) {}
async value() {
let transports = await this.transports();
if (transports.length === 0) {
transports = [new commonTransports.Console({})];
}
const formats = await this.formats();
return createLogger({
transports,
format: format.combine(...formats),
...this.options,
});
}
}