
Security News
rv Is a New Rust-Powered Ruby Version Manager Inspired by Python's uv
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
π A modern structured logging library with functional programming, duck-typing, and comprehensive third-party integrations
π A modern structured logging library with functional programming, duck-typing, and comprehensive third-party integrations
Strogger is a modern, developer-friendly structured logging library built with functional programming principles, dependency injection, and duck-typing for maximum flexibility and extensibility.
This library is built around the principle that all logs should be structured data. Every log entry is automatically formatted as structured JSON with a consistent schema, making logs easy to parse, search, and analyze.
npm install strogger
import { strogger } from 'strogger';
// Simple logging
strogger.info('Application started');
strogger.debug('Processing request', { requestId: '123' });
strogger.warn('Deprecated feature used');
strogger.error('Something went wrong', { userId: '456' }, new Error('Database connection failed'));
import {
createLogger,
createConsoleTransport,
createJsonFormatter,
getEnvironment,
LogLevel
} from 'strogger';
// Get environment configuration
const env = getEnvironment();
// Create dependencies
const formatter = createJsonFormatter();
const transport = createConsoleTransport({
formatter,
level: LogLevel.DEBUG
});
// Create logger with dependency injection
const logger = createLogger({
config: {
serviceName: 'my-service',
stage: 'dev'
},
transports: [transport],
formatter,
env,
});
// Use the logger
logger.info('Application started with functional approach');
Method | Install Command | Import Statement | Best For |
---|---|---|---|
NPM | npm install strogger | import { strogger } from 'strogger' | Production projects |
Yarn | yarn add strogger | import { strogger } from 'strogger' | Yarn-based projects |
PNPM | pnpm add strogger | import { strogger } from 'strogger' | PNPM-based projects |
Strogger provides both conventional and branded function names:
// Conventional approach (recommended for most users)
import { createLogger, createConsoleTransport } from 'strogger';
// Branded approach (for brand consistency)
import { createStrogger, createStroggerConsoleTransport } from 'strogger';
// Both work identically:
const logger = createLogger({...});
const strogger = createStrogger({...});
// Logger creation
createLogger(config)
createStrogger(config)
// Transport creation
createConsoleTransport(options)
createStroggerConsoleTransport(options)
createCloudWatchTransport(options)
createDataDogTransport(options)
createSplunkTransport(options)
createElasticsearchTransport(options)
createNewRelicTransport(options)
createFileTransport(options)
// Formatter creation
createJsonFormatter(options)
// Environment utilities
getEnvironment()
getEnvironmentVariables()
import { LogLevel } from 'strogger';
// Available levels
LogLevel.DEBUG // 0
LogLevel.INFO // 1
LogLevel.WARN // 2
LogLevel.ERROR // 3
LogLevel.FATAL // 4
import { createConsoleTransport, createJsonFormatter } from 'strogger';
const formatter = createJsonFormatter();
const transport = createConsoleTransport({
formatter,
level: LogLevel.DEBUG,
useColors: true
});
import { createCloudWatchTransport, createJsonFormatter } from 'strogger';
const formatter = createJsonFormatter();
const transport = createCloudWatchTransport({
formatter,
logGroupName: '/aws/lambda/my-function',
logStreamName: 'production',
region: 'us-east-1'
});
import { createDataDogTransport, createJsonFormatter } from 'strogger';
const formatter = createJsonFormatter();
const transport = createDataDogTransport({
formatter,
apiKey: process.env.DATADOG_API_KEY,
service: 'my-service',
source: 'nodejs'
});
import { strogger } from 'strogger';
// Function lifecycle logging
strogger.logFunctionStart('processOrder', { orderId: 'order-123' });
// ... function logic ...
strogger.logFunctionEnd('processOrder', 150, { orderId: 'order-123' });
// Database operations
strogger.logDatabaseOperation('SELECT', 'users', { table: 'users' });
// API requests
strogger.logApiRequest('POST', '/api/orders', 201, { orderId: 'order-123' });
The logger automatically configures itself based on environment variables:
# Log level (DEBUG, INFO, WARN, ERROR, FATAL)
LOG_LEVEL=INFO
# Environment stage
STAGE=dev
# Service name
SERVICE_NAME=my-service
# Enable structured logging (default: true)
ENABLE_STRUCTURED_LOGGING=true
# Third-party integrations
DATADOG_API_KEY=your-datadog-api-key
SPLUNK_HEC_URL=https://your-splunk-instance:8088/services/collector
SPLUNK_HEC_TOKEN=your-splunk-hec-token
ELASTICSEARCH_URL=http://localhost:9200
ELASTICSEARCH_API_KEY=your-elasticsearch-api-key
NEW_RELIC_LICENSE_KEY=your-newrelic-license-key
NEW_RELIC_ACCOUNT_ID=your-newrelic-account-id
import {
createLogger,
LogLevel,
createConsoleTransport,
createJsonFormatter,
getEnvironment
} from 'strogger';
const env = getEnvironment();
const formatter = createJsonFormatter();
const transport = createConsoleTransport({
formatter,
useColors: false
});
const customLogger = createLogger({
config: {
level: LogLevel.DEBUG,
serviceName: 'my-service',
stage: 'production',
enableStructuredLogging: true
},
transports: [transport],
formatter,
env
});
Strogger provides built-in support for popular logging and monitoring services:
// β
Good - Structured data
strogger.info('User login successful', {
userId: '123',
method: 'oauth',
provider: 'google'
});
// β Avoid - Unstructured strings
strogger.info('User 123 logged in via Google OAuth');
const context = {
requestId: 'req-123',
userId: 'user-456',
sessionId: 'sess-789'
};
strogger.info('Processing payment', context, {
amount: 100.50,
currency: 'USD'
});
// DEBUG - Detailed information for debugging
strogger.debug('Database query executed', { query: 'SELECT * FROM users' });
// INFO - General application flow
strogger.info('User registration completed', { userId: '123' });
// WARN - Potentially harmful situations
strogger.warn('Deprecated API endpoint called', { endpoint: '/api/v1/users' });
// ERROR - Error events that might still allow the application to continue
strogger.error('Database connection failed', { retryCount: 3 });
// FATAL - Very severe error events that will presumably lead to application failure
strogger.fatal('Application cannot start due to missing configuration');
try {
const result = await processPayment(paymentData);
strogger.info('Payment processed successfully', {
paymentId: result.id,
amount: paymentData.amount
});
} catch (error) {
strogger.error('Payment processing failed', {
paymentId: paymentData.id,
error: error.message
}, error);
}
We welcome contributions! Please see our Contributing Guide for details.
# Clone the repository
git clone https://github.com/TheLeePriest/strogger.git
cd strogger
# Install dependencies
npm install
# Run tests
npm test
# Run linting
npm run lint
# Build the project
npm run build
This project is licensed under the MIT License - see the LICENSE file for details.
Made with β€οΈ by the Strogger Team
Strogger supports several environment variables for configuration. All are optionalβsensible defaults are provided for a smooth developer experience.
Variable | Default | Description |
---|---|---|
LOG_LEVEL | DEBUG (dev/test), INFO (prod) | Minimum log level (DEBUG , INFO , WARN , ERROR , FATAL ) |
STAGE | dev | Environment stage (dev , prod , test ) |
SERVICE_NAME | (none) | Name of the service/application |
ENABLE_STRUCTURED_LOGGING | true | Output logs as structured JSON (true /false ) |
You do not need to set any environment variables to use strogger. Defaults are chosen for a smooth developer experience.
You can set environment variables in your shell or .env
file:
export LOG_LEVEL=INFO
export STAGE=prod
export SERVICE_NAME=my-service
export ENABLE_STRUCTURED_LOGGING=true
If you do not set any variables, strogger will use the defaults above.
[2.0.3] - 2025-07-01 (PATCH RELEASE)
Thanks to Lee Priest for contributing to this release!
FAQs
π A modern structured logging library with functional programming, duck-typing, and comprehensive third-party integrations
The npm package strogger receives a total of 36 weekly downloads. As such, strogger popularity was classified as not popular.
We found that strogger demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer 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
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last weekβs supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.
Security News
AGENTS.md is a fast-growing open format giving AI coding agents a shared, predictable way to understand project setup, style, and workflows.