mirror of
https://github.com/Nanaloveyuki/BitLogger.git
synced 2026-07-25 17:32:20 +00:00
92 lines
3.4 KiB
Markdown
92 lines
3.4 KiB
Markdown
---
|
|
name: async-logger-build-config-to-json
|
|
group: api
|
|
category: async
|
|
update-time: 20260614
|
|
description: Convert AsyncLoggerBuildConfig into a JSON value for exporting the full shared async build shape that can later feed either async builder path.
|
|
key-word:
|
|
- async
|
|
- build
|
|
- config
|
|
- public
|
|
---
|
|
|
|
## Async-logger-build-config-to-json
|
|
|
|
Convert `AsyncLoggerBuildConfig` into a `JsonValue`. This helper exports both the base synchronous logger config and the async runtime config as one structured payload.
|
|
|
|
### Interface
|
|
|
|
```moonbit
|
|
pub fn async_logger_build_config_to_json(
|
|
config : AsyncLoggerBuildConfig,
|
|
) -> @json_parser.JsonValue {}
|
|
```
|
|
|
|
#### input
|
|
|
|
- `config : AsyncLoggerBuildConfig` - Complete build config used by async logger builders.
|
|
|
|
#### output
|
|
|
|
- `JsonValue` - Structured JSON representation of the full async build config.
|
|
|
|
### Explanation
|
|
|
|
Detailed rules explaining key parameters and behaviors
|
|
|
|
- The output always includes `logger` and `async_config`.
|
|
- Logger export is delegated to `@bitlogger.logger_config_to_json(...)`.
|
|
- Async export is delegated to `async_logger_config_to_json(...)`.
|
|
- Because both sections are always materialized, parsed defaults that were originally omitted in JSON input become explicit again in the exported build-config shape.
|
|
- This helper is useful when generated setup should preserve both sink/logger behavior and async runtime behavior together.
|
|
- The exported `logger` section keeps the full `LoggerConfig` shape, including fields that only matter on the full sync-first builder path such as the optional sync queue layer.
|
|
- That means the JSON shape is broader than the consumption pattern of `build_async_text_logger(...)`, which only uses selected text-oriented logger fields when building the sink.
|
|
|
|
### How to Use
|
|
|
|
Here are some specific examples provided.
|
|
|
|
#### When Need Structured Export Of Full Async Setup
|
|
|
|
When a tool or test needs one object describing the whole async logger build:
|
|
```moonbit
|
|
let payload = async_logger_build_config_to_json(
|
|
AsyncLoggerBuildConfig::new(
|
|
logger=@bitlogger.LoggerConfig::new(target="svc"),
|
|
async_config=AsyncLoggerConfig::new(max_pending=64),
|
|
),
|
|
)
|
|
```
|
|
|
|
In this example, both layers of configuration are exported together.
|
|
|
|
And later consumers can still choose whether to rebuild through `build_async_logger(...)` or the narrower `build_async_text_logger(...)` path.
|
|
|
|
#### When Need Roundtrip-friendly Build Config Data
|
|
|
|
When generated build config should later be parsed again:
|
|
```moonbit
|
|
let value = async_logger_build_config_to_json(AsyncLoggerBuildConfig::new())
|
|
```
|
|
|
|
In this example, the resulting JSON matches the supported async build config shape.
|
|
|
|
### Error Case
|
|
|
|
e.g.:
|
|
- If callers only need the async runtime section, this API is broader than necessary and `async_logger_config_to_json(...)` should be used instead.
|
|
|
|
- If callers want direct text output, they should use `stringify_async_logger_build_config(...)` instead.
|
|
|
|
- Exporting the full `logger` section does not imply that every async builder will later consume every logger field equally.
|
|
|
|
### Notes
|
|
|
|
1. Use this helper when tools or tests need a structured JSON object instead of text.
|
|
|
|
2. Use `stringify_async_logger_build_config(...)` when the same build shape should be emitted as JSON text directly.
|
|
|
|
3. The resulting object round-trips through `parse_async_logger_build_config_text(...)`, even though different async builders later consume different parts of the embedded `LoggerConfig`.
|
|
|