LoggingService.ts 881 B

12345678910111213141516171819202122232425262728293031323334
  1. import winston, { Logger, LoggerOptions } from 'winston'
  2. import escFormat from '@elastic/ecs-winston-format'
  3. import { ReadonlyConfig } from '../../types'
  4. export class LoggingService {
  5. private loggerOptions: LoggerOptions
  6. public constructor(config: ReadonlyConfig) {
  7. const transports: winston.LoggerOptions['transports'] = [
  8. new winston.transports.File({
  9. filename: `${config.directories.logs}/logs.json`,
  10. level: config.log?.file || 'debug',
  11. }),
  12. ]
  13. if (config.log?.console) {
  14. transports.push(
  15. new winston.transports.Console({
  16. level: config.log.console,
  17. })
  18. )
  19. }
  20. this.loggerOptions = {
  21. format: escFormat(),
  22. transports,
  23. }
  24. }
  25. public createLogger(label: string): Logger {
  26. return winston.createLogger({
  27. ...this.loggerOptions,
  28. defaultMeta: { label },
  29. })
  30. }
  31. }