@nanocollective/nanocoder
Version:
A local-first CLI coding agent that brings the power of agentic coding tools like Claude Code and Gemini CLI to local models or controlled APIs like OpenRouter
169 lines • 5.78 kB
JavaScript
/**
* Main logging interface with facade pattern for backward compatibility
* Uses dependency injection pattern to avoid circular dependencies
*/
import { getShutdownManager } from '../../utils/shutdown/index.js';
import { globalHealthMonitor } from './health-monitor/core/health-monitor.js';
import { loggerProvider } from './logger-provider.js';
/**
* Initialize the logger with configuration
*/
export function initializeLogger(config) {
return loggerProvider.initializeLogger(config);
}
/**
* Get the current logger instance
*/
export function getLogger() {
return loggerProvider.getLogger();
}
/**
* Get the current configuration
*/
export function getLoggerConfig() {
return loggerProvider.getLoggerConfig();
}
/**
* Create a child logger with additional context
*/
// biome-ignore lint/suspicious/noExplicitAny: Dynamic bindings for logger context
export function createChildLogger(bindings) {
return loggerProvider.createChildLogger(bindings);
}
/**
* Check if a log level is enabled
*/
export function isLevelEnabled(level) {
return loggerProvider.isLevelEnabled(level);
}
/**
* Convenience methods that match console.log API
*/
export const log = {
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for logger methods
fatal: (msg, ...args) => getLogger().fatal(msg, ...args),
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for logger methods
error: (msg, ...args) => getLogger().error(msg, ...args),
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for logger methods
warn: (msg, ...args) => getLogger().warn(msg, ...args),
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for logger methods
info: (msg, ...args) => getLogger().info(msg, ...args),
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for logger methods
http: (msg, ...args) => getLogger().http(msg, ...args),
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for logger methods
debug: (msg, ...args) => getLogger().debug(msg, ...args),
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for logger methods
trace: (msg, ...args) => getLogger().trace(msg, ...args),
};
/**
* Backward compatibility facade - wraps console during transition
* This will be gradually replaced with structured logging
*/
export const console = {
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for console compatibility
log: (...args) => {
// For now, use info level for console.log
log.info(args.join(' '));
// TODO: Add deprecation warning in development mode
if (process.env.NODE_ENV === 'development') {
process.stderr.write('\x1b[33m[DEPRECATED]\x1b[0m console.log() is deprecated. Use logger.info() instead.\n');
}
},
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for console compatibility
error: (...args) => {
log.error(args.join(' '));
},
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for console compatibility
warn: (...args) => {
log.warn(args.join(' '));
},
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for console compatibility
info: (...args) => {
log.info(args.join(' '));
},
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for console compatibility
debug: (...args) => {
log.debug(args.join(' '));
},
};
/**
* Flush any pending logs
*/
export async function flush() {
await loggerProvider.flush();
}
/**
* Flush logs synchronously (for signal handlers)
*/
function _flushSync() {
loggerProvider.flushSync();
}
/**
* End the logger and close all streams
*/
export async function end() {
await loggerProvider.end();
}
// Register cleanup handlers with ShutdownManager
const shutdownManager = getShutdownManager();
shutdownManager.register({
name: 'health-monitor',
priority: 40,
handler: async () => {
globalHealthMonitor.stop();
},
});
shutdownManager.register({
name: 'logger',
priority: 100,
handler: async () => {
await loggerProvider.flush();
await loggerProvider.end();
},
});
// Export configuration utilities
export {
/** @internal */
createConfig,
/** @internal */
getDefaultLogDirectory,
/** @internal */
getEnvironmentConfig,
/** @internal */
normalizeLogLevel,
/** @internal */
validateLogLevel, } from './config.js';
// Export for testing purposes only
// Export correlation utilities
export {
/** @internal */
correlationMiddleware,
/** @internal */
createCorrelationFromHeaders,
/** @internal */
extractCorrelationId,
/** @internal */
formatCorrelationForLog, generateCorrelationId, getCorrelationId, withNewCorrelationContext, } from './correlation.js';
// Export performance utilities
export { calculateMemoryDelta, endMetrics,
/** @internal */
formatBytes, formatMemoryUsage,
/** @internal */
globalPerformanceMonitor, startMetrics, } from './performance.js';
// Export transport utilities (used internally only)
// No exports from transports.js as they are only used internally
// Console facade exports (only used in tests)
// No exports from console-facade.js as they are only used internally and in tests
// Export request tracking utilities (specific instances used by other modules)
export { healthChecks } from './health-monitor/index.js';
// Export log storage for tests
export { globalLogStorage } from './log-query/index.js';
// Internal exports that knip should ignore
export {
/** @internal */
aiTracker, globalRequestTracker,
/** @internal */
httpTracker,
/** @internal */
mcpTracker, } from './request-tracker.js';
//# sourceMappingURL=index.js.map