Skip to content

Reference

Logging

Logger interface and built-in FileLogger, ConsoleLogger, CompositeLogger — wiring custom or default logging into Canton and HTTP tracing.

The SDK routes HTTP request/response traces and optional diagnostic messages through the Logger interface. CantonRuntime picks a default logger when CantonConfig.logger is omitted: typically FileLogger alone, or CompositeLogger combining FileLogger with ConsoleLogger when debug mode is enabled or CANTON_DEBUG is truthy.

Implement Logger yourself to forward logs to Datadog, Pino, or structured pipelines — only logRequestResponse is required for full HTTP tracing; other methods are optional.

import {
  Canton,
  ConsoleLogger,
  FileLogger,
  CompositeLogger,
  type Logger,
} from '@fairmint/canton-node-sdk';

Example — inject CompositeLogger

import { Canton, CompositeLogger, ConsoleLogger, FileLogger } from '@fairmint/canton-node-sdk';

const logger = new CompositeLogger([
  new FileLogger({ logLevel: 'info', logDir: '/tmp/canton-logs' }),
  new ConsoleLogger({ logLevel: 'debug' }),
]);

const canton = new Canton({
  network: 'devnet',
  provider: '5n',
  partyId: 'OWN_PARTY_ID',
  logger,
});

await canton.ledger.getVersion();

Logger interface

  • logRequestResponse(url, request, response): Promise<void> — Called for each HTTP exchange; implementations should redact secrets (built-ins scrub common token keys).
  • Optional: debug, info, warn, error — Severity helpers used by SDK warnings (for example empty OAuth client id).

LoggerConfig (used by file/console implementations): enableLogging, logDir, logLevel (error | warn | info | debug).

Implementations

ClassBehavior
FileLoggerAppends JSON lines under logDir (default package-relative logs/ or FILE_LOGGER_DIR). Honors DISABLE_FILE_LOGGER to silence disk writes.
ConsoleLoggerColorized stdout/stderr output; logRequestResponse truncates large JSON payloads.
CompositeLoggerFan-out to every nested logger (Promise.all for request/response logs).

Pitfalls

  • Secrets: Built-in sanitizers redact keys such as password, access_token, client_secret — extend carefully if your payloads nest secrets under unusual keys.
  • Performance: debug mode logs entire bodies — avoid on hot paths in production.

See also

Source