
Security News
GitHub Actions Checkout Now Blocks Risky pull_request_target Checkouts
GitHub Actions checkout now blocks risky pull_request_target checkouts by default to help prevent pwn request supply chain attacks.
@opentelemetry/sdk-logs
Advanced tools
Note: This is an experimental package under active development. New releases may include breaking changes.
OpenTelemetry logs module contains the foundation for all logs SDKs of opentelemetry-js.
Used standalone, this module provides methods for manual instrumentation of code, offering full control over recording logs for client-side JavaScript (browser) and Node.js.
It does not provide automated instrumentation of known libraries or host environment logs out-of-the-box.
npm install --save @opentelemetry/api-logs
npm install --save @opentelemetry/sdk-logs
The basic setup of the SDK can be seen as followings:
const logsAPI = require('@opentelemetry/api-logs');
const {
LoggerProvider,
SimpleLogRecordProcessor,
ConsoleLogRecordExporter,
} = require('@opentelemetry/sdk-logs');
// To start a logger, you first need to initialize the Logger provider.
// and add a processor to export log record
const loggerProvider = new LoggerProvider({
processors: [new SimpleLogRecordProcessor(new ConsoleLogRecordExporter())]
});
// To create a log record, you first need to get a Logger instance
const logger = loggerProvider.getLogger('default');
// Reuse loggers where possible. getLogger() may be expensive, especially when
// scopeAttributes are provided, so avoid calling it on hot paths.
// You can also use global singleton
logsAPI.logs.setGlobalLoggerProvider(loggerProvider);
const logger = logsAPI.logs.getLogger('default');
// emit a log record
logger.emit({
severityNumber: logsAPI.SeverityNumber.INFO,
severityText: 'INFO',
body: 'this is a log record body',
attributes: { 'log.type': 'LogRecord' },
});
Logs configuration is a merge of both the user supplied configuration and the default configuration as specified in config.ts
The SDK supports advanced logger configuration through the LoggerConfigurator API, which allows you to:
Filter logs based on their severity level. Logs with severity below the configured minimum will be dropped before reaching the processor/exporter.
const { LoggerProvider, createLoggerConfigurator } = require('@opentelemetry/sdk-logs');
const { SeverityNumber } = require('@opentelemetry/api-logs');
const loggerProvider = new LoggerProvider({
loggerConfigurator: createLoggerConfigurator([
{
pattern: '*', // Match all loggers
config: {
minimumSeverity: SeverityNumber.WARN // Only WARN, ERROR, and FATAL logs
}
}
]),
processors: [new SimpleLogRecordProcessor(exporter)]
});
Behavior:
severityNumber >= minimumSeverity are exportedseverityNumber = UNSPECIFIED (0) or undefined always bypass the filterUNSPECIFIED (no filtering)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.
const loggerProvider = new LoggerProvider({
loggerConfigurator: createLoggerConfigurator([
{
pattern: '*',
config: {
traceBased: true // Drop logs from unsampled traces
}
}
]),
processors: [new SimpleLogRecordProcessor(exporter)]
});
Behavior:
false (no trace-based filtering)Both filters can be combined. A log must pass both filters to be exported.
const loggerProvider = new LoggerProvider({
loggerConfigurator: createLoggerConfigurator([
{
pattern: '*',
config: {
minimumSeverity: SeverityNumber.WARN, // Filter by severity
traceBased: true // AND filter by trace sampling
}
}
]),
processors: [new SimpleLogRecordProcessor(exporter)]
});
Use pattern matching to configure different loggers differently. Patterns are matched in order, and the first match is used.
const loggerProvider = new LoggerProvider({
loggerConfigurator: createLoggerConfigurator([
{
pattern: 'critical-service', // Exact match
config: { minimumSeverity: SeverityNumber.ERROR }
},
{
pattern: 'debug-*', // Wildcard match
config: { minimumSeverity: SeverityNumber.DEBUG }
},
{
pattern: '*', // Default for all other loggers
config: { minimumSeverity: SeverityNumber.WARN }
}
])
});
// Different loggers get different configurations
const criticalLogger = loggerProvider.getLogger('critical-service'); // ERROR+
const debugLogger = loggerProvider.getLogger('debug-api'); // DEBUG+
const defaultLogger = loggerProvider.getLogger('my-service'); // WARN+
interface LoggerConfig {
/** Drop logs with severity below this level (default: UNSPECIFIED = no filtering) */
minimumSeverity?: SeverityNumber;
/** Drop logs from unsampled traces (default: false) */
traceBased?: boolean;
/** Disable this logger completely (default: false) */
disabled?: boolean;
}
See examples/logs
Apache 2.0 - See LICENSE for more information.
FAQs
OpenTelemetry logs SDK
The npm package @opentelemetry/sdk-logs receives a total of 31,527,463 weekly downloads. As such, @opentelemetry/sdk-logs popularity was classified as popular.
We found that @opentelemetry/sdk-logs demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 6 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
GitHub Actions checkout now blocks risky pull_request_target checkouts by default to help prevent pwn request supply chain attacks.

Product
Socket now supports Custom Roles and Repository Access Permissions so organizations can control who can access specific repositories and actions.

Product
Socket MCP now lets AI assistants review org alerts, investigate threats using the Socket threat feed, and inspect package files in addition to dependency scoring.