# @push.rocks/smartlog API Reference This document provides a detailed reference for all exports and APIs available in the @push.rocks/smartlog package and its submodules. ## Core Module (`@push.rocks/smartlog`) The core module provides the main logging functionality. ### Classes #### `Smartlog` Main logger class for creating, managing, and routing logs. ```typescript import { Smartlog } from '@push.rocks/smartlog'; const logger = new Smartlog({ logContext: { company: 'MyCompany', environment: 'production', // ...other context properties }, minimumLogLevel: 'info' // Optional, defaults to 'silly' }); ``` **Constructor Options:** - `logContext`: Object containing context information about the environment - `minimumLogLevel`: Optional minimum log level to process (defaults to 'silly') **Methods:** - `log(logLevel, message, data?, correlation?)`: Log a message with optional data and correlation - `increment(logLevel, message, data?, correlation?)`: Log an increment counter - `addLogDestination(destination)`: Add a custom log destination - `enableConsole(options?)`: Enable console logging (with optional stdout/stderr capture) - `createLogGroup(transactionId?)`: Create a log group for related logs - `handleLog(logPackage)`: Handle a pre-formatted log package **Static Methods:** - `createForCommitinfo(commitinfo)`: Create a logger with commit information #### `LogGroup` Groups related logs together for better traceability. ```typescript import { Smartlog } from '@push.rocks/smartlog'; const logger = new Smartlog({/*...*/}); const logGroup = logger.createLogGroup('transaction-123'); logGroup.log('info', 'Starting process'); // All logs in this group will share the same transaction ID ``` **Methods:** - `log(logLevel, message, data?)`: Log a message within this group - `increment(logLevel, message, data?)`: Log an increment within this group #### `ConsoleLog` Implementation of `ILogDestination` that logs to console. ## Interfaces Module (`@push.rocks/smartlog/interfaces`) This module provides all type definitions and interfaces used by Smartlog. ### Types - `TLogType`: Available log types - `'log' | 'increment' | 'gauge' | 'error' | 'success' | 'value' | 'finance' | 'compliance'` - `TLogLevel`: Available log levels - `'silly' | 'info' | 'debug' | 'note' | 'ok' | 'success' | 'warn' | 'error' | 'lifecycle'` - `TEnvironment`: Available environments - `'local' | 'test' | 'staging' | 'production'` - `TRuntime`: Available runtime environments - `'node' | 'chrome' | 'rust' | 'deno' | 'cloudflare_workers'` ### Interfaces #### `ILogContext` Metadata about the environment where logging occurs. ```typescript interface ILogContext { commitinfo?: ICommitInfo; company?: string; companyunit?: string; containerName?: string; environment?: TEnvironment; runtime?: TRuntime; zone?: string; } ``` #### `ILogCorrelation` Information for correlating related logs. ```typescript interface ILogCorrelation { id: string; type: 'none' | 'service' | 'build' | 'infrastructure' | 'cdn'; instance?: string; group?: string; transaction?: string; } ``` #### `ILogPackage` The standard log package format. ```typescript interface ILogPackage { timestamp: number; type: TLogType; context: ILogContext; level: TLogLevel; correlation: ILogCorrelation; message: string; data?: T; } ``` #### `ILogDestination` Interface for implementing custom log destinations. ```typescript interface ILogDestination { handleLog: (logPackage: ILogPackage) => Promise; } ``` ## Interactive Console Module (`@push.rocks/smartlog/source-interactive`) This module provides interactive console components like spinners and progress bars. ### Classes #### `SmartlogSourceInteractive` Creates interactive spinners for CLI applications. ```typescript import { SmartlogSourceInteractive } from '@push.rocks/smartlog/source-interactive'; const spinner = new SmartlogSourceInteractive(); spinner.text('Loading data...'); // Later spinner.finishSuccess('Data loaded successfully!'); ``` **Methods:** - `text(message)`: Sets the spinner text and starts it if not running - `finishSuccess(message?)`: Completes the spinner with success message - `finishFail(message?)`: Completes the spinner with failure message - `successAndNext(message)`: Marks success and starts a new spinner - `failAndNext(message)`: Marks failure and starts a new spinner - `setSpinnerStyle(style)`: Sets spinner style ('dots', 'line', 'star', 'simple') - `setColor(color)`: Sets the spinner color - `setSpeed(ms)`: Sets the animation speed #### `SmartlogProgressBar` Creates progress bars for CLI applications. ```typescript import { SmartlogProgressBar } from '@push.rocks/smartlog/source-interactive'; const bar = new SmartlogProgressBar({ total: 100, width: 40, showEta: true }); bar.update(50); // Update to 50% bar.increment(10); // Increment by 10 units bar.complete(); // Complete the progress bar ``` **Constructor Options:** - `total`: Total number of items/steps - `width`: Width of the bar in characters - `complete`: Character for completed section - `incomplete`: Character for incomplete section - `renderThrottle`: Minimum time between renders - `clear`: Whether to clear the bar on completion - `showEta`: Show estimated time remaining - `showPercent`: Show percentage completed - `showCount`: Show count of items **Methods:** - `update(value)`: Update progress to a specific value - `increment(value?)`: Increment progress by a value (default: 1) - `complete()`: Mark the progress bar as complete - `setColor(color)`: Set the color of the progress bar ## File Destination Module (`@push.rocks/smartlog/destination-file`) This module provides a log destination that writes logs to a file. ### Classes #### `SmartlogDestinationFile` Writes logs to a file with timestamps. ```typescript import { Smartlog } from '@push.rocks/smartlog'; import { SmartlogDestinationFile } from '@push.rocks/smartlog/destination-file'; const logger = new Smartlog({/*...*/}); const fileDestination = new SmartlogDestinationFile('/absolute/path/to/logfile.log'); logger.addLogDestination(fileDestination); ``` **Constructor Parameters:** - `filePath`: Absolute path to the log file ## Local Destination Module (`@push.rocks/smartlog/destination-local`) This module provides a log destination with colorful formatting for local development. ### Classes #### `DestinationLocal` Formats logs with colors and prefixes for better readability in the console. ```typescript import { Smartlog } from '@push.rocks/smartlog'; import { DestinationLocal } from '@push.rocks/smartlog/destination-local'; const logger = new Smartlog({/*...*/}); const localDestination = new DestinationLocal(); logger.addLogDestination(localDestination); ``` **Methods:** - `handleLog(logPackage)`: Handles a log package - `newLine(lines?)`: Adds empty lines to the console - `logReduced(text, repeatEveryTimes?)`: Logs only when the message changes ## DevTools Destination Module (`@push.rocks/smartlog/destination-devtools`) This module provides a log destination that formats logs for browser developer tools. ### Classes #### `SmartlogDestinationDevtools` Formats logs with colors for browser developer tools. ```typescript import { Smartlog } from '@push.rocks/smartlog'; import { SmartlogDestinationDevtools } from '@push.rocks/smartlog/destination-devtools'; const logger = new Smartlog({/*...*/}); const devtoolsDestination = new SmartlogDestinationDevtools(); logger.addLogDestination(devtoolsDestination); ``` ## ClickHouse Destination Module (`@push.rocks/smartlog/destination-clickhouse`) This module provides a log destination that stores logs in a ClickHouse database. ### Classes #### `SmartlogDestinationClickhouse` Stores logs in a ClickHouse database for analytics and querying. ```typescript import { Smartlog } from '@push.rocks/smartlog'; import { SmartlogDestinationClickhouse } from '@push.rocks/smartlog/destination-clickhouse'; const logger = new Smartlog({/*...*/}); const clickhouseDestination = await SmartlogDestinationClickhouse.createAndStart({ host: 'clickhouse.example.com', port: 8123, user: 'username', password: 'password', database: 'logs_db' }); logger.addLogDestination(clickhouseDestination); ``` **Static Methods:** - `createAndStart(options)`: Create and initialize a ClickHouse destination **Methods:** - `start()`: Initialize the connection to ClickHouse - `handleLog(logPackage)`: Store a log in ClickHouse