@logtape/logtape

Structured logging via LogTape.


LoggerStorage

Global self.loggers provides access to loggers.

get(categories: string[]): Logger

Gets a logger for the given category path.

const logger = self.loggers.get(["app"]);
const dbLogger = self.loggers.get(["app", "database"]);

Logger

debug(message: string, data?: Record<string, unknown>): void

Logs a debug message.

logger.debug("Processing request", { url: request.url });

info(message: string, data?: Record<string, unknown>): void

Logs an informational message.

logger.info("Server started", { port: 7777 });

warning(message: string, data?: Record<string, unknown>): void

Logs a warning message.

logger.warning("Cache miss rate high", { rate: 0.8 });

error(message: string, data?: Record<string, unknown>): void

Logs an error message.

logger.error("Database connection failed", { error: err.message });

Template Literal Syntax

logger.info`User ${userId} performed ${action}`;

Configuration

Configure in shovel.json:

{
  "logging": {
    "sinks": {
      "console": {
        "module": "@logtape/logtape",
        "export": "getConsoleSink"
      }
    },
    "loggers": [
      {
        "category": "app",
        "level": "info",
        "sinks": ["console"]
      }
    ]
  }
}

Sink Fields

FieldTypeDescription
modulestringModule path
exportstringNamed export
Additional fields passed to sink constructor

Logger Fields

FieldTypeDescription
categorystring | string[]Logger category path
levelstringMinimum log level
sinksstring[]Sink names to output to
parentSinks"override"Don't inherit parent sinks

Log Levels

LevelDescription
debugDetailed debugging
infoGeneral information
warningWarning conditions
errorError conditions

Sinks

ModuleExportDescription
@logtape/logtapegetConsoleSinkConsole output
@logtape/filegetFileSinkFile output
@logtape/filegetRotatingFileSinkRotating file
@logtape/otelgetOpenTelemetrySinkOpenTelemetry

File Sink

{
  "logging": {
    "sinks": {
      "file": {
        "module": "@logtape/file",
        "export": "getRotatingFileSink",
        "path": "./logs/app.log",
        "maxSize": 10485760,
        "maxFiles": 5
      }
    }
  }
}

Category Hierarchy

Categories form a hierarchy. Child loggers inherit parent configuration.

{
  "logging": {
    "loggers": [
      { "category": "app", "level": "info", "sinks": ["console"] },
      { "category": ["app", "database"], "level": "debug", "sinks": ["file"] }
    ]
  }
}
LoggerLevelSinks
["app"]infoconsole
["app", "api"]infoconsole (inherited)
["app", "database"]debugconsole, file

Use parentSinks: "override" to prevent inheritance.


Shovel Internal Loggers

CategoryDescription
shovelGeneral Shovel logs
shovel.platformRuntime logs
shovel.buildBuild process

See Also