Skip to content

Record-with-fields

Return a copy of a Record with a different field array. This helper is the narrowest way to replace structured metadata while preserving the record's level, message, timestamp, and target.

Interface

moonbit
pub fn Record::with_fields(self : Record, fields : Array[Field]) -> Record {}

input

  • self : Record - Base record whose field array should be replaced.
  • fields : Array[Field] - New structured field list for the returned record.

output

  • Record - New record value carrying the updated fields.

Explanation

Detailed rules explaining key parameters and behaviors

  • This helper returns a new record value instead of mutating the original one.
  • Only the fields array is replaced.
  • level, message, timestamp_ms, and target are preserved.
  • This is useful when one record should swap its metadata wholesale rather than append more fields.

How to Use

Here are some specific examples provided.

When Need To Replace Metadata Entirely

When one record should keep its message and severity but use a new field set:

moonbit
let rec = Record::new(Level::Info, "accepted", fields=[field("user", "alice")])
let sanitized = rec.with_fields([field("user", "***")])

In this example, the original field array is replaced rather than extended.

When Need To Clear Per-record Fields

When structured metadata should be removed from one value:

moonbit
let rec = Record::new(Level::Warn, "retry", fields=[field("job", "42")])
let plain = rec.with_fields([])

In this example, the returned record keeps the same event identity but carries no fields.

Error Case

e.g.:

  • If fields is empty, the returned record is still valid and simply carries no structured metadata.

  • If code should append or merge fields instead of replacing them, append_fields(...) or a custom patch is the better fit.

Notes

  1. Use this helper when one record should swap its entire field array.

  2. Use append_fields(...) when enrichment should preserve the original field list and add more entries afterward.

Published from the repository docs folder with VitePress.