@@ -57,6 +57,126 @@ logger.emit({
5757Logs configuration is a merge of both the user supplied configuration and the default
5858configuration as specified in [ config.ts] ( ./src/config.ts )
5959
60+ ## Logger Configuration
61+
62+ The SDK supports advanced logger configuration through the ` LoggerConfigurator ` API, which allows you to:
63+
64+ - ** Filter logs by minimum severity level** - Drop logs below a configured severity threshold
65+ - ** Filter logs by trace sampling status** - Drop logs associated with unsampled traces
66+ - ** Configure per-logger patterns** - Apply different configurations to different loggers using wildcard patterns
67+
68+ ### Minimum Severity Filtering
69+
70+ Filter logs based on their severity level. Logs with severity below the configured minimum will be dropped before reaching the processor/exporter.
71+
72+ ``` js
73+ const { LoggerProvider , createLoggerConfigurator } = require (' @opentelemetry/sdk-logs' );
74+ const { SeverityNumber } = require (' @opentelemetry/api-logs' );
75+
76+ const loggerProvider = new LoggerProvider ({
77+ loggerConfigurator: createLoggerConfigurator ([
78+ {
79+ pattern: ' *' , // Match all loggers
80+ config: {
81+ minimumSeverity: SeverityNumber .WARN // Only WARN, ERROR, and FATAL logs
82+ }
83+ }
84+ ]),
85+ processors: [new SimpleLogRecordProcessor (exporter)]
86+ });
87+ ```
88+
89+ ** Behavior:**
90+ - Logs with ` severityNumber >= minimumSeverity ` are exported
91+ - Logs with ` severityNumber = UNSPECIFIED ` (0) or undefined always bypass the filter
92+ - Default minimum severity is ` UNSPECIFIED ` (no filtering)
93+
94+ ### Trace-Based Filtering
95+
96+ Filter logs based on their associated trace's sampling status. Logs from unsampled traces can be dropped to reduce volume while keeping sampled trace logs.
97+
98+ ``` js
99+ const loggerProvider = new LoggerProvider ({
100+ loggerConfigurator: createLoggerConfigurator ([
101+ {
102+ pattern: ' *' ,
103+ config: {
104+ traceBased: true // Drop logs from unsampled traces
105+ }
106+ }
107+ ]),
108+ processors: [new SimpleLogRecordProcessor (exporter)]
109+ });
110+ ```
111+
112+ ** Behavior:**
113+ - Logs associated with ** sampled traces** (TraceFlags.SAMPLED set) are exported
114+ - Logs associated with ** unsampled traces** (TraceFlags.SAMPLED not set) are dropped
115+ - Logs ** without trace context** bypass the filter and are exported
116+ - Default is ` false ` (no trace-based filtering)
117+
118+ ### Combined Filtering
119+
120+ Both filters can be combined. A log must pass ** both** filters to be exported.
121+
122+ ``` js
123+ const loggerProvider = new LoggerProvider ({
124+ loggerConfigurator: createLoggerConfigurator ([
125+ {
126+ pattern: ' *' ,
127+ config: {
128+ minimumSeverity: SeverityNumber .WARN , // Filter by severity
129+ traceBased: true // AND filter by trace sampling
130+ }
131+ }
132+ ]),
133+ processors: [new SimpleLogRecordProcessor (exporter)]
134+ });
135+ ```
136+
137+ ### Per-Logger Configuration
138+
139+ Use pattern matching to configure different loggers differently. Patterns are matched in order, and the first match is used.
140+
141+ ``` js
142+ const loggerProvider = new LoggerProvider ({
143+ loggerConfigurator: createLoggerConfigurator ([
144+ {
145+ pattern: ' critical-service' , // Exact match
146+ config: { minimumSeverity: SeverityNumber .ERROR }
147+ },
148+ {
149+ pattern: ' debug-*' , // Wildcard match
150+ config: { minimumSeverity: SeverityNumber .DEBUG }
151+ },
152+ {
153+ pattern: ' *' , // Default for all other loggers
154+ config: { minimumSeverity: SeverityNumber .WARN }
155+ }
156+ ])
157+ });
158+
159+ // Different loggers get different configurations
160+ const criticalLogger = loggerProvider .getLogger (' critical-service' ); // ERROR+
161+ const debugLogger = loggerProvider .getLogger (' debug-api' ); // DEBUG+
162+ const defaultLogger = loggerProvider .getLogger (' my-service' ); // WARN+
163+ ```
164+
165+ ### Configuration Options
166+
167+ ``` typescript
168+ interface LoggerConfig {
169+ /** Drop logs with severity below this level (default: UNSPECIFIED = no filtering) */
170+ minimumSeverity? : SeverityNumber ;
171+
172+ /** Drop logs from unsampled traces (default: false) */
173+ traceBased? : boolean ;
174+
175+ /** Disable this logger completely (default: false) */
176+ disabled? : boolean ;
177+ }
178+ ```
179+
60180## Example
61181
62182See [ examples/logs] ( https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/examples/logs )
0 commit comments