Angular
@cues/sawdust-angular integrates the core
logger using Angular's functional providers — no decorators, fully tree-shakable, standalone
friendly. It does not re-export sawdust types; import those from @cues/sawdust.
Install
pnpm add @cues/sawdust @cues/sawdust-angular
@angular/core and @cues/sawdust are peer dependencies (Angular >= 16).
Provide the logger
import { bootstrapApplication } from '@angular/platform-browser'
import { provideSawdustLogger } from '@cues/sawdust-angular'
import { AppComponent } from './app.component'
bootstrapApplication(AppComponent, {
providers: [
provideSawdustLogger({ transports: { console: { enabled: true } } }),
],
})
provideSawdustLogger is SSR-safe: under Angular Universal it detects the server platform
(PLATFORM_ID) and configures the façade with transports and plugins stripped (usable but
silent); on the browser it configures the full options — so the server render never double-logs.
options is a LoggerOptions from @cues/sawdust, so provider transports
(@cues/sawdust-datadog, @cues/sawdust-otel) go in extraTransports / plugins.
Inject a logger
import { Component, OnInit } from '@angular/core'
import { injectLogger } from '@cues/sawdust-angular'
@Component({ selector: 'app-batch-table', standalone: true, template: '' })
export class BatchTableComponent implements OnInit {
private readonly log = injectLogger('BatchTable', { store: 'batches' })
ngOnInit() {
this.log.info('initialized')
}
}
injectLogger()— the canonical logger.injectLogger(name, ctx?)— a child bound to{ component: name, ...ctx }.- Call it in an injection context (constructor or field initializer). You can also
inject(SAWDUST_LOGGER)directly.
Dependency injection — withChildLogger
Standardizes the logger ?? root.child({ ... }) fallback for services that accept an optional
logger:
import { withChildLogger } from '@cues/sawdust-angular'
const storeLogger = withChildLogger(maybeInjected, rootLogger, { store: 'ViewStore' })
Conventions
- Types from
@cues/sawdust; runtime (logger,configureLogger) from@cues/sawdust/logger; Angular bindings from@cues/sawdust-angular. - Canonical error call is
error(message, error, ctx)— message-first, matchinginfo/warn(message, ctx). - RUM bindings are planned for a later release; v1 ships the logger core + DI conventions.