Files
BitLogger/docs/api/library-logger-to-logger.md
T
2026-06-14 01:14:45 +08:00

2.5 KiB

name, group, category, update-time, description, key-word
name group category update-time description key-word
library-logger-to-logger api facade 20260613 Recover the underlying full sync logger from the library-facing sync facade without rebuilding sink or logger composition state.
logger
library
facade
public

Library-logger-to-logger

Recover Logger[S] from LibraryLogger[S]. This unwraps the library-facing sync facade when code needs methods that are only available on the full logger type.

Interface

pub fn[S] LibraryLogger::to_logger(self : LibraryLogger[S]) -> Logger[S] {}

input

  • self : LibraryLogger[S] - Library-facing sync logger facade.

output

  • Logger[S] - The underlying full sync logger.

Explanation

Detailed rules explaining key parameters and behaviors

  • This conversion unwraps the existing logger instead of rebuilding it.
  • Sink wiring, target, min level, timestamp behavior, and attached wrappers remain the same.
  • Use this when code needs full-surface APIs such as with_timestamp(...), with_filter(...), or with_patch(...).
  • This is also the step required for configured-runtime helpers such as flush(), drain(), pending_count(), or file controls when the wrapped sink is RuntimeSink.

How to Use

Here are some specific examples provided.

When Need Full Logger-only Composition APIs

When a library-facing logger must be widened temporarily for additional composition:

let library_logger = LibraryLogger::new(console_sink(), target="lib")
let full_logger = library_logger.to_logger().with_timestamp()

In this example, the facade is unwrapped so the caller can access full logger composition APIs again.

When Need Runtime Helpers After Library-oriented Config Build

When a library-facing runtime logger should later expose configured runtime controls internally:

let full = logger.to_logger()
ignore(full.pending_count())

In this example, unwrapping exposes the broader configured-runtime helper surface on the same underlying logger state.

Error Case

e.g.:

  • If callers only need library-oriented write APIs, unwrapping is unnecessary.

  • Unwrapping does not change the current target or sink behavior by itself.

  • Recovering the full logger does not rebuild or reset the existing sink wrappers.

Notes

  1. Use this only when the narrower facade is no longer sufficient.

  2. This is the inverse projection of Logger::to_library_logger().

  3. Use LibraryLogger[S] directly when the narrower package-facing surface is still sufficient.