Skip to content

Text-formatter ​

Create a TextFormatter that controls timestamp, level, target, field rendering, template substitution, color behavior, and style markup behavior. This is the main API for readable text output in BitLogger.

Interface ​

moonbit
pub fn text_formatter(
  show_timestamp~ : Bool = true,
  show_level~ : Bool = true,
  show_target~ : Bool = true,
  show_fields~ : Bool = true,
  separator~ : String = " ",
  field_separator~ : String = " ",
  template~ : String = "",
  color_mode~ : ColorMode = ColorMode::Never,
  color_support~ : ColorSupport = ColorSupport::TrueColor,
  style_markup~ : StyleMarkupMode = StyleMarkupMode::Full,
  target_style_markup~ : StyleMarkupMode = StyleMarkupMode::Disabled,
  fields_style_markup~ : StyleMarkupMode = StyleMarkupMode::Disabled,
  style_tags~ : StyleTagRegistry? = None,
) -> TextFormatter {}

input ​

  • show_timestamp : Bool - Whether timestamp text is rendered when the record carries a timestamp.
  • show_level : Bool - Whether the level label is rendered.
  • show_target : Bool - Whether the target is rendered.
  • show_fields : Bool - Whether structured fields are rendered.
  • separator : String - Separator between major rendered parts.
  • field_separator : String - Separator used between field values in text output.
  • template : String - Optional template using tokens such as {level}, {target}, {message}, {timestamp}, {timestamp_ms}, and {fields}.
  • color_mode : ColorMode - Never, Auto, or Always.
  • color_support : ColorSupport - Basic or TrueColor.
  • style_markup : StyleMarkupMode - Controls whether message style tags are parsed.
  • target_style_markup : StyleMarkupMode - Controls whether target style tags are parsed.
  • fields_style_markup : StyleMarkupMode - Controls whether field-value style tags are parsed.
  • style_tags : StyleTagRegistry? - Optional local tag registry.

output ​

  • TextFormatter - A reusable text formatter instance for text sinks or direct formatting.

Explanation ​

Detailed rules explaining key parameters and behaviors

  • If template is empty, the formatter uses built-in part assembly.
  • color_mode=Auto currently follows a conservative rule based on NO_COLOR.
  • style_markup, target_style_markup, and fields_style_markup are independent scopes.
  • Local style_tags override global tag registry lookup, which overrides builtin tags.

How to Use ​

Here are some specific examples provided.

When Need Human-readable Console Output ​

When logs should stay readable in terminals:

moonbit
let formatter = text_formatter(
  show_timestamp=false,
  template="[{level}] {target} {message} :: {fields}",
)
let logger = Logger::new(text_console_sink(formatter), target="demo")

In this example, the formatter produces predictable text output without timestamps.

And the same formatter can be reused by multiple sinks.

When Need Styled ANSI Output ​

When you want visible severity or semantic tags in terminal output:

moonbit
let formatter = text_formatter(color_mode=ColorMode::Always)
  .with_style_tags(default_style_tag_registry().set_tag("accent", fg=Some("#4cc9f0"), bold=true))

In this example, message text can use inline tags such as <accent>...</>.

Error Case ​

e.g.:

  • If template contains unknown text, the formatter keeps it as plain text.

  • If a style tag is unknown or invalid, current behavior falls back to plain text rather than raising an error.

Notes ​

  1. Prefer text_formatter(...) when you want explicit control over readable text output.

  2. TextFormatter is reusable and should usually be constructed once, then shared.

Published from the repository docs folder with VitePress.