Jeedom 4.5 - un manque de logs dans les scénarios

Bonjour,

Je suis passé en 4.5 il y a quelques jours, j’ai voulu examiner un comportement anormal et je me rends compte que la plupart des logs n’ont plus grand chose dedans.

Exemple avec un scénario qui tourne chaque jours à 10h

Un autre dans lequel je ne peux voir que jusqu’au 28/11 12h39


Il a actuellement 223 lignes et dans ma config général coté logs je devrais avoir au max 10000 lignes :

Je ne sais pas si le fait que « Défaut » ne soit pas coché sur la ligne de scénario soit un problème donc je viens de cocher et sauver …

Un autre exemple avec un maximum au 26/11 03:00 alors qu’il a 307 lignes :

J’ai essayé de « Télécharger » les logs en me disais qu’il y avait peut-être le reste dedans mais c’est pas le cas.

Il y a une refonte des logs dans la 4.5 :

Refonte de l’écriture dans les logs, suppression de la bibliothèque monolog (attention l’option d’envoi des logs dans syslog n’est plus disponible pour le moment, si la demande est forte nous verrons pour la remettre)

Je n’ai pas eu d’erreur lors de la mise à jour donc je ne me sent pas concerné par cette phrase :

Dû à la refonte des logs et la réinternalisation de bibliothèques, lors de la mise à jour vous pouvez avoir une erreur type PHP Fatal error (rien de grave) il suffit de relancer la mise à jour.

Est-ce que vous pourriez regardez dans vos scénarios si vous avez le même soucis ?

Bonjour,

J’ai regardé de mon côté, et je n’ai rien d’anormal depuis mon passage en v4.5.
Voici mes paramètres de configuration des logs :

Pour les scénarios, je n’ai rien coché de particulier.

Et j’ai bien les logs qui se remplissent régulièrement :

Si je télécharge ces logs, comme d’habitude je remonte plus en amont dans le temps, pas de soucis non plus…

1 « J'aime »

Bonjour,

J’ai un scénario qui se déclenche toutes les 15 s en moyenne !
Log dans la fenêtre Jeedom = 500 lignes (comme paramétré)
Log téléchargé environ 23 000 lignes !

1 « J'aime »

Bonjour,

Même comportement que DanielJ, tout est ok chez moi.

Extrait d’un log sur le control de l’état d’un module :

------------------------------------
[2025-11-29 09:00:07][SCENARIO] -- Début : . Tags : {"#trigger#":"other","#trigger_name#":"","#trigger_id#":"","#trigger_message#":"Lancement provoqué","#trigger_value#":""}
[2025-11-29 09:00:07][SCENARIO] - Exécution du sous-élément de type [action] : action
[2025-11-29 09:00:07][SCENARIO] Pause de 10 seconde(s)
[2025-11-29 09:00:17][SCENARIO] - Exécution du sous-élément de type [condition] : if #[Chauffage][Thermostat][Actif]# != #[Chauffage][2 - Qubino Flush 1D relay ZMNHND - Chaudière][Etat]#
[2025-11-29 09:00:17][SCENARIO] Evaluation de la condition : [1 != 1] = Faux
[2025-11-29 09:00:17][SCENARIO] - Exécution du sous-élément de type [action] : else
[2025-11-29 09:00:17][SCENARIO] Exécution de la commande [Jeedom][PlayMP3][Lecture Fichier] avec comme option(s) : {"background":"0","title":"","message":"\/var\/www\/html\/plugins\/playtts\/data\/sons\/thermostat.wav"}
[2025-11-29 09:00:18][SCENARIO] Fin correcte du scénario
------------------------------------
[2025-11-29 09:03:04][SCENARIO] -- Début : . Tags : {"#trigger#":"other","#trigger_name#":"","#trigger_id#":"","#trigger_message#":"Lancement provoqué","#trigger_value#":""}
[2025-11-29 09:03:04][SCENARIO] - Exécution du sous-élément de type [action] : action
[2025-11-29 09:03:04][SCENARIO] Pause de 10 seconde(s)
[2025-11-29 09:03:14][SCENARIO] - Exécution du sous-élément de type [condition] : if #[Chauffage][Thermostat][Actif]# != #[Chauffage][2 - Qubino Flush 1D relay ZMNHND - Chaudière][Etat]#
[2025-11-29 09:03:14][SCENARIO] Evaluation de la condition : [0 != 0] = Faux
[2025-11-29 09:03:14][SCENARIO] - Exécution du sous-élément de type [action] : else
[2025-11-29 09:03:14][SCENARIO] Exécution de la commande [Jeedom][PlayMP3][Lecture Fichier] avec comme option(s) : {"background":"0","title":"","message":"\/var\/www\/html\/plugins\/playtts\/data\/sons\/thermostat.wav"}
[2025-11-29 09:03:14][SCENARIO] Fin correcte du scénario
------------------------------------
[2025-11-29 10:00:06][SCENARIO] -- Début : . Tags : {"#trigger#":"other","#trigger_name#":"","#trigger_id#":"","#trigger_message#":"Lancement provoqué","#trigger_value#":""}
[2025-11-29 10:00:06][SCENARIO] - Exécution du sous-élément de type [action] : action
[2025-11-29 10:00:06][SCENARIO] Pause de 10 seconde(s)
[2025-11-29 10:00:16][SCENARIO] - Exécution du sous-élément de type [condition] : if #[Chauffage][Thermostat][Actif]# != #[Chauffage][2 - Qubino Flush 1D relay ZMNHND - Chaudière][Etat]#
[2025-11-29 10:00:16][SCENARIO] Evaluation de la condition : [1 != 1] = Faux
[2025-11-29 10:00:16][SCENARIO] - Exécution du sous-élément de type [action] : else
[2025-11-29 10:00:16][SCENARIO] Exécution de la commande [Jeedom][PlayMP3][Lecture Fichier] avec comme option(s) : {"background":"0","title":"","message":"\/var\/www\/html\/plugins\/playtts\/data\/sons\/thermostat.wav"}
[2025-11-29 10:00:17][SCENARIO] Fin correcte du scénario
------------------------------------
[2025-11-29 10:08:03][SCENARIO] -- Début : . Tags : {"#trigger#":"other","#trigger_name#":"","#trigger_id#":"","#trigger_message#":"Lancement provoqué","#trigger_value#":""}
[2025-11-29 10:08:03][SCENARIO] - Exécution du sous-élément de type [action] : action
[2025-11-29 10:08:03][SCENARIO] Pause de 10 seconde(s)
[2025-11-29 10:08:13][SCENARIO] - Exécution du sous-élément de type [condition] : if #[Chauffage][Thermostat][Actif]# != #[Chauffage][2 - Qubino Flush 1D relay ZMNHND - Chaudière][Etat]#
[2025-11-29 10:08:13][SCENARIO] Evaluation de la condition : [0 != 0] = Faux
[2025-11-29 10:08:13][SCENARIO] - Exécution du sous-élément de type [action] : else
[2025-11-29 10:08:13][SCENARIO] Exécution de la commande [Jeedom][PlayMP3][Lecture Fichier] avec comme option(s) : {"background":"0","title":"","message":"\/var\/www\/html\/plugins\/playtts\/data\/sons\/thermostat.wav"}
[2025-11-29 10:08:14][SCENARIO] Fin correcte du scénario

Je « pense » que Défaut devrait être coché partout, je suis dans la même configuration que DanielJ, malgré cela, il semble bien que le niveau défaut soit pris en compte. A tester en forçant chez toi.

1 « J'aime »

Hello,

C’est marrant toi tu configures à 500 lignes et tu en a bien plus dans le log téléchargé, je savais même pas que c’était possible…

Moi non plus :joy:

C’est la 1ere fois que je télécharge un fichier log ; habituellement je faisais un copier-coller

Le fichier téléchargé commence à peu près au moment de la sauvegarde automatique soit vers 2h30 chez moi

Après pour aller voir tous les logs il suffit d’utiliser Editeur de fichiers et d’aller dans

html/log/scenariolog

D’après mes calculs, le log aurait été effacé à 2h42 juste avant la sauvegarde de 2h46 en gardant 500 lignes comme paramétré

J’ai d’ailleurs bien un crondaily à 2h42 et un autre pour la sauvegarde à 2h46

Même constat ce matin.

Mon scénario " SC Pilotage ECS avec routeur PV et BBR" est vide alors qu’il y avait bien des lignes de logs dans la journée d’hier après 10h (l’heure de programmation)

Dans le répertoire, effectivement on voit bien que les logs sont purgés à 2h57 et que celui du scenario 212 est à 0 b

Pour moi c’est pas normal, il y a un truc qui ne va pas depuis le passage en 4.5 mais si ça marche comme il faut chez vous, c’est moins facile à identifier :frowning:

C’est bien le crondaily qui fait visiblement ce boulot

Le paramétrage est toujours bon

Bonjour,
Il y a aussi un paramètre Log dans chaque scénario.

Salut,

Tu parles de celui-ci ou d’un autre que je n’aurais pas vu (et qui aurait donc salement changé lors de l’upgrade) ?

Oui, c’est bien celui là.
Et comme ton log Scénario est Défaut et le log Défaut est Erreur:
image
AMHA ce n’est pas anormal qu’il n’y ait pas de log.
Avec les mêmes niveaux de log que toi, j’ai des logs à l’exécution du scénario.

A première vue je ne vois pas le rapport. Si le niveau de logs n’était pas bon, rien ne serait enregistré dans le log du scenario et ce n’est pas le problème ici.

Il est plus de 10h, est comme mon scénario s’est déclenché, il y a bien des logs dedans

Le problème se passe lors du crondaily, les logs sont purgés chez moi de façon très agressive et pour prendre l’exemple de ce scénario, il est totalement vidé

Donc, ce n’est pas un souci de niveau de log.

La fonction qui tronque les logs est ici:

A toi de voir ce qui fait que la taille de ton log est à 0 après le passage de jeedom::cronDaily

Oui je suis dessus depuis 20mn pour essayer de voir ce qui ne va pas …

Mais comme tu peux le voir sur ma capture des logs, il y a pas mal de logs qui sont traités à 02h57 et qui ne sont pas à 0 b

Et ceux là aussi ne sont pas bon car je n’efface jamais les logs de scénario et ils ne contiennent maintenant que quelques jours ou heures de logs tout en étant à bien moins de 10000 lignes chacun

Bonjour,

J’ai bien conservé dans les logs les 500 lignes avant l’heure de remise à 0 (2h42 chez moi) bien que ma configuration des logs scénario soit aussi sur Défaut - Erreur.

Je viens de passer à 1250 lignes pour voir le résultat demain

Ne serait-ce pas le très grand nombre de lignes paramétré qui poserait problème ?

Je n’exclus rien mais pour moi c’est assez improbable, le code utilise la fonction « tail » de linux et je ne pense pas qu’elle pose problème d’autant plus qu’avant ça fonctionnait très bien.

J’ai été récupéré une ligne de code du core issue de la 4.4 histoire de voir ce que ça donne cette nuit.

Il y a 2 différences et maintenant en 4.5:

  • un passage sur les fichiers pour définir owner/group
  • l’exécution du tail en sudo

Ce n’est pas que tail.
C’est le résultat de la commande tail d’un fichier qui est placé dans le même fichier via echo

 echo "$(tail -n ' . $maxLineLog . ' ' . $_path . ')" > ' . $_path

ChatGPT pense que
image
et propose:
image

A voir comment les daemons qui utilisaient ces logs vont se comporter puisque les fichiers qu’ils avaient ouverts ont changé.
Edit: avec mv fichier.tmp fichier, les daemons n’écrivent plus dans fichier. (Avec mv l’inode de fichier change)
Il faut :

tail -n 10000 fichier  > fichier.tmp && cat fichier.tmp > fichier  && rm fichier.tmp
1 « J'aime »

Hello,

Oui, je simplifiais un peu juste pour essayer de dire que je ne vois pas ce genre de commandes buguer pour 10000 lignes.

Bref ce matin comme fortement envisagé, le retour à la ligne de commande issue de la V4 a fonctionné comme il faut, pas de suppressions de logs, notamment dans ce scénario qui revenait systématiquement à zéro

Du coup reste bien que 2 commande à analyser :

system::getCmdSudo() . 'chown -R ' . system::get('www-uid') . ':' . system::get('www-gid') . ' ' . $_path.' > /dev/null 2>&1;'

et

system::getCmdSudo() . ' echo "$(tail -n ' . $maxLineLog . ' ' . $_path . ')" > ' . $_path

Je vais tenter de rajouter la 1ere partie et ne pas faire l’echo avec le sudo …
Je ne vois pas en quoi la 1ere ou la 2eme partie pourrait poser problème mais c’est pourtant le cas.

Merci pour le passage de la commande dans une IA, ça sera à tester aussi

Bonjour,

Je pense qu’il y a effectivement un pb avec le sudo echo tail ....
Pour les logs des fichiers qui avaient une certaine taille (~100ko et plus), le contenu du fichier log est après passage du cronDaily : sh: 1: sudo: Argument list too long

J’ai modifié ainsi pour améliorer la visibilité et simplifier :

    $sudo = system::getCmdSudo(); // appelé plusieurs fois et ne change pas
    $uid = system::get('www-uid'); // appelé plusieurs fois et ne change pas
    $gid = system::get('www-gid'); // appelé plusieurs fois et ne change pas
		try {
			com_shell::execute("$sudo chmod 664 $_path > /dev/null 2>&1");
			com_shell::execute("$sudo chown -R $uid:$gid $_path > /dev/null 2>&1");
            // com_shell::execute($sudo .' echo "$(tail -n ' .$maxLineLog .' ' .$_path .')" > ' .$_path);
			com_shell::execute("$sudo tail -n $maxLineLog $_path  > $_path.tmp && cat $_path.tmp > $_path  && rm $_path.tmp");

			// com_shell::execute(system::getCmdSudo() . 'chmod 664 ' . $_path . ' > /dev/null 2>&1;'. system::getCmdSudo() . 'chown -R ' . system::get('www-uid') . ':' . system::get('www-gid') . ' ' . $_path.' > /dev/null 2>&1;'.system::getCmdSudo() . ' echo "$(tail -n ' . $maxLineLog . ' ' . $_path . ')" > ' . $_path);
      
		} catch (\Exception $e) {
		}
		@chown($_path, $uid);
		@chgrp($_path, $gid);

Hello,

Oui, je confirme que c’est bon avec ce que j’avais mis hier et donc il ne reste plus que cette commande sudo echo "$(tail... qui ne fonctionne pas comme il faut. Sans le sudo c’est bon.

Merci d’avoir confirmé que c’était KO aussi chez toi, je ne comprends pas encore pourquoi tout le monde ici avait l’air de ne pas être impacté :slight_smile:

Tu me diras ce que ça donne avec ton nouvel enchainement de commandes demain matin :slight_smile: