0.5.1-pre.006
This commit is contained in:
@@ -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` ;
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
@@ -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 n’est 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. Lorsqu’un 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
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user