@@ -6,13 +6,19 @@ import { Level } from '../logger/level'
66
77export class OpenTelemetryLogsOutputPlugin implements OutputPlugin {
88 private logger : Logger
9+ private includeFieldsAsAttributes : FieldInclusionMode
910
1011 public constructor ( loggerProvider ?: LoggerProvider ) {
1112 if ( loggerProvider ) {
1213 this . logger = loggerProvider . getLogger ( 'default' )
1314 } else {
1415 this . logger = logsAPI . getLoggerProvider ( ) . getLogger ( "default" )
1516 }
17+ this . includeFieldsAsAttributes = FieldInclusionMode . CustomFieldsOnly
18+ }
19+
20+ public setIncludeFieldsAsAttributes ( includeFieldsAsAttributes : FieldInclusionMode ) {
21+ this . includeFieldsAsAttributes = includeFieldsAsAttributes
1622 }
1723
1824 public writeRecord ( record : Record ) : void {
@@ -21,16 +27,8 @@ export class OpenTelemetryLogsOutputPlugin implements OutputPlugin {
2127 }
2228
2329 let attributes = { } as LogAttributes
24-
25- if ( record . metadata . errorName ) {
26- attributes [ "exception.type" ] = record . metadata . errorName
27- }
28- if ( record . metadata . errorMessage ) {
29- attributes [ "exception.message" ] = record . metadata . errorMessage
30- }
31- if ( record . metadata . rawStacktrace ) {
32- attributes [ "exception.stacktrace" ] = record . metadata . rawStacktrace
33- }
30+ this . populateExceptionAttributes ( record , attributes )
31+ this . populateAdditionalAttributes ( record , attributes )
3432
3533 let severityNumber = this . mapLevelToSeverityNumber ( record . metadata . level )
3634
@@ -58,4 +56,42 @@ export class OpenTelemetryLogsOutputPlugin implements OutputPlugin {
5856 }
5957 return SeverityNumber . UNSPECIFIED
6058 }
59+
60+ private populateExceptionAttributes ( record : Record , attributes : LogAttributes ) {
61+ if ( record . metadata . errorName ) {
62+ attributes [ "exception.type" ] = record . metadata . errorName
63+ }
64+ if ( record . metadata . errorMessage ) {
65+ attributes [ "exception.message" ] = record . metadata . errorMessage
66+ }
67+ if ( record . metadata . rawStacktrace ) {
68+ attributes [ "exception.stacktrace" ] = record . metadata . rawStacktrace
69+ }
70+ }
71+
72+ private populateAdditionalAttributes ( record : Record , attributes : LogAttributes ) {
73+ switch ( this . includeFieldsAsAttributes ) {
74+ case FieldInclusionMode . AllFields :
75+ for ( let key in record . payload ) {
76+ attributes [ key ] = record . payload [ key ]
77+ }
78+ break ;
79+ case FieldInclusionMode . CustomFieldsOnly :
80+ for ( let key of record . metadata . customFieldNames ) {
81+ if ( record . payload [ key ] !== undefined ) {
82+ attributes [ key ] = record . payload [ key ]
83+ }
84+ }
85+ break ;
86+ case FieldInclusionMode . None :
87+ default :
88+ return ;
89+ }
90+ }
91+ }
92+
93+ export enum FieldInclusionMode {
94+ AllFields = "all" ,
95+ CustomFieldsOnly = "custom-fields" ,
96+ None = "none"
6197}
0 commit comments