Skip to content

Default-logger

Create a Logger[ConsoleSink] from the current shared default global configuration. This is the logger value used internally by the global helper functions such as log(...), info(...), and error(...).

Interface

moonbit
pub fn default_logger() -> Logger[ConsoleSink] {}

output

  • Logger[ConsoleSink] - Logger built from the shared console sink, current default minimum level, and current default target.

Explanation

Detailed rules explaining key parameters and behaviors

  • The returned logger is built from default_console_sink, default_min_level_ref, and default_target_ref.
  • Each call reflects the current shared configuration at that moment.
  • default_logger() constructs a fresh Logger::new(...) value on each call while reusing the shared default console sink and the current stored default level and target values.
  • Later calls to set_default_min_level(...) or set_default_target(...) do not mutate a logger value that was already returned earlier.
  • The logger writes to the standard console sink path.
  • The global helper functions such as log(...), info(...), and error(...) call default_logger() for each write instead of holding one long-lived default logger instance.
  • This helper is useful when you want the same baseline behavior as the global shortcuts but still need the explicit Logger object for chaining or inspection.

How to Use

Here are some specific examples provided.

When Start From Global Defaults But Keep A Logger Value

When code wants the default console path with later composition:

moonbit
let logger = default_logger().with_timestamp()
logger.info("service started")

In this example, the logger starts from global defaults and then gains extra instance-level behavior.

Later shared-default changes still require calling default_logger() again if a fresh explicit logger value should observe them.

When Inspect Current Shared Behavior

When code should branch using the same threshold as global helpers:

moonbit
let logger = default_logger()
if logger.is_enabled(Level::Debug) {
  logger.debug("debug path active")
}

In this example, the explicit logger mirrors the same level gate used by global shortcut calls.

Error Case

e.g.:

  • If the shared default target is empty, the returned logger is still valid and simply uses an empty target.

  • Changes made later through set_default_min_level(...) or set_default_target(...) do not mutate an already-stored logger value.

Notes

  1. This helper returns a normal Logger, so further chaining is available.

  2. It is the bridge between the simple global API and the explicit typed logger workflow.

  3. Call default_logger() again after set_default_min_level(...) or set_default_target(...) if a fresh explicit logger value should reflect the updated shared defaults.

Published from the repository docs folder with VitePress.