1717import { diagLogLevelFromString , getStringFromEnv } from '@opentelemetry/core' ;
1818import {
1919 AttributeLimits ,
20- ConfigAttributes ,
21- LoggerProvider ,
2220 MeterProvider ,
2321 Propagator ,
2422 ConfigurationModel ,
@@ -41,6 +39,12 @@ import {
4139 SpanProcessor ,
4240 TracerProvider ,
4341} from './models/tracerProviderModel' ;
42+ import {
43+ LoggerProvider ,
44+ LogRecordExporter ,
45+ LogRecordProcessor ,
46+ } from './models/loggerProviderModel' ;
47+ import { AttributeNameValue } from './models/resourceModel' ;
4448
4549export class FileConfigProvider implements ConfigProvider {
4650 private _config : ConfigurationModel ;
@@ -71,7 +75,7 @@ export function hasValidConfigFile(): boolean {
7175 return false ;
7276}
7377
74- function parseConfigFile ( config : ConfigurationModel ) {
78+ export function parseConfigFile ( config : ConfigurationModel ) {
7579 const supportedFileVersions = [ '1.0-rc.1' , '1.0-rc.2' ] ;
7680 const configFile = getStringFromEnv ( 'OTEL_EXPERIMENTAL_CONFIG_FILE' ) || '' ;
7781 const file = fs . readFileSync ( configFile , 'utf8' ) ;
@@ -125,9 +129,9 @@ function parseConfigFile(config: ConfigurationModel) {
125129 }
126130}
127131
128- function setResourceAttributes (
132+ export function setResourceAttributes (
129133 config : ConfigurationModel ,
130- attributes : ConfigAttributes [ ]
134+ attributes : AttributeNameValue [ ]
131135) {
132136 if ( attributes ) {
133137 if ( config . resource == null ) {
@@ -169,7 +173,7 @@ function setResourceAttributes(
169173 }
170174}
171175
172- function setAttributeLimits (
176+ export function setAttributeLimits (
173177 config : ConfigurationModel ,
174178 attrLimits : AttributeLimits
175179) {
@@ -194,7 +198,7 @@ function setAttributeLimits(
194198 }
195199}
196200
197- function setPropagator (
201+ export function setPropagator (
198202 config : ConfigurationModel ,
199203 propagator : Propagator
200204) : void {
@@ -254,9 +258,18 @@ function getConfigHeaders(
254258 return null ;
255259}
256260
257- function parseConfigExporter ( exporter : SpanExporter ) : SpanExporter {
261+ enum ProviderType {
262+ TRACER = 0 ,
263+ METER = 1 ,
264+ LOGGER = 2 ,
265+ }
266+
267+ function parseConfigExporter (
268+ exporter : SpanExporter | LogRecordExporter ,
269+ providerType : ProviderType
270+ ) : SpanExporter | LogRecordExporter {
258271 const exporterType = Object . keys ( exporter ) [ 0 ] ;
259- let parsedExporter : SpanExporter = { } ;
272+ let parsedExporter : SpanExporter | LogRecordExporter = { } ;
260273 let e ;
261274 let certFile ;
262275 let clientCertFile ;
@@ -265,15 +278,26 @@ function parseConfigExporter(exporter: SpanExporter): SpanExporter {
265278 let headers ;
266279 let headersList ;
267280 let insecure ;
281+ let endpoint ;
282+
283+ switch ( providerType ) {
284+ case ProviderType . TRACER :
285+ endpoint = 'http://localhost:4318/v1/traces' ;
286+ parsedExporter = parsedExporter as SpanExporter ;
287+ break ;
288+ case ProviderType . LOGGER :
289+ endpoint = 'http://localhost:4318/v1/logs' ;
290+ parsedExporter = parsedExporter as LogRecordExporter ;
291+ break ;
292+ }
293+
268294 switch ( exporterType ) {
269295 case 'otlp_http' :
270296 e = exporter [ 'otlp_http' ] ;
271297 if ( e ) {
272298 parsedExporter = {
273299 otlp_http : {
274- endpoint :
275- getStringFromConfigFile ( e [ 'endpoint' ] ) ??
276- 'http://localhost:4318/v1/traces' ,
300+ endpoint : getStringFromConfigFile ( e [ 'endpoint' ] ) ?? endpoint ,
277301 timeout : getNumberFromConfigFile ( e [ 'timeout' ] ) ?? 10000 ,
278302 encoding :
279303 getStringFromConfigFile ( e [ 'encoding' ] ) === 'json'
@@ -370,7 +394,7 @@ function parseConfigExporter(exporter: SpanExporter): SpanExporter {
370394 break ;
371395
372396 case 'zipkin' :
373- e = exporter [ 'zipkin' ] ;
397+ e = ( exporter as SpanExporter ) [ 'zipkin' ] ;
374398 if ( e ) {
375399 parsedExporter = {
376400 zipkin : {
@@ -387,7 +411,7 @@ function parseConfigExporter(exporter: SpanExporter): SpanExporter {
387411 return parsedExporter ;
388412}
389413
390- function setTracerProvider (
414+ export function setTracerProvider (
391415 config : ConfigurationModel ,
392416 tracerProvider : TracerProvider
393417) : void {
@@ -460,7 +484,10 @@ function setTracerProvider(
460484 if ( processorType === 'batch' ) {
461485 const element = tracerProvider [ 'processors' ] [ i ] [ 'batch' ] ;
462486 if ( element ) {
463- const parsedExporter = parseConfigExporter ( element [ 'exporter' ] ) ;
487+ const parsedExporter = parseConfigExporter (
488+ element [ 'exporter' ] ,
489+ ProviderType . TRACER
490+ ) ;
464491 const batchConfig : SpanProcessor = {
465492 batch : {
466493 schedule_delay :
@@ -472,7 +499,7 @@ function setTracerProvider(
472499 max_export_batch_size :
473500 getNumberFromConfigFile ( element [ 'max_export_batch_size' ] ) ??
474501 512 ,
475- exporter : parsedExporter ,
502+ exporter : parsedExporter as SpanExporter ,
476503 } ,
477504 } ;
478505
@@ -481,10 +508,13 @@ function setTracerProvider(
481508 } else if ( processorType === 'simple' ) {
482509 const element = tracerProvider [ 'processors' ] [ i ] [ 'simple' ] ;
483510 if ( element ) {
484- const parsedExporter = parseConfigExporter ( element [ 'exporter' ] ) ;
511+ const parsedExporter = parseConfigExporter (
512+ element [ 'exporter' ] ,
513+ ProviderType . TRACER
514+ ) ;
485515 const simpleConfig : SpanProcessor = {
486516 simple : {
487- exporter : parsedExporter ,
517+ exporter : parsedExporter as SpanExporter ,
488518 } ,
489519 } ;
490520
@@ -496,7 +526,7 @@ function setTracerProvider(
496526 }
497527}
498528
499- function setMeterProvider (
529+ export function setMeterProvider (
500530 config : ConfigurationModel ,
501531 meterProvider : MeterProvider
502532) : void {
@@ -518,14 +548,15 @@ function setMeterProvider(
518548 }
519549}
520550
521- function setLoggerProvider (
551+ export function setLoggerProvider (
522552 config : ConfigurationModel ,
523553 loggerProvider : LoggerProvider
524554) : void {
525555 if ( loggerProvider ) {
526556 if ( config . logger_provider == null ) {
527- config . logger_provider = { } ;
557+ config . logger_provider = { processors : [ ] } ;
528558 }
559+ // Limits
529560 if ( loggerProvider [ 'limits' ] ) {
530561 const attributeValueLengthLimit = getNumberFromConfigFile (
531562 loggerProvider [ 'limits' ] [ 'attribute_value_length_limit' ]
@@ -537,17 +568,124 @@ function setLoggerProvider(
537568 if ( config . logger_provider . limits == null ) {
538569 config . logger_provider . limits = { attribute_count_limit : 128 } ;
539570 }
540-
541571 if ( attributeValueLengthLimit ) {
542572 config . logger_provider . limits . attribute_value_length_limit =
543573 attributeValueLengthLimit ;
544574 }
545-
546575 if ( attributeCountLimit ) {
547576 config . logger_provider . limits . attribute_count_limit =
548577 attributeCountLimit ;
549578 }
550579 }
551580 }
581+
582+ // Processors
583+ if ( loggerProvider [ 'processors' ] ) {
584+ if ( loggerProvider [ 'processors' ] . length > 0 ) {
585+ if ( config . logger_provider == null ) {
586+ config . logger_provider = { processors : [ ] } ;
587+ }
588+ config . logger_provider . processors = [ ] ;
589+ for ( let i = 0 ; i < loggerProvider [ 'processors' ] . length ; i ++ ) {
590+ const processorType = Object . keys ( loggerProvider [ 'processors' ] [ i ] ) [ 0 ] ;
591+ if ( processorType === 'batch' ) {
592+ const element = loggerProvider [ 'processors' ] [ i ] [ 'batch' ] ;
593+ if ( element ) {
594+ const parsedExporter = parseConfigExporter (
595+ element [ 'exporter' ] ,
596+ ProviderType . LOGGER
597+ ) ;
598+ const batchConfig : LogRecordProcessor = {
599+ batch : {
600+ schedule_delay :
601+ getNumberFromConfigFile ( element [ 'schedule_delay' ] ) ?? 1000 ,
602+ export_timeout :
603+ getNumberFromConfigFile ( element [ 'export_timeout' ] ) ?? 30000 ,
604+ max_queue_size :
605+ getNumberFromConfigFile ( element [ 'max_queue_size' ] ) ?? 2048 ,
606+ max_export_batch_size :
607+ getNumberFromConfigFile ( element [ 'max_export_batch_size' ] ) ??
608+ 512 ,
609+ exporter : parsedExporter as LogRecordExporter ,
610+ } ,
611+ } ;
612+
613+ config . logger_provider . processors . push ( batchConfig ) ;
614+ }
615+ } else if ( processorType === 'simple' ) {
616+ const element = loggerProvider [ 'processors' ] [ i ] [ 'simple' ] ;
617+ if ( element ) {
618+ const parsedExporter = parseConfigExporter (
619+ element [ 'exporter' ] ,
620+ ProviderType . LOGGER
621+ ) ;
622+ const simpleConfig : LogRecordProcessor = {
623+ simple : {
624+ exporter : parsedExporter ,
625+ } ,
626+ } ;
627+
628+ config . logger_provider . processors . push ( simpleConfig ) ;
629+ }
630+ }
631+ }
632+ }
633+ }
634+
635+ // logger_configurator/development
636+ if ( loggerProvider [ 'logger_configurator/development' ] ) {
637+ const defaultConfigDisabled = getBooleanFromConfigFile (
638+ loggerProvider [ 'logger_configurator/development' ] [ 'default_config' ] ?. [
639+ 'disabled'
640+ ]
641+ ) ;
642+ if ( defaultConfigDisabled || defaultConfigDisabled === false ) {
643+ if ( config . logger_provider == null ) {
644+ config . logger_provider = { processors : [ ] } ;
645+ }
646+ config . logger_provider [ 'logger_configurator/development' ] = {
647+ default_config : {
648+ disabled : defaultConfigDisabled ,
649+ } ,
650+ } ;
651+ }
652+
653+ if (
654+ loggerProvider [ 'logger_configurator/development' ] . loggers &&
655+ loggerProvider [ 'logger_configurator/development' ] . loggers . length > 0
656+ ) {
657+ const loggers = [ ] ;
658+ for (
659+ let i = 0 ;
660+ i < loggerProvider [ 'logger_configurator/development' ] . loggers . length ;
661+ i ++
662+ ) {
663+ const logger =
664+ loggerProvider [ 'logger_configurator/development' ] . loggers [ i ] ;
665+ let disabled = false ;
666+ if ( logger [ 'config' ] ) {
667+ disabled =
668+ getBooleanFromConfigFile ( logger [ 'config' ] [ 'disabled' ] ) ?? false ;
669+ }
670+ const name = getStringFromConfigFile ( logger [ 'name' ] ) ;
671+ if ( name ) {
672+ loggers . push ( {
673+ name : name ,
674+ config : {
675+ disabled : disabled ,
676+ } ,
677+ } ) ;
678+ }
679+ }
680+ if ( config . logger_provider == null ) {
681+ config . logger_provider = { processors : [ ] } ;
682+ }
683+ if ( config . logger_provider [ 'logger_configurator/development' ] == null ) {
684+ config . logger_provider [ 'logger_configurator/development' ] = { } ;
685+ }
686+ config . logger_provider [ 'logger_configurator/development' ] . loggers =
687+ loggers ;
688+ }
689+ }
552690 }
553691}
0 commit comments