UNPKG

@athenna/logger

Version:

The Athenna logging solution. Log in stdout, files and buckets.

52 lines (51 loc) 1.61 kB
/** * @athenna/logger * * (c) João Lenon <lenon@athenna.io> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ import { Driver } from '#src/drivers/Driver'; import { context } from '@opentelemetry/api'; import { logs, SeverityNumber } from '@opentelemetry/api-logs'; export class OtelDriver extends Driver { transport(level, message) { if (!this.couldBeTransported(level)) { return; } const logger = logs.getLogger('@athenna/logger'); logger.emit({ eventName: 'athenna.log', severityNumber: this.getSeverityNumber(level), severityText: level.toUpperCase(), body: this.getBody(level, message), attributes: { 'athenna.log.level': level, 'athenna.log.stream': this.getStreamTypeFor(level) }, context: context.active() }); } getBody(level, message) { const formatted = this.format(level, message, true); try { return JSON.parse(formatted); } catch { return formatted; } } getSeverityNumber(level) { const levels = { trace: SeverityNumber.TRACE, debug: SeverityNumber.DEBUG, info: SeverityNumber.INFO, success: SeverityNumber.INFO2, warn: SeverityNumber.WARN, error: SeverityNumber.ERROR, fatal: SeverityNumber.FATAL }; return levels[level] || SeverityNumber.INFO; } }