Logger.ts
1 import pino, { Logger, LoggerOptions, TransportSingleOptions } from 'pino' 2 import { ConfigManager } from '../config/ConfigManager' 3 import logSymbols from 'log-symbols' 4 import { SupportedLoggerType } from './SupportedLoggerType' 5 6 const defaultOptions: LoggerOptions = { 7 name: 'L2TS Proxy', 8 level: 'info' 9 } 10 11 const prettyOptions: TransportSingleOptions = { 12 target: 'pino-pretty', 13 options: { 14 colorize: true 15 } 16 } 17 18 export function createLogger( type: string ): Logger { 19 20 switch ( type ) { 21 case SupportedLoggerType.OpenTelemetry: 22 console.log( logSymbols.info, 'Proxy Server: sending', ConfigManager.logger.getOTLPProtocol(),'logs to OTEL collector', process.env.OTEL_EXPORTER_OTLP_ENDPOINT ) 23 24 // TODO : figure out how to pass these directly instead of using environment variables 25 process.env.OTEL_EXPORTER_OTLP_PROTOCOL = ConfigManager.logger.getOTLPProtocol() 26 process.env.OTEL_EXPORTER_OTLP_ENDPOINT = ConfigManager.logger.getOTLPEndpoint() 27 process.env.OTEL_SERVICE_NAME = ConfigManager.logger.getServiceName() ?? defaultOptions.name 28 process.env.OTEL_EXPORTER_OTLP_HEADERS = ConfigManager.logger.getOTLPHeaders() 29 30 return pino( { 31 name: ConfigManager.logger.getServiceName() ?? defaultOptions.name, 32 level: ConfigManager.logger.getLogLevel() ?? defaultOptions.level, 33 transport: { 34 targets: [ 35 prettyOptions, 36 { 37 target: 'pino-opentelemetry-transport', 38 options: {} 39 } 40 ] 41 }, 42 serializers: { 43 error: pino.stdSerializers.err, 44 } 45 } ) 46 47 case SupportedLoggerType.Pretty: 48 return pino( { 49 ...defaultOptions, 50 transport: prettyOptions, 51 level: ConfigManager.logger.getLogLevel() ?? defaultOptions.level, 52 serializers: { 53 error: pino.stdSerializers.err, 54 } 55 } ) 56 57 case SupportedLoggerType.Console: 58 default: 59 /* 60 Fallback method in case no types can be associated with any log transports. 61 */ 62 return pino( { 63 ...defaultOptions, 64 level: ConfigManager.logger.getLogLevel() ?? defaultOptions.level, 65 serializers: { 66 error: pino.stdSerializers.err, 67 } 68 } ) 69 } 70 } 71 72 export const ServerLog: Logger = createLogger( ConfigManager.logger.getLoggerType() ?? SupportedLoggerType.Pretty ) 73 74 ConfigManager.logger.subscribe( () => { 75 ServerLog.level = ConfigManager.logger.getLogLevel() ?? defaultOptions.level 76 } )