3.1 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. |
|
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(...), orwith_patch(...). - When the wrapped sink is
RuntimeSink, unwrapping preserves that runtime sink value, but the result type is stillLogger[RuntimeSink]rather than theConfiguredLoggeralias. Runtime-specific operations remain available throughfull.sinkor by keeping aConfiguredLoggervalue directly. - That same unwrap also preserves queued runtime state and file-backed helper behavior exactly as they existed behind the facade, including drain or flush results, file state snapshots, and file control methods.
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.sink.pending_count())
In this example, unwrapping preserves the same RuntimeSink pipeline, and callers reach runtime-specific helpers through that preserved sink value.
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.
-
Recovering the full logger does not translate configured runtime state into a simpler snapshot; queued counts, file availability, file failure counters, and runtime file controls stay exactly as they were on the wrapped logger.
Notes
-
Use this only when the narrower facade is no longer sufficient.
-
This is the inverse projection of
Logger::to_library_logger(). -
Use
LibraryLogger[S]directly when the narrower package-facing surface is still sufficient.