0.5.1-pre.006

This commit is contained in:
2026-08-10 02:44:24 +02:00
parent b6a286a4df
commit 34a670eaec
72 changed files with 5589 additions and 1932 deletions

View File

@@ -1,8 +1,13 @@
<!-- file: ks-logging/CHANGELOG.md -->
<!-- version: 14 -->
<!-- version: 15 -->
# CHANGELOG — ks-logging
## `0.5.1-pre.006`
- ajoute la sélection explicite d'un profil logging nommé afin qu'une composition binaire puisse choisir un profil indépendamment du `active_profile` propre au document logging ;
- conserve `config/logging.config.json` comme document partagé autonome, référencé par les compositions plutôt qu'imposé par un fichier applicatif monolithique.
## `0.5.1-pre.005`
- devient propriétaire unique des types `LoggingConfig`, `LogTargetConfig` et `LogTargetFilterConfig` ;

View File

@@ -1,5 +1,5 @@
<!-- file: ks-logging/README.md -->
<!-- version: 6 -->
<!-- version: 7 -->
# ks-logging
@@ -20,13 +20,13 @@
`ks-logging` dépend de `ks-config` uniquement pour le chargement du fichier `.env` et la résolution générique `${KS_*}` / `${KB_*}`. `ks-config` ne dépend pas de `ks-logging` et ne duplique aucun type logging.
Le desktop charge `config/app.config.json` et `config/logging.config.json` séparément puis transmet directement le profil logging actif à `init_logging`.
Le desktop lit le chemin `logging` et le `logging_profile` depuis `config/kb-app-demo-desktop.default.config.json`, charge le document logging puis transmet le profil explicitement sélectionné à `init_logging`.
## API publique
- `read_logging_json_file_with_environment` charge le document logging ;
- `parse_logging_json` et `validate_logging_json_schema` valident le format ;
- `active_logging_profile` sélectionne le profil actif ;
- `active_logging_profile` sélectionne le profil autonome actif et `logging_profile` résout un profil explicitement nommé par une composition ;
- `LoggingConfigDocument` et `LoggingProfileConfig` décrivent le document ;
- `LoggingConfig`, `LogTargetConfig` et `LogTargetFilterConfig` décrivent le runtime ;
- `init_logging` initialise le subscriber global ;

View File

@@ -1,5 +1,5 @@
<!-- file: ks-logging/USAGE.md -->
<!-- version: 5 -->
<!-- version: 6 -->
# Utilisation de ks-logging
@@ -23,7 +23,7 @@ let guard = match ks_logging::init_logging(config) {
};
```
Le desktop utilise `config/logging.config.json` par défaut. `KS_LOGGING_CONFIG_PATH` peut sélectionner un autre document sans modifier `KS_CONFIG_PATH` ni le profil applicatif.
Le desktop utilise normalement le chemin déclaré dans sa composition `config/kb-app-demo-desktop.default.config.json`. `KS_LOGGING_CONFIG_PATH` peut encore remplacer explicitement ce chemin sans modifier le fichier de composition.
## Format du document
@@ -47,7 +47,7 @@ Le schéma formel est `config/schemas/logging.config.schema.json`. `config/examp
## Sélection indépendante
Le `active_profile` logging nest jamais déduit de `app.config.json`. Un opérateur peut donc utiliser, par exemple, un profil applicatif `mainnet_research` avec un profil logging `local_devnet` ou tout autre profil logging explicitement défini.
Le `active_profile` logging reste le défaut autonome du document. Lorsquun binaire utilise une composition, il sélectionne explicitement son `logging_profile` avec `ks_logging::logging_profile`; cette sélection prime pour ce binaire sans modifier le document partagé.
## Construction directe

View File

@@ -1,5 +1,5 @@
// file: ks-logging/src/document.rs
// version: 1
// version: 2
//! Independent logging configuration document loading and validation.
@@ -132,21 +132,29 @@ pub fn read_logging_json_file_with_environment(
return parse_logging_json(&resolved);
}
/// Returns the active runtime logging profile selected by the logging document.
pub fn active_logging_profile(
document: &LoggingConfigDocument,
) -> ks_core::Result<&crate::LoggingConfig> {
/// Returns one named runtime logging profile.
pub fn logging_profile<'a>(
document: &'a LoggingConfigDocument,
profile_name: &str,
) -> ks_core::Result<&'a crate::LoggingConfig> {
for profile in &document.profiles {
if profile.name == document.active_profile {
if profile.name == profile_name {
return std::result::Result::Ok(&profile.config);
}
}
return std::result::Result::Err(ks_core::Error::new(
"active_logging_profile_not_found",
document.active_profile.clone(),
"logging_profile_not_found",
profile_name.to_string(),
));
}
/// Returns the active runtime logging profile selected by the logging document.
pub fn active_logging_profile(
document: &LoggingConfigDocument,
) -> ks_core::Result<&crate::LoggingConfig> {
return logging_profile(document, document.active_profile.as_str());
}
/// Validates a typed logging configuration document.
pub fn validate_logging_document(document: &LoggingConfigDocument) -> ks_core::Result<()> {
match require_non_empty(&document.active_profile, "active_profile") {
@@ -330,7 +338,9 @@ mod tests {
let result = serde_json::from_str::<serde_json::Value>(DEFAULT_LOGGING_CONFIG);
return match result {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => panic!("default logging config must be JSON: {error}"),
std::result::Result::Err(error) => {
panic!("default logging config must be JSON: {error}")
},
};
}
@@ -357,7 +367,9 @@ mod tests {
for entry_result in entries {
let entry = match entry_result {
std::result::Result::Ok(entry) => entry,
std::result::Result::Err(error) => panic!("workspace entry must be readable: {error}"),
std::result::Result::Err(error) => {
panic!("workspace entry must be readable: {error}")
},
};
let cargo_path = entry.path().join("Cargo.toml");
if !cargo_path.is_file() {
@@ -413,6 +425,7 @@ mod tests {
assert_eq!(document.active_profile, "mainnet_research");
assert_eq!(document.profiles.len(), 3);
assert!(super::active_logging_profile(&document).is_ok());
assert!(super::logging_profile(&document, "local_devnet").is_ok());
}
#[test]

View File

@@ -1,5 +1,5 @@
// file: ks-logging/src/lib.rs
// version: 8
// version: 9
//! Logging and tracing initialization for applications and workers.
#![warn(missing_docs)]
@@ -32,6 +32,8 @@ pub use self::document::active_logging_profile;
pub use self::document::logging_json_schema_text;
/// Exposes the embedded logging JSON Schema parser.
pub use self::document::logging_json_schema_value;
/// Exposes one named logging profile resolver.
pub use self::document::logging_profile;
/// Exposes logging configuration parsing from JSON.
pub use self::document::parse_logging_json;
/// Exposes logging configuration loading from a filesystem path.