2.9 KiB
name, group, category, update-time, description, key-word
| name | group | category | update-time | description | key-word | ||||
|---|---|---|---|---|---|---|---|---|---|
| logger | api | logging | 20260613 | Public synchronous logger root type used for typed logging pipelines and sink-preserving composition. |
|
Logger
Logger[S] is the public synchronous root logger type. It stores a concrete sink type S together with minimum level, default target, and timestamp settings, then serves as the base value for typed composition helpers and write APIs.
Interface
pub struct Logger[S] {
min_level : Level
sink : S
target : String
timestamp : Bool
}
output
Logger[S]- Public synchronous logger value parameterized by the concrete sink typeS.
Explanation
Detailed rules explaining key parameters and behaviors
- This is a public root struct, not a type alias.
- The current fields are
min_level : Level,sink : S,target : String, andtimestamp : Bool. - The sink type parameter is preserved across composition, which is why helpers such as
with_context_fields(...),with_filter(...),with_patch(...), andwith_queue(...)can return more specific logger shapes. Logger::new(...)constructs this type as the main synchronous entry point.- This root type is also what sits underneath both facade families:
ApplicationLoggeris a direct alias over the configuredLogger[RuntimeSink]line, whileLibraryLogger[S]is a narrowing wrapper around aLogger[S]value.
How to Use
Here are some specific examples provided.
When Need A Typed Root Logger Value
When synchronous logging should begin from a concrete sink-preserving root object:
let logger : Logger[ConsoleSink] = Logger::new(console_sink(), target="app")
In this example, the root logger keeps the concrete console sink type visible for later typed composition.
When Need To Build A Composed Logging Pipeline
When code should start from one root logger and then derive more specific wrapped forms:
let logger = Logger::new(console_sink(), min_level=Level::Info)
.with_timestamp()
.with_context_fields([field("service", "billing")])
In this example, the root type becomes the stable base for later logging behavior changes.
Error Case
e.g.:
-
Logger[S]itself does not have a runtime failure mode. -
Actual write behavior still depends on the wrapped sink
S, so sink-specific limitations remain unchanged behind the logger type.
Notes
-
Use
Logger::new(...)when you need a value of this type in code. -
Use
ConfiguredLoggerwhen config-built runtime helpers should stay directly available on the returned logger value. -
Use
ApplicationLoggerwhen application code wants that same configured-runtime surface under an app-facing alias. -
Use
LibraryLogger[S]when a library boundary should intentionally narrow the public logger surface and expose broader composition only throughto_logger().