
Security News
The Hidden Blast Radius of the Axios Compromise
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.
@context-action/logger
Advanced tools
Lightweight, configurable logging system for the Context-Action framework with comprehensive trace collection and cross-platform environment support.
npm install @context-action/logger
import { createLogger, LogLevel } from '@context-action/logger';
// Create logger with environment-based configuration
const logger = createLogger();
// Or with explicit level
const debugLogger = createLogger(LogLevel.DEBUG);
// Use structured logging
logger.trace('Pipeline execution started', { action: 'updateUser', payload });
logger.debug('Handler registration', { handlerId: 'user-validator', priority: 10 });
logger.info('Store updated successfully', { storeName: 'user', newValue });
logger.warn('Performance threshold exceeded', { executionTime: 1500 });
logger.error('Action pipeline failed', error);
// Runtime level adjustment
logger.setLevel(LogLevel.WARN);
import {
initializeFrameworkTracing,
TraceCategory,
getFrameworkTraceAnalysis,
FrameworkLoggers
} from '@context-action/logger';
// Initialize comprehensive tracing
initializeFrameworkTracing({
maxEntries: 50000,
enablePerformanceMonitoring: true,
performanceThreshold: 100, // 100ms warning threshold
categories: [
TraceCategory.ACTION_PIPELINE,
TraceCategory.STORE_OPERATION,
TraceCategory.PERFORMANCE
]
});
// Create specialized loggers
const actionLogger = FrameworkLoggers.createActionLogger('UserActions');
const storeLogger = FrameworkLoggers.createStoreLogger('UserStore');
const performanceLogger = FrameworkLoggers.createPerformanceLogger();
// Analyze framework performance
const analysis = getFrameworkTraceAnalysis();
console.log('Framework Performance:', analysis);
import {
UniversalTraceLogger,
UniversalTraceCollector,
TraceSource,
createUniversalTraceLogger
} from '@context-action/logger';
// Create universal trace logger
const baseLogger = createLogger(LogLevel.DEBUG);
const traceCollector = new UniversalTraceCollector();
const logger = new UniversalTraceLogger(
baseLogger,
traceCollector,
'UserStore',
TraceCategory.STORE_OPERATION,
{
collectFromInfo: true, // ✅ INFO calls → internal trace
collectFromWarn: true, // ✅ WARN calls → internal trace
collectFromError: true, // ✅ ERROR calls → internal trace
collectFromDebug: false, // ❌ DEBUG calls → no internal trace
includeStackTrace: true, // Add stack trace for debugging
minTraceLevel: LogLevel.INFO
}
);
// Usage - ALL of these generate trace data!
logger.trace('Direct trace call'); // → DIRECT trace
logger.info('User updated successfully'); // → INFO log + FROM_INFO trace
logger.warn('Performance threshold hit'); // → WARN log + FROM_WARN trace
logger.error('Database connection failed'); // → ERROR log + FROM_ERROR trace
// Analyze collected traces with perfect distinction
const report = traceCollector.generateSourceReport();
console.log('Direct traces:', report.summary.directTraces); // Direct trace() calls
console.log('Internal traces:', report.summary.internalTraces); // INFO/WARN/ERROR traces
// Get traces by source type
const directTraces = traceCollector.getDirectTraces(); // Only direct trace()
const infoTraces = traceCollector.getTracesBySource(TraceSource.FROM_INFO); // Only from info()
const warnTraces = traceCollector.getTracesBySource(TraceSource.FROM_WARN); // Only from warn()
import { useComponentTracing } from '@context-action/logger';
function UserProfile() {
const trace = useComponentTracing('UserProfile');
useEffect(() => {
trace.traceMount();
return () => trace.traceUnmount();
}, []);
const handleSubmit = (data) => {
trace.traceAction('submit', { data });
// Handle submission
};
return (
<form onSubmit={handleSubmit}>
{/* Component content */}
</form>
);
}
# Log level configuration
CONTEXT_ACTION_LOG_LEVEL=DEBUG # TRACE|DEBUG|INFO|WARN|ERROR|NONE
CONTEXT_ACTION_DEBUG=true # Enables DEBUG level
CONTEXT_ACTION_TRACE=true # Enables TRACE level
CONTEXT_ACTION_LOGGER_NAME=MyApp # Custom logger name
# Auto-configuration from NODE_ENV
NODE_ENV=development # → DEBUG level
NODE_ENV=production # → ERROR level
# .env file for Vite projects
VITE_CONTEXT_ACTION_LOG_LEVEL=DEBUG
VITE_CONTEXT_ACTION_TRACE=true
import {
TraceCollector,
TraceProcessor,
FileTraceProcessor
} from '@context-action/logger';
// Custom processor for external monitoring
class MonitoringTraceProcessor implements TraceProcessor {
async process(entries: TraceEntry[]): Promise<void> {
// Send to external monitoring service
await fetch('/api/traces', {
method: 'POST',
body: JSON.stringify(entries)
});
}
}
// Initialize with custom processor
const traceCollector = new TraceCollector({
processor: new MonitoringTraceProcessor()
});
import { getFrameworkTraceAnalysis, TraceCategory } from '@context-action/logger';
// Get comprehensive analysis
const analysis = getFrameworkTraceAnalysis();
console.log('Overview:', analysis.overview);
console.log('Action Performance:', analysis.performance.actions);
console.log('Store Performance:', analysis.performance.stores);
console.log('Recent Issues:', analysis.issues);
// Category-specific analysis
const collector = getGlobalTraceCollector();
const actionMetrics = collector.analyzePerformance(TraceCategory.ACTION_PIPELINE);
console.log('Action Metrics:', {
average: actionMetrics.averageTime,
p95: actionMetrics.percentiles.p95,
count: actionMetrics.count
});
import { TraceDebugUtils } from '@context-action/logger';
// Enable real-time debugging
TraceDebugUtils.enableDebugMode();
// Export traces for analysis
const jsonTraces = TraceDebugUtils.exportTraces('json');
const csvTraces = TraceDebugUtils.exportTraces('csv');
const chromeTraces = TraceDebugUtils.exportTraces('chrome-tracing');
// Real-time trace streaming
const stopStreaming = TraceDebugUtils.createTraceStream((trace) => {
console.log('Real-time trace:', trace);
});
// Stop streaming when done
stopStreaming();
The universal trace system distinguishes between different collection sources:
// All generate different trace sources
logger.trace('Direct trace'); // → TraceSource.DIRECT
logger.info('Info message'); // → TraceSource.FROM_INFO
logger.warn('Warning message'); // → TraceSource.FROM_WARN
logger.error('Error message'); // → TraceSource.FROM_ERROR
// Perfect distinction in analysis
const stats = traceCollector.getTraceStatsBySource();
console.log('Direct traces:', stats[TraceSource.DIRECT].count);
console.log('Internal INFO traces:', stats[TraceSource.FROM_INFO].count);
console.log('Internal WARN traces:', stats[TraceSource.FROM_WARN].count);
The system organizes traces into categories for better filtering and analysis:
The trace system automatically monitors performance and identifies issues:
// Automatic performance threshold monitoring
initializeFrameworkTracing({
enablePerformanceMonitoring: true,
performanceThreshold: 50, // 50ms threshold
});
// Performance analysis
const analysis = getFrameworkTraceAnalysis();
console.log('Performance Issues:', analysis.issues.filter(i => i.type === 'performance'));
// Real-time performance alerts
const stopStreaming = TraceDebugUtils.createTraceStream((trace) => {
if (trace.category === TraceCategory.PERFORMANCE) {
console.warn('Performance Issue:', trace);
}
});
The logger automatically integrates with all Context-Action framework components:
import { ActionRegister } from '@context-action/core';
import { FrameworkLoggers } from '@context-action/logger';
// ActionRegister automatically uses trace-enabled logging
const actionRegister = new ActionRegister({
logger: FrameworkLoggers.createActionLogger('UserActions'),
logLevel: LogLevel.TRACE
});
import { Store } from '@context-action/react';
import { FrameworkLoggers } from '@context-action/logger';
// Store operations are automatically traced
const userStore = new Store('defaultUser', {
logger: FrameworkLoggers.createStoreLogger('UserStore')
});
createLogger(level?: LogLevel): Logger - Create basic loggergetLogLevelFromEnv(): LogLevel - Get level from environmentcreateFrameworkLogger(component: string, level?: LogLevel): Logger - Create trace-enabled loggerUniversalTraceLogger - Logger that collects traces from all log levelsUniversalTraceCollector - Enhanced collector with source distinctioncreateUniversalTraceLogger(baseLogger, traceCollector, component, category, config): UniversalTraceLoggercreateFrameworkUniversalLogger(component, category, config): { logger, traceCollector }TraceCollector - Main trace collection classinitializeFrameworkTracing(config?: FrameworkTraceConfig): TraceCollector - Initialize framework tracinggetGlobalTraceCollector(): TraceCollector | null - Get global collectorgetFrameworkTraceAnalysis() - Get comprehensive analysisFrameworkLoggers.createActionLogger(name?: string): LoggerFrameworkLoggers.createStoreLogger(storeName: string): LoggerFrameworkLoggers.createRegistryLogger(name?: string): LoggerFrameworkLoggers.createComponentLogger(name: string): LoggerFrameworkLoggers.createPerformanceLogger(): LoggerTraceDebugUtils.enableDebugMode(): voidTraceDebugUtils.exportTraces(format?: string): stringTraceDebugUtils.clearTraces(): voidTraceDebugUtils.createTraceStream(callback: Function): FunctionMIT License - see LICENSE file for details.
FAQs
Logging utility for the context-action framework
We found that @context-action/logger 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
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.

Research
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.

Research
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.