azify-logger-client-v2
Version:
Azify Logger Client - Centralized logging for OpenSearch
113 lines (98 loc) • 3.02 kB
JavaScript
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')
}