Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Design optional logforth-registry for configuration-driven logger lookup

Đang mở
#225 0 bình luận 1 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
25/100
Loại issue
Tính năng
Độ rõ ràng
Cần làm rõ
Mức độ hoạt động
Ít trao đổi
Công nghệ
rust
Lĩnh vực
observability

Hướng nghiên cứu

Không có tệp triển khai hoặc bài kiểm thử nào được nêu tên. Hãy bắt đầu bằng cách xem xét các thay đổi của global-logger trong #214 và ranh giới của logforth-core, sau đó so sánh các tài liệu tham chiếu về cấu hình của Log4j và Logback được liên kết trong issue. Công việc được xem là hoàn tất khi API của registry crate, mô hình selector, định dạng cấu hình, hành vi caching và ranh giới core đã được thống nhất trước khi bắt đầu triển khai.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

enhancement

Background

We are removing/rethinking the global default logger (#214). That keeps the core API explicit, but applications may still want a startup-provided, process-wide way to look up and reuse loggers without passing a Logger instance through every layer.

A future optional crate, tentatively named logforth-registry, could provide this capability. The idea is similar in spirit to OpenDAL-style registries: users provide a registry configuration, and application code can resolve a named/model/target-specific logger from that registry.

Goals

  • Provide an optional global registry that can be initialized at application startup.
  • Load logger definitions from a config file and/or programmatic registry settings.
  • Select loggers by dimensions such as target, module/logger name, app-defined model name, profile/tenant, or other selector settings.
  • Support a fallback root logger when no more specific logger matches.
  • Cache constructed logger instances in the registry so callers can reuse them without rebuilding pipelines or passing handles everywhere.
  • Support per-model/per-target logger relationships, including inheritance or fallback behavior where appropriate.
  • Keep this outside the core logger path so we do not recreate an implicit default global logger in logforth-core.

Prior art to study

These are not direct API models for Rust, but they are useful references for:

  • config-file shape and stability;
  • root logger fallback;
  • target/logger-name based selection;
  • appender/layout/filter references;
  • additivity/inheritance-like behavior;
  • runtime reload or replacement questions.

Sketch

A registry config might declare reusable appenders/layouts/filters, logger definitions, selector rules, and a root logger:

[root]
logger = "console"

[[loggers]]
name = "console"
selector.target = "*"
appenders = ["stdout"]

[[loggers]]
name = "model-a-file"
selector.model = "model-a"
selector.target = "my_crate::model_a::*"
appenders = ["rolling_file"]

The exact format is intentionally undecided. The important part is that the registry can map runtime lookup input to a cached logger instance:

let registry = logforth_registry::Registry::from_config(config)?;
logforth_registry::set_global(registry)?;

let logger = logforth_registry::get(LoggerSelector::new()
    .target("my_crate::model_a::worker")
    .setting("model", "model-a"));

Open questions

  • Should logforth-registry expose only explicit Registry values, or also provide a global singleton API?
  • What should the selector model look like: target/module path only, arbitrary key-value dimensions, typed dimensions, or a combination?
  • How should logger inheritance/additivity work, if at all?
  • What is the minimum useful config format: TOML, YAML, JSON, or format-agnostic serde data structures?
  • Should registry entries build full Logger values eagerly at startup, lazily on first lookup, or support both?
  • How should reload/reconfiguration work without surprising existing cached handles?
  • How should this interact with the log bridge and any future tracing-style bridge?
  • What belongs in logforth-core as reusable primitives, and what should remain in the optional registry crate?

Non-goals

  • Reintroducing a mandatory default global logger in core.
  • Making all applications configure logging through a registry.
  • Locking in a Log4j/Logback-compatible configuration syntax.
Ngôn ngữ chính
Rust
Star
238
Fork
31
Merge trung bình
3 giờ 4 phút
Pull request đã merge (30 ngày)
1

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của fast/logforth

Tất cả issue của fast/logforth

Issue tương tự

Thêm issue về Rust

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.