Skip to content

Commit cfd6b7f

Browse files
committed
Update README.md
1 parent ff06c8a commit cfd6b7f

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed

experimental/packages/sdk-logs/README.md

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,126 @@ logger.emit({
5757
Logs configuration is a merge of both the user supplied configuration and the default
5858
configuration 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

62182
See [examples/logs](https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/examples/logs)

0 commit comments

Comments
 (0)