11import { Attributes , diag } from '@opentelemetry/api' ;
2- import { getEnvWithoutDefaults } from '@opentelemetry/core' ;
32import {
4- BatchLogRecordProcessor ,
5- LoggerProvider ,
6- NoopLogRecordProcessor ,
7- } from '@opentelemetry/sdk-logs' ;
8- import { Logger as OtelLogger , logs } from '@opentelemetry/api-logs' ;
3+ LogAttributes ,
4+ Logger as OtelLogger ,
5+ logs ,
6+ SeverityNumber ,
7+ } from '@opentelemetry/api-logs' ;
8+ import { getEnvWithoutDefaults } from '@opentelemetry/core' ;
99import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http' ;
1010import {
11- Resource ,
1211 detectResourcesSync ,
1312 envDetectorSync ,
1413 hostDetectorSync ,
1514 osDetectorSync ,
1615 processDetector ,
16+ Resource ,
1717} from '@opentelemetry/resources' ;
18+ import {
19+ BatchLogRecordProcessor ,
20+ LoggerProvider ,
21+ NoopLogRecordProcessor ,
22+ } from '@opentelemetry/sdk-logs' ;
1823import { SEMRESATTRS_SERVICE_NAME } from '@opentelemetry/semantic-conventions' ;
1924
25+ import { version as PKG_VERSION } from '../../package.json' ;
2026import {
2127 DEFAULT_EXPORTER_BATCH_SIZE ,
2228 DEFAULT_EXPORTER_TIMEOUT_MS ,
@@ -25,7 +31,6 @@ import {
2531 DEFAULT_SEND_INTERVAL_MS ,
2632 DEFAULT_SERVICE_NAME ,
2733} from '../constants' ;
28- import { version as PKG_VERSION } from '../../package.json' ;
2934
3035const LOG_PREFIX = `⚠️ [LOGGER]` ;
3136
@@ -41,6 +46,45 @@ export type LoggerOptions = {
4146 timeout ?: number ; // The read/write/connection timeout in milliseconds
4247} ;
4348
49+ // https://github.com/open-telemetry/opentelemetry-js-contrib/blob/afccd0d62a0ea81afb8f5609f3ee802c038d11c6/packages/winston-transport/src/utils.ts
50+ const npmLevels : Record < string , number > = {
51+ error : SeverityNumber . ERROR ,
52+ warn : SeverityNumber . WARN ,
53+ info : SeverityNumber . INFO ,
54+ http : SeverityNumber . DEBUG3 ,
55+ verbose : SeverityNumber . DEBUG2 ,
56+ debug : SeverityNumber . DEBUG ,
57+ silly : SeverityNumber . TRACE ,
58+ } ;
59+
60+ const sysLoglevels : Record < string , number > = {
61+ emerg : SeverityNumber . FATAL3 ,
62+ alert : SeverityNumber . FATAL2 ,
63+ crit : SeverityNumber . FATAL ,
64+ error : SeverityNumber . ERROR ,
65+ warning : SeverityNumber . WARN ,
66+ notice : SeverityNumber . INFO2 ,
67+ info : SeverityNumber . INFO ,
68+ debug : SeverityNumber . DEBUG ,
69+ } ;
70+
71+ const cliLevels : Record < string , number > = {
72+ error : SeverityNumber . ERROR ,
73+ warn : SeverityNumber . WARN ,
74+ help : SeverityNumber . INFO3 ,
75+ data : SeverityNumber . INFO2 ,
76+ info : SeverityNumber . INFO ,
77+ debug : SeverityNumber . DEBUG ,
78+ prompt : SeverityNumber . TRACE4 ,
79+ verbose : SeverityNumber . TRACE3 ,
80+ input : SeverityNumber . TRACE2 ,
81+ silly : SeverityNumber . TRACE ,
82+ } ;
83+
84+ function getSeverityNumber ( level : string ) : SeverityNumber | undefined {
85+ return npmLevels [ level ] ?? sysLoglevels [ level ] ?? cliLevels [ level ] ;
86+ }
87+
4488export class Logger {
4589 private readonly _url : string ;
4690
@@ -155,15 +199,25 @@ export class Logger {
155199 return this . processor . forceFlush ( ) ;
156200 }
157201
158- postMessage ( level : string , body : string , attributes : Attributes = { } ) : void {
202+ postMessage (
203+ level : string ,
204+ body : string ,
205+ meta : Record < string , any > = { } ,
206+ ) : void {
207+ const attributes : LogAttributes = { } ;
208+ for ( const key in meta ) {
209+ if ( Object . prototype . hasOwnProperty . call ( meta , key ) ) {
210+ attributes [ key ] = meta [ key ] ;
211+ }
212+ }
159213 this . logger . emit ( {
160214 // TODO: should map to otel severity number
161- severityNumber : 0 ,
215+ severityNumber : getSeverityNumber ( level ) ,
162216 // TODO: set up the mapping between different downstream log levels
163217 severityText : level ,
164218 body,
165219 attributes,
166- timestamp : this . parseTimestamp ( attributes ) ,
220+ timestamp : this . parseTimestamp ( meta ) ,
167221 } ) ;
168222 }
169223}
0 commit comments