Files
BitLogger/docs/api/text-formatter-config.md
T
2026-06-14 01:43:27 +08:00

100 lines
3.6 KiB
Markdown

---
name: text-formatter-config
group: api
category: config
update-time: 20260512
description: Create a serializable formatter config object that bridges JSON config and runtime text formatting.
key-word:
- formatter
- config
- json
- public
---
## Text-formatter-config
Create a `TextFormatterConfig` object for config-driven text rendering. This is the serializable counterpart to `text_formatter(...)` and is the main bridge between JSON config parsing and runtime formatter construction.
### Interface
```moonbit
pub fn TextFormatterConfig::new(
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~ : Map[String, TextStyle] = {},
) -> TextFormatterConfig {}
```
#### input
- Parameters mirror `text_formatter(...)` but are stored in a serializable config object.
- `style_tags : Map[String, TextStyle]` - Local tag definitions stored as plain config data.
#### output
- `TextFormatterConfig` - Config object that can later be serialized or converted to a runtime formatter.
### Explanation
Detailed rules explaining key parameters and behaviors
- This type is data-oriented and suitable for JSON parse/stringify workflows.
- `to_formatter()` converts config into a runtime `TextFormatter`.
- `style_tags` are stored as concrete style objects instead of alias-style runtime behavior.
- This config type is used by `SinkConfig`, `LoggerConfig`, and config-driven sink assembly.
- The constructor defaults match the parser defaults: timestamps, level, target, and fields are shown by default; separators default to a single space; `template` defaults to empty; `color_mode` defaults to `Never`; `color_support` defaults to `TrueColor`; `style_markup` defaults to `Full`; and target/field-specific markup defaults to `Disabled`.
- `parse_logger_config_text(...)` rehydrates formatter config through this same constructor path, so omitted formatter fields fall back to the same defaults whether config is built in code or parsed from JSON.
### How to Use
Here are some specific examples provided.
#### When Need Config-built Text Output
When text formatting should be configured rather than hard-coded:
```moonbit
let formatter = TextFormatterConfig::new(
show_timestamp=false,
template="[{level}] {message}",
color_mode=ColorMode::Always,
)
```
In this example, the formatter settings are stored as config rather than a runtime-only formatter.
And the same value can be serialized or embedded in larger logger config objects.
#### When Need Runtime Bridge After Parsing
When config has already been parsed from JSON:
```moonbit
let runtime_formatter = config.sink.text_formatter.to_formatter()
```
In this example, JSON-driven settings become a real runtime formatter only when needed.
### Error Case
e.g.:
- If `template` is empty, runtime formatting falls back to the normal part-assembly path.
- If `style_tags` is empty, no local formatter tag registry is created.
### Notes
1. Prefer this API when formatter behavior must be stored, parsed, or serialized.
2. Prefer `text_formatter(...)` when writing direct runtime code without config.
3. Use `default_text_formatter_config()` when callers want the standard formatter baseline without spelling out every field manually.