LogTape
lastmod 2025-06-26created 2025-06-262 edits
A new logging approach for JavaScript libraries
Libraries vs applications: fundamentally different logging requirements
- Application logging: explicit configuration and management in an environment the developer controls directly
- Library logging: included in other people's projects, so it must respect the user's environment and choices
- Limits of existing approaches: applying application-oriented loggers (winston, Pino) to libraries forces things on users
- The library author's dilemma: providing debugging information vs not burdening users
Problems with current library logging
- Fragmented logging ecosystem: each uses a different method, e.g. Express uses DEBUG=express:*, Mongoose uses mongoose.set('debug', true)
- Dependency dilemma: using application-oriented libraries like winston or Pino forces unwanted dependencies and configuration on users
- Silence vs imposition: two extremes, either giving up on logging entirely or forcing a logging method on users
- Complexity of dependency injection: a more sophisticated approach, but it increases API complexity and the burden on users
LogTape's "library-first" philosophy
- Conditional activation: completely inert when logging is not configured; managed in a unified way when it is
- Guaranteed user choice: the library does not force a logging method; it is enabled only when the user wants
- Zero dependencies: at 5.3KB, eliminates supply chain security risks and prevents version conflicts
- Full ESM/CJS support: solves compatibility chain problems and optimizes bundles through tree shaking
Practical advantages
- Performance optimization: almost zero overhead when disabled, excellent console output performance when enabled
- Namespace separation: hierarchical categories of the form ["my-lib", "feature"] prevent collisions
- TypeScript-first design: full type safety without additional type packages
- Bridging with existing systems: supports gradual adoption through winston and Pino adapters
Realistic considerations
- What the adapters mean: an acknowledgment that it is not yet an ecosystem standard, and a practical compromise
- Inspired by the Python ecosystem: references Python's success in unifying around the standard logging library
- Forward-looking approach: presented as one option for gradually improving the library ecosystem