Aide ! Gérer le Log level d'un plugin par programmation

Bonjour à tous,

J’aurais besoin d’un peu d’aide pour arriver à fixer le Log Level avec du code PHP.

Dans la page de configuration de mon plugin, je fixe le Log Level en cliquant sur le choix listé et en faisant « Sauvegarder » :

Une nouvelle instruction log::add() est alors affichée immédiatement (en accord avec les règles hiérarchiques) et le fonctionnement est nominal.

J’essaye de réaliser la même opération par programmation avec le code suivant (lancé par un appel Ajax ou pas) :

      $logLevelNm1       = log::getLogLevel($pluginId); // Log Level N-1
      echo $logLevelNm1 . ' ';
      
      log::add($pluginId, 'info', 'Message Test 1');
      
      // Set plugin LOG level = Info
      $logLevelKey    = 'log::level::' . $pluginId;
      $logLevelValue  = '{"100":"0","200":"1","300":"0","400":"0","1000":"0","default":"0"}'; // "200"=Info
      $return         = config::save($logLevelKey, $logLevelValue, 'core');                   // Return true if OK
      
      $logLevelN       = log::getLogLevel($pluginId); // Log Level N
      echo $logLevelN . ' ';
      $logLevelName   = log::convertLogLevel($logLevelN);
      echo $logLevelName . ' ';
            
      log::add($pluginId, 'info', 'Message Test 2');

et je constate que le changement de niveau de Log n’est pas IMMEDIATEMENT pris en compte.
Une vérification dans la BdD montre que le niveau de Log a bien été changé par l’instruction mais la class log.class.php ne tient pas compte du changement immédiatement.
Il faut que je relance le script ci-dessus pour que le changement soit effectif.

Cela est imagé dans l’affichage des messages echo ci-dessous :

  1. Log Level du plugin initial positionné manuellement : (Aucun = « 1000 »)

  2. Le script est lancé une fois. Le niveau N-1 est bien 1000 mais le niveau N (après changement) est toujours 1000
    image_2024-01-23_145352962
    Le message de Log (n°2) n’est pas affiché.

  3. Le script est relancé et cette fois-ci, le niveau N-1 est bien (Info = « 200 »)
    image_2024-01-23_145425730
    Les 2 message de Log (n°1 & n°2) sont bien affichés.

C’est comme si il manquait une instruction qui réalise l’équivalent du « Sauvegarder » manuel.

J’ai épluché le code du Core mais je n’ai pas réussi à trouver quoique ce soit qui m’aide et me débloque.

J’espère avoir été clair dans ma description.

Une idée ? Quelle serait l’instruction à rajouter ?
Merci d’avance


Mes infos de config :

RPi5 - Debian 12
Core : 4.4.2 (alpha)
DNS Jeedom : non

Salut,

Je ne comprend pas l’intérêt: c’est se compliquer la vie (la preuve ce post) et la vie des utilisateurs pour rien;
ils ont (ou doivent prendre) l’habitude/connaissance de l’endroit où l’on configure le log level;
si certains plugins commencent à faire autrement ca va juste être le bazar…


sinon ton problème est simple: le logger pour $pluginId est déjà instancié à la 3ème ligne avec le loglevel qui était configuré à ce moment
à la dernière ligne c’est le même logger, toujours avec le même loglevel.

Merci pour ton retour,

Pour ton info : je ne sais pas si tu y verras un intérêt mais je pensais implémenter ce morceaux de code dans le module install.php du plugin.
Lors de l’éxécution de ce module, le Log Level est fixé par défault par le core et l’utilisateur n’a pas encore connaissance qu’il va y avoir des infos enregistrées pendant l’installation du plugin.
Cependant, ca pourrait être utile pour un éventuel debug.
C’était une idée …

Merci pour le tips concernant le logger qui n’est pas ré-instancié.
Je vais regarder si je peux modifier le code pour que cela fonctionne.

Sinon tu logs en mode alert si tu veux absolument que ca soit log
C’est ce que le core fait dans certains cas

Oui c’est une solution, je te remercie.

Mais je pense que au travers de ta réponse, tu m’as aiguillé vers une solution encore plus sympa qui est tout simplement de créer un nouveau registre de Log (par exemple pluginId_install).
Le sujet install le mérite et l’utilisateur peut en faire ce qu’il veut ensuite.

Encore merci. Je clos le sujet.

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.