UNPKG

azify-logger-client-v2

Version:

Azify Logger Client - Centralized logging for OpenSearch

113 lines (98 loc) 3.02 kB
const axios = require('axios') const { context, propagation, trace } = require('@opentelemetry/api') const { W3CTraceContextPropagator } = require('@opentelemetry/core') if (process.env.AZIFY_LOGGER_AUTOREG_DISABLE !== '1') { try { require('./register-otel') } catch (_) {} try { require('./register') } catch (_) {} try { require('./register-restify') } catch (_) {} } class AzifyLogger { constructor(options = {}) { this.options = { serviceName: options.serviceName || 'azipay', loggerUrl: options.loggerUrl || 'http://localhost:3000', environment: options.environment || process.env.NODE_ENV || 'development', ...options } this.propagator = new W3CTraceContextPropagator() propagation.setGlobalPropagator(this.propagator) } async log(level, message, meta = {}) { const span = trace.getSpan(context.active()) const spanContext = span?.spanContext() const logData = { level, message, meta: { ...meta, service: { name: this.options.serviceName, version: meta.service?.version || '1.0.0' }, environment: this.options.environment, timestamp: new Date().toISOString(), hostname: require('os').hostname() } } if (spanContext) { logData.meta.traceId = spanContext.traceId logData.meta.spanId = spanContext.spanId } try { const headers = {} try { propagation.inject(context.active(), headers, { set (carrier, key, value) { carrier[key] = value } }) } catch (_) {} await axios.post(`${this.options.loggerUrl}/test-log`, logData, { timeout: 5000, headers }) } catch (error) { console.error('Erro ao enviar log:', error.message) } } info(message, meta = {}) { return this.log('info', message, meta) } error(message, error = null, meta = {}) { const logMeta = { ...meta } if (error) { logMeta.error = { message: error.message, stack: error.stack, name: error.name } } return this.log('error', message, logMeta) } warn(message, meta = {}) { return this.log('warn', message, meta) } debug(message, meta = {}) { return this.log('debug', message, meta) } } function createAzifyLogger(options = {}) { return new AzifyLogger(options) } function createAzifyLoggerFromEnv() { return createAzifyLogger({ serviceName: process.env.APP_NAME || 'azipay', loggerUrl: process.env.AZIFY_LOGGER_URL || 'http://localhost:3000', environment: process.env.NODE_ENV || 'development' }) } module.exports = AzifyLogger module.exports.createAzifyLogger = createAzifyLogger module.exports.createAzifyLoggerFromEnv = createAzifyLoggerFromEnv module.exports.streams = { createBunyanStream: require('./streams/bunyan'), createPinoStream: require('./streams/pino') } module.exports.middleware = { restify: require('./middleware-restify') }