Thomas wrote:> modifier du code source ?
Non, pas difficile, si ton application est disponible en code source.
ah bon ? ça m'étonne.
si c'est vraiment simple ça m'arrangerais bien, ça pourrais changer la
suite :-)
Bien souvent, les applications UNIX sont données en source, on fait
./configure --avec-les-trucs-qui-nous-arrangent
make all install
et on a configuré les chemins qu'on veut.
http://svn.savannah.gnu.org/viewvc/rapid/branches/gtkada-2.24/src/tki/mcc
_tki/mcc-msg.ads?revision"4&view=markup ( https://urlpetite.fr/5j2 )
comment t'y prendrais-tu ?
C'est une déclaration d'interface, je pense ?
Dans ce cas, je vois deux idées:
- injecter une dépendance Í un module de configuration générale,
-> variante dynamique
- dans le fichier Ada écrire MCC_MSG_ERROR_LOG_FILE_NAME plutÍ´t
que "rapid_errors.log"
-> variante statique
et quand c'est toi qui en as besoin, quel nom donnes tu ?
En général mes fichiers sont gérés en contrÍ´le de version (CVS ou Git),
donc je n'ai pas de fichiers de backup.
Mais certains logiciels que j'utilisent ont une convention .old, .orig,
.bak, ~ ... ça m'est assez égal je dois dire.
moins gênant possible pour toi, si jamais un jour tu devais être
l'intégrateur de mon logiciel :-)
Bon, le souci c'est que je ne suis même pas sÍ»r de comprendre l'objectif
:)
Thomas <fantome.forums.tDeContes@free.fr.invalid> wrote:
>> > modifier du code source ?
>>
>> Non, pas difficile, si ton application est disponible en code source.
>
> ah bon ? ça m'étonne.
> si c'est vraiment simple ça m'arrangerais bien, ça pourrais changer la
> suite :-)
Bien souvent, les applications UNIX sont données en source, on fait
./configure --avec-les-trucs-qui-nous-arrangent
make all install
et on a configuré les chemins qu'on veut.
> http://svn.savannah.gnu.org/viewvc/rapid/branches/gtkada-2.24/src/tki/mcc
> _tki/mcc-msg.ads?revision"4&view=markup ( https://urlpetite.fr/5j2 )
> comment t'y prendrais-tu ?
C'est une déclaration d'interface, je pense ?
Dans ce cas, je vois deux idées:
- injecter une dépendance Í un module de configuration générale,
-> variante dynamique
- dans le fichier Ada écrire MCC_MSG_ERROR_LOG_FILE_NAME plutÍ´t
que "rapid_errors.log"
-> variante statique
> et quand c'est toi qui en as besoin, quel nom donnes tu ?
En général mes fichiers sont gérés en contrÍ´le de version (CVS ou Git),
donc je n'ai pas de fichiers de backup.
Mais certains logiciels que j'utilisent ont une convention .old, .orig,
.bak, ~ ... ça m'est assez égal je dois dire.
> moins gênant possible pour toi, si jamais un jour tu devais être
> l'intégrateur de mon logiciel :-)
Bon, le souci c'est que je ne suis même pas sÍ»r de comprendre l'objectif
:)
Thomas wrote:> modifier du code source ?
Non, pas difficile, si ton application est disponible en code source.
ah bon ? ça m'étonne.
si c'est vraiment simple ça m'arrangerais bien, ça pourrais changer la
suite :-)
Bien souvent, les applications UNIX sont données en source, on fait
./configure --avec-les-trucs-qui-nous-arrangent
make all install
et on a configuré les chemins qu'on veut.
http://svn.savannah.gnu.org/viewvc/rapid/branches/gtkada-2.24/src/tki/mcc
_tki/mcc-msg.ads?revision"4&view=markup ( https://urlpetite.fr/5j2 )
comment t'y prendrais-tu ?
C'est une déclaration d'interface, je pense ?
Dans ce cas, je vois deux idées:
- injecter une dépendance Í un module de configuration générale,
-> variante dynamique
- dans le fichier Ada écrire MCC_MSG_ERROR_LOG_FILE_NAME plutÍ´t
que "rapid_errors.log"
-> variante statique
et quand c'est toi qui en as besoin, quel nom donnes tu ?
En général mes fichiers sont gérés en contrÍ´le de version (CVS ou Git),
donc je n'ai pas de fichiers de backup.
Mais certains logiciels que j'utilisent ont une convention .old, .orig,
.bak, ~ ... ça m'est assez égal je dois dire.
moins gênant possible pour toi, si jamais un jour tu devais être
l'intégrateur de mon logiciel :-)
Bon, le souci c'est que je ne suis même pas sÍ»r de comprendre l'objectif
:)
Thomas wrote:le bytecode c'est le truc qu'on fait interpréter par les JVM ?
Le bytecode pur est interprété, pas compilé, par la JVM.(dans ce cas lÍ il y a un peu de compilation quand même, puisque c'est
du code intermédiaire)
par contre, si c'est le logiciel lui-même qui doit envoyer ses logs au
serveur, je ne crois pas que ça puisse très bien marcher si c'est
l'intégrateur qui est chargé de gérer les fichiers !
Mais fais attention, tu poses des questions dans toutes les directions,
donc tu risques d'avoir des réponses dans toutes les directions.
Ah, le debug je l'activerais optionnellement et Í part.
oui, ça c'est déjÍ fait (mais si on l'active il faut bien que je le
traite).
(heu ... ça veut dire quoi "Í part" ?)
dans un fichier séparé.
as tu des exemples d'opérations normales ?
(on était en mode graphique, lÍ )
L'application graphique a réussi Í charger le fichier toto.
Le fichier toto a été modifié en appliquant l'instruction blala.
(c'est du debug, donc).
quand tu dis "version du programme",
est-ce que tu parles seulement d'une option "--version",
ou bien est-ce que ça vaut aussi pour la version du programme qui est
affichée automatiquement quand on active le debug ?
LÍ je ne suis plus, désolé.
j'ai oublié de te demander, mais je suppose que si on a un "usage: ..."
c'est pareil.
Donc, dans ce cas de mettre l'erreur (mauvais arguments) et le message
d'"usage" dans stderr.
Par contre, si tu traites un --help, alors je mettrais la "réponse" dans
stdout.
si on active le debug, est ce qu'on doit n'avoir aucun msg de debug,
mais avoir la version qui s'affiche en plus ?
Je ne vois pas pourquoi la version serait nécessaire, ou alors au début
du debug pour t'aider Í trier les éventuels rapports de bug?
Thomas <fantome.forums.tDeContes@free.fr.invalid> wrote:
> le bytecode c'est le truc qu'on fait interpréter par les JVM ?
Le bytecode pur est interprété, pas compilé, par la JVM.
> (dans ce cas lÍ il y a un peu de compilation quand même, puisque c'est
> du code intermédiaire)
> par contre, si c'est le logiciel lui-même qui doit envoyer ses logs au
> serveur, je ne crois pas que ça puisse très bien marcher si c'est
> l'intégrateur qui est chargé de gérer les fichiers !
Mais fais attention, tu poses des questions dans toutes les directions,
donc tu risques d'avoir des réponses dans toutes les directions.
>> Ah, le debug je l'activerais optionnellement et Í part.
>
> oui, ça c'est déjÍ fait (mais si on l'active il faut bien que je le
> traite).
>
> (heu ... ça veut dire quoi "Í part" ?)
dans un fichier séparé.
> as tu des exemples d'opérations normales ?
> (on était en mode graphique, lÍ )
L'application graphique a réussi Í charger le fichier toto.
Le fichier toto a été modifié en appliquant l'instruction blala.
(c'est du debug, donc).
> quand tu dis "version du programme",
> est-ce que tu parles seulement d'une option "--version",
> ou bien est-ce que ça vaut aussi pour la version du programme qui est
> affichée automatiquement quand on active le debug ?
LÍ je ne suis plus, désolé.
> j'ai oublié de te demander, mais je suppose que si on a un "usage: ..."
> c'est pareil.
Donc, dans ce cas de mettre l'erreur (mauvais arguments) et le message
d'"usage" dans stderr.
Par contre, si tu traites un --help, alors je mettrais la "réponse" dans
stdout.
> si on active le debug, est ce qu'on doit n'avoir aucun msg de debug,
> mais avoir la version qui s'affiche en plus ?
Je ne vois pas pourquoi la version serait nécessaire, ou alors au début
du debug pour t'aider Í trier les éventuels rapports de bug?
Thomas wrote:le bytecode c'est le truc qu'on fait interpréter par les JVM ?
Le bytecode pur est interprété, pas compilé, par la JVM.(dans ce cas lÍ il y a un peu de compilation quand même, puisque c'est
du code intermédiaire)
par contre, si c'est le logiciel lui-même qui doit envoyer ses logs au
serveur, je ne crois pas que ça puisse très bien marcher si c'est
l'intégrateur qui est chargé de gérer les fichiers !
Mais fais attention, tu poses des questions dans toutes les directions,
donc tu risques d'avoir des réponses dans toutes les directions.
Ah, le debug je l'activerais optionnellement et Í part.
oui, ça c'est déjÍ fait (mais si on l'active il faut bien que je le
traite).
(heu ... ça veut dire quoi "Í part" ?)
dans un fichier séparé.
as tu des exemples d'opérations normales ?
(on était en mode graphique, lÍ )
L'application graphique a réussi Í charger le fichier toto.
Le fichier toto a été modifié en appliquant l'instruction blala.
(c'est du debug, donc).
quand tu dis "version du programme",
est-ce que tu parles seulement d'une option "--version",
ou bien est-ce que ça vaut aussi pour la version du programme qui est
affichée automatiquement quand on active le debug ?
LÍ je ne suis plus, désolé.
j'ai oublié de te demander, mais je suppose que si on a un "usage: ..."
c'est pareil.
Donc, dans ce cas de mettre l'erreur (mauvais arguments) et le message
d'"usage" dans stderr.
Par contre, si tu traites un --help, alors je mettrais la "réponse" dans
stdout.
si on active le debug, est ce qu'on doit n'avoir aucun msg de debug,
mais avoir la version qui s'affiche en plus ?
Je ne vois pas pourquoi la version serait nécessaire, ou alors au début
du debug pour t'aider Í trier les éventuels rapports de bug?
Thomas wrote:tu as déjÍ programmé en Ada, et maintenant tu développes de l'embarqué
en C ?
Oui, et je précise: C, pas C++.
Mes langages préférés sont: Perl, C, bash.
dans la note 7, ça parle de trucs que je ne connais pas, et pas un mot
sur $HOME, même pas en mal !
est ce que $HOME est suffisamment fiable et portable quand même ?mais au fait, peut être considères-tu que les applications ne devraient
juste pas essayer de s'en mêler, et que c'est aux intégrateurs de faire
l'interface via le wrapper script ?
J'ai assez tendance Í aimer le `convention over configuration', tout en
laissant possible de configurer si on a envie.
Quel format texte? Totalement égal si je peux le générer avec un
template.
ok,
connais-tu un endroit (tutoriel ?) qui explique comment fonctionnent les
templates ?
Exemple en bash:
cat > fichier <<EOF
variable=$ma_variable
EOF
---> SI C'EST DU TEXTE, J'AIME!
Du point de vue de ton application, il est possible que l'écriture dans
ces fichiers retourne une erreur, oui.
ah bon ?
concrètement, dans quels cas ça peut arriver ?
Disque plein? Si ce sont des logs ce n'est pas grave. Si ce sont des
données, il faut gérer l'erreur.
d'après le reste du fil, j'ai cru comprendre que tu préférais plutÍ´t que
mon logiciel ne fasse pas de fichiers de log.
Oui, si c'est pour que personne ne les lise jamais ...
donc par exemple : s'il y a un pb Í la lecture du fichier de config, je
Tu peux écrire sur stderr "pas trouvé la config", ou, si le programme a
été lancé sans arguments de ligne de commande, supposer qu'il a été
lancé en GUI et lÍ ouvrir un dialogue.tu considères que si on dit dans le fichier de config qu'on veut des
fichiers de log, alors ils doivent être vraiment faits ?
Comme disait quelqu'un d'autre, on peut aussi imaginer d'activer ou non
le logging et le debugging.que me suggères tu Í cette étape ? :-)
les erreurs il faut les communiquer Í l'utilisateur, soit sous forme
d'un dialogue (GUI) soit sous forme d'une écriture dans stderr.
Les diagnostics de l'applications peuvent aller dans stdout ou dans un
fichier de log, mais peut-être qu'il faudrait les activer explicitement
dans la config.
Thomas <fantome.forums.tDeContes@free.fr.invalid> wrote:
> tu as déjÍ programmé en Ada, et maintenant tu développes de l'embarqué
> en C ?
Oui, et je précise: C, pas C++.
Mes langages préférés sont: Perl, C, bash.
> dans la note 7, ça parle de trucs que je ne connais pas, et pas un mot
> sur $HOME, même pas en mal !
> est ce que $HOME est suffisamment fiable et portable quand même ?
> mais au fait, peut être considères-tu que les applications ne devraient
> juste pas essayer de s'en mêler, et que c'est aux intégrateurs de faire
> l'interface via le wrapper script ?
J'ai assez tendance Í aimer le `convention over configuration', tout en
laissant possible de configurer si on a envie.
>> Quel format texte? Totalement égal si je peux le générer avec un
>> template.
>
> ok,
> connais-tu un endroit (tutoriel ?) qui explique comment fonctionnent les
> templates ?
Exemple en bash:
cat > fichier <<EOF
variable=$ma_variable
EOF
---> SI C'EST DU TEXTE, J'AIME!
>> Du point de vue de ton application, il est possible que l'écriture dans
>> ces fichiers retourne une erreur, oui.
>
> ah bon ?
> concrètement, dans quels cas ça peut arriver ?
Disque plein? Si ce sont des logs ce n'est pas grave. Si ce sont des
données, il faut gérer l'erreur.
> d'après le reste du fil, j'ai cru comprendre que tu préférais plutÍ´t que
> mon logiciel ne fasse pas de fichiers de log.
Oui, si c'est pour que personne ne les lise jamais ...
> donc par exemple : s'il y a un pb Í la lecture du fichier de config, je
Tu peux écrire sur stderr "pas trouvé la config", ou, si le programme a
été lancé sans arguments de ligne de commande, supposer qu'il a été
lancé en GUI et lÍ ouvrir un dialogue.
> tu considères que si on dit dans le fichier de config qu'on veut des
> fichiers de log, alors ils doivent être vraiment faits ?
Comme disait quelqu'un d'autre, on peut aussi imaginer d'activer ou non
le logging et le debugging.
> que me suggères tu Í cette étape ? :-)
les erreurs il faut les communiquer Í l'utilisateur, soit sous forme
d'un dialogue (GUI) soit sous forme d'une écriture dans stderr.
Les diagnostics de l'applications peuvent aller dans stdout ou dans un
fichier de log, mais peut-être qu'il faudrait les activer explicitement
dans la config.
Thomas wrote:tu as déjÍ programmé en Ada, et maintenant tu développes de l'embarqué
en C ?
Oui, et je précise: C, pas C++.
Mes langages préférés sont: Perl, C, bash.
dans la note 7, ça parle de trucs que je ne connais pas, et pas un mot
sur $HOME, même pas en mal !
est ce que $HOME est suffisamment fiable et portable quand même ?mais au fait, peut être considères-tu que les applications ne devraient
juste pas essayer de s'en mêler, et que c'est aux intégrateurs de faire
l'interface via le wrapper script ?
J'ai assez tendance Í aimer le `convention over configuration', tout en
laissant possible de configurer si on a envie.
Quel format texte? Totalement égal si je peux le générer avec un
template.
ok,
connais-tu un endroit (tutoriel ?) qui explique comment fonctionnent les
templates ?
Exemple en bash:
cat > fichier <<EOF
variable=$ma_variable
EOF
---> SI C'EST DU TEXTE, J'AIME!
Du point de vue de ton application, il est possible que l'écriture dans
ces fichiers retourne une erreur, oui.
ah bon ?
concrètement, dans quels cas ça peut arriver ?
Disque plein? Si ce sont des logs ce n'est pas grave. Si ce sont des
données, il faut gérer l'erreur.
d'après le reste du fil, j'ai cru comprendre que tu préférais plutÍ´t que
mon logiciel ne fasse pas de fichiers de log.
Oui, si c'est pour que personne ne les lise jamais ...
donc par exemple : s'il y a un pb Í la lecture du fichier de config, je
Tu peux écrire sur stderr "pas trouvé la config", ou, si le programme a
été lancé sans arguments de ligne de commande, supposer qu'il a été
lancé en GUI et lÍ ouvrir un dialogue.tu considères que si on dit dans le fichier de config qu'on veut des
fichiers de log, alors ils doivent être vraiment faits ?
Comme disait quelqu'un d'autre, on peut aussi imaginer d'activer ou non
le logging et le debugging.que me suggères tu Í cette étape ? :-)
les erreurs il faut les communiquer Í l'utilisateur, soit sous forme
d'un dialogue (GUI) soit sous forme d'une écriture dans stderr.
Les diagnostics de l'applications peuvent aller dans stdout ou dans un
fichier de log, mais peut-être qu'il faudrait les activer explicitement
dans la config.
Le 24-09-2021, Thomas a écrit :mais au fait, peut être considères-tu que les applications ne devraient
juste pas essayer de s'en mêler, et que c'est aux intégrateurs de faire
l'interface via le wrapper script ?
On y arrive.
Soit tu ne veux voire les choses que d'un cÍ´té applicatif. Dans ce cas,
c'est simple, tu balances tout sur stdout et stderr et tu laisses les
intégrateurs, admins systèmes et utilisateurs finaux gérer ce qu'ils en
font comme ils le veulent.
Si les logs sont perdus lancés en mode
graphique, c'est pas grave, l'utilisateur a toujours la possibilité de
lancer en ligne de commande (même le mode graphique) pour voir les logs
qui l'intéressent sur le terminal le jour o͹ il veut comprendre.
Soit tu veux absolument, écrire des logs dans un fichier et ça commence
Í être de l'administration système. Et c'est lÍ que ça commence Í être
rigolo.
D'abord, il faut que quoiqu'il arrive, l'absence de possibilité
d'écrire tes logs ne puisse pas empêcher ton appli de tourner. Ça veut
dire que dans ton code tu dois prendre en compte une mauvaise
installation ou un mauvais lancement.
Ensuite, il y a le packager qui doit pouvoir choisir le répertoire de
logs par défaut lors de l'installation. Puis, l'admin système doit
pouvoir en choisir un autre pour l'ensemble de ses utilisateurs. Puis,
un utilisateur particulier doit pouvoir choisir o͹ il met les logs pour
lui. Avec la possibilité de changer les logs par une option lors du
démarrage s'il veut faire un test.
C'est pour ça qu'il faut bien que tu fasses attention Í la préséance
dans le choix des possibilités si c'est défini Í plusieurs endroits. Il
faut absolument que ce qui est écrit en dur dans ton code ne soit utilisé
que si rien d'autre n'est trouvé. Il faut aussi que l'option en ligne de
commande prenne le dessus sur toutes les variables d'environnement et
fichiers de conf. De même que l'utilisateur final peut écrire dans son
$HOME et pas dans /etc et donc /etc va être réservé Í l'admin système ou
au packager et être moins prioritaire que $HOME.
Pour la séparation de stdout et stderr, c'est pas forcément très utile.
Il me semble préférable de tout mettre au même endroit avec un niveau de
log qui contient un tag et qui est paramétrable. Par exemple, tu mets du
DEBUG, INFO, WARNING et ERROR quand tu envoies tes logs avec un niveau
d'activation faible en temps normal pour avoir moins de lignes et tu
affiches tout quand tu veux comprendre ce qu'il se passe.
Le 24-09-2021, Thomas <fantome.forums.tDeContes@free.fr.invalid> a écrit :
>
> mais au fait, peut être considères-tu que les applications ne devraient
> juste pas essayer de s'en mêler, et que c'est aux intégrateurs de faire
> l'interface via le wrapper script ?
On y arrive.
Soit tu ne veux voire les choses que d'un cÍ´té applicatif. Dans ce cas,
c'est simple, tu balances tout sur stdout et stderr et tu laisses les
intégrateurs, admins systèmes et utilisateurs finaux gérer ce qu'ils en
font comme ils le veulent.
Si les logs sont perdus lancés en mode
graphique, c'est pas grave, l'utilisateur a toujours la possibilité de
lancer en ligne de commande (même le mode graphique) pour voir les logs
qui l'intéressent sur le terminal le jour o͹ il veut comprendre.
Soit tu veux absolument, écrire des logs dans un fichier et ça commence
Í être de l'administration système. Et c'est lÍ que ça commence Í être
rigolo.
D'abord, il faut que quoiqu'il arrive, l'absence de possibilité
d'écrire tes logs ne puisse pas empêcher ton appli de tourner. Ça veut
dire que dans ton code tu dois prendre en compte une mauvaise
installation ou un mauvais lancement.
Ensuite, il y a le packager qui doit pouvoir choisir le répertoire de
logs par défaut lors de l'installation. Puis, l'admin système doit
pouvoir en choisir un autre pour l'ensemble de ses utilisateurs. Puis,
un utilisateur particulier doit pouvoir choisir o͹ il met les logs pour
lui. Avec la possibilité de changer les logs par une option lors du
démarrage s'il veut faire un test.
C'est pour ça qu'il faut bien que tu fasses attention Í la préséance
dans le choix des possibilités si c'est défini Í plusieurs endroits. Il
faut absolument que ce qui est écrit en dur dans ton code ne soit utilisé
que si rien d'autre n'est trouvé. Il faut aussi que l'option en ligne de
commande prenne le dessus sur toutes les variables d'environnement et
fichiers de conf. De même que l'utilisateur final peut écrire dans son
$HOME et pas dans /etc et donc /etc va être réservé Í l'admin système ou
au packager et être moins prioritaire que $HOME.
Pour la séparation de stdout et stderr, c'est pas forcément très utile.
Il me semble préférable de tout mettre au même endroit avec un niveau de
log qui contient un tag et qui est paramétrable. Par exemple, tu mets du
DEBUG, INFO, WARNING et ERROR quand tu envoies tes logs avec un niveau
d'activation faible en temps normal pour avoir moins de lignes et tu
affiches tout quand tu veux comprendre ce qu'il se passe.
Le 24-09-2021, Thomas a écrit :mais au fait, peut être considères-tu que les applications ne devraient
juste pas essayer de s'en mêler, et que c'est aux intégrateurs de faire
l'interface via le wrapper script ?
On y arrive.
Soit tu ne veux voire les choses que d'un cÍ´té applicatif. Dans ce cas,
c'est simple, tu balances tout sur stdout et stderr et tu laisses les
intégrateurs, admins systèmes et utilisateurs finaux gérer ce qu'ils en
font comme ils le veulent.
Si les logs sont perdus lancés en mode
graphique, c'est pas grave, l'utilisateur a toujours la possibilité de
lancer en ligne de commande (même le mode graphique) pour voir les logs
qui l'intéressent sur le terminal le jour o͹ il veut comprendre.
Soit tu veux absolument, écrire des logs dans un fichier et ça commence
Í être de l'administration système. Et c'est lÍ que ça commence Í être
rigolo.
D'abord, il faut que quoiqu'il arrive, l'absence de possibilité
d'écrire tes logs ne puisse pas empêcher ton appli de tourner. Ça veut
dire que dans ton code tu dois prendre en compte une mauvaise
installation ou un mauvais lancement.
Ensuite, il y a le packager qui doit pouvoir choisir le répertoire de
logs par défaut lors de l'installation. Puis, l'admin système doit
pouvoir en choisir un autre pour l'ensemble de ses utilisateurs. Puis,
un utilisateur particulier doit pouvoir choisir o͹ il met les logs pour
lui. Avec la possibilité de changer les logs par une option lors du
démarrage s'il veut faire un test.
C'est pour ça qu'il faut bien que tu fasses attention Í la préséance
dans le choix des possibilités si c'est défini Í plusieurs endroits. Il
faut absolument que ce qui est écrit en dur dans ton code ne soit utilisé
que si rien d'autre n'est trouvé. Il faut aussi que l'option en ligne de
commande prenne le dessus sur toutes les variables d'environnement et
fichiers de conf. De même que l'utilisateur final peut écrire dans son
$HOME et pas dans /etc et donc /etc va être réservé Í l'admin système ou
au packager et être moins prioritaire que $HOME.
Pour la séparation de stdout et stderr, c'est pas forcément très utile.
Il me semble préférable de tout mettre au même endroit avec un niveau de
log qui contient un tag et qui est paramétrable. Par exemple, tu mets du
DEBUG, INFO, WARNING et ERROR quand tu envoies tes logs avec un niveau
d'activation faible en temps normal pour avoir moins de lignes et tu
affiches tout quand tu veux comprendre ce qu'il se passe.
par curiosité, est ce qu'il y a une raison précise, qui fait que tu n'as
pas accroché avec Ada ?? :-)
- je dois tjr prévoir une solution de secours.
ce que je fais te convient, ce qu'il te faut comme template, etc ...
c'est que "ce n'est pas grave" de ne pas écrire de fichiers de log, même
si on a dit dans le fichier de config qu'on en voulait,
donc en cas de pb quelconque avec le fichier, je me contente de stderr
plus éventuellement dialogue GUI.
par curiosité, est ce qu'il y a une raison précise, qui fait que tu n'as
pas accroché avec Ada ?? :-)
- je dois tjr prévoir une solution de secours.
ce que je fais te convient, ce qu'il te faut comme template, etc ...
c'est que "ce n'est pas grave" de ne pas écrire de fichiers de log, même
si on a dit dans le fichier de config qu'on en voulait,
donc en cas de pb quelconque avec le fichier, je me contente de stderr
plus éventuellement dialogue GUI.
par curiosité, est ce qu'il y a une raison précise, qui fait que tu n'as
pas accroché avec Ada ?? :-)
- je dois tjr prévoir une solution de secours.
ce que je fais te convient, ce qu'il te faut comme template, etc ...
c'est que "ce n'est pas grave" de ne pas écrire de fichiers de log, même
si on a dit dans le fichier de config qu'on en voulait,
donc en cas de pb quelconque avec le fichier, je me contente de stderr
plus éventuellement dialogue GUI.
pourquoi la généralité c'est bcp plus `./configure` que `make config` ?
oui, c'est du Preprocessing :-)
pour toi, ça ne serais pas trop rigide, de ne plus rien pouvoir
configurer post-compilation ?
tu sauvegardes tes données avec un CVS ?
et si je te suis bien, dans tous les logiciels que tu fais, même pour
les autres, tu n'as jamais besoin d'en faire non plus ?
si je t'ai bien suivi, tous ces logiciels ajoutent tjr Í la fin du nom
après leur extension "ordinaire", pour t'empêcher d'ouvrir le fichier de
backup par erreur ?
pourquoi la généralité c'est bcp plus `./configure` que `make config` ?
oui, c'est du Preprocessing :-)
pour toi, ça ne serais pas trop rigide, de ne plus rien pouvoir
configurer post-compilation ?
tu sauvegardes tes données avec un CVS ?
et si je te suis bien, dans tous les logiciels que tu fais, même pour
les autres, tu n'as jamais besoin d'en faire non plus ?
si je t'ai bien suivi, tous ces logiciels ajoutent tjr Í la fin du nom
après leur extension "ordinaire", pour t'empêcher d'ouvrir le fichier de
backup par erreur ?
pourquoi la généralité c'est bcp plus `./configure` que `make config` ?
oui, c'est du Preprocessing :-)
pour toi, ça ne serais pas trop rigide, de ne plus rien pouvoir
configurer post-compilation ?
tu sauvegardes tes données avec un CVS ?
et si je te suis bien, dans tous les logiciels que tu fais, même pour
les autres, tu n'as jamais besoin d'en faire non plus ?
si je t'ai bien suivi, tous ces logiciels ajoutent tjr Í la fin du nom
après leur extension "ordinaire", pour t'empêcher d'ouvrir le fichier de
backup par erreur ?
In article ,
Stéphane CARPENTIER wrote:Soit tu ne veux voire les choses que d'un cÍ´té applicatif. Dans ce cas,
c'est simple, tu balances tout sur stdout et stderr et tu laisses les
intégrateurs, admins systèmes et utilisateurs finaux gérer ce qu'ils en
font comme ils le veulent.Si les logs sont perdus lancés en mode
graphique, c'est pas grave, l'utilisateur a toujours la possibilité de
lancer en ligne de commande (même le mode graphique) pour voir les logs
qui l'intéressent sur le terminal le jour o͹ il veut comprendre.
mon souci c'est que si qqn a juste des bugs Í faire remonter, faut pas
que ça soit trop compliqué.
c'est pas comme s'il lui prend simplement l'envie de regarder sous le
capot. dans ce cas lÍ c'est Í lui de se remonter les manches.
D'abord, il faut que quoiqu'il arrive, l'absence de possibilité
d'écrire tes logs ne puisse pas empêcher ton appli de tourner. Ça veut
dire que dans ton code tu dois prendre en compte une mauvaise
installation ou un mauvais lancement.
aucun pb, en ada il suffit de rattraper toutes les exceptions.
la seule question qui me tracassait était de savoir dans quelle mesure
ces erreurs lÍ avaient besoin d'être rapportées Í leur tour, parce qu'il
y a un risque de tomber dans une boucle infinie.
mais si on n'a pas besoin de les rapporter, aucun pb :-)
Ensuite, il y a le packager qui doit pouvoir choisir le répertoire de
logs par défaut lors de l'installation. Puis, l'admin système doit
pouvoir en choisir un autre pour l'ensemble de ses utilisateurs. Puis,
un utilisateur particulier doit pouvoir choisir o͹ il met les logs pour
lui. Avec la possibilité de changer les logs par une option lors du
démarrage s'il veut faire un test.
C'est pour ça qu'il faut bien que tu fasses attention Í la préséance
dans le choix des possibilités si c'est défini Í plusieurs endroits. Il
faut absolument que ce qui est écrit en dur dans ton code ne soit utilisé
que si rien d'autre n'est trouvé. Il faut aussi que l'option en ligne de
commande prenne le dessus sur toutes les variables d'environnement et
fichiers de conf. De même que l'utilisateur final peut écrire dans son
$HOME et pas dans /etc et donc /etc va être réservé Í l'admin système ou
au packager et être moins prioritaire que $HOME.
tout ça me parait un peu compliqué (pour l'instant),
mais ce qui me parait simple c'est :
- de tout balancer sur stdout et stderr en plus des fichiers,
Pour la séparation de stdout et stderr, c'est pas forcément très utile.
Il me semble préférable de tout mettre au même endroit avec un niveau de
log qui contient un tag et qui est paramétrable. Par exemple, tu mets du
DEBUG, INFO, WARNING et ERROR quand tu envoies tes logs avec un niveau
d'activation faible en temps normal pour avoir moins de lignes et tu
affiches tout quand tu veux comprendre ce qu'il se passe.
j'aime bcp l'idée :-)
je ne sais pas si c'est facile Í faire très rapidement, parce que :
- il faut que je définisse des règles pour catégoriser les logs
(auj dans mon code les logs ne sont divisés qu'en 2 catégories : DEBUG
et ERROR)
- il faut que je réfléchisse Í comment j'organise une ligne, pour que ça
soit agréable Í la fois
- Í utiliser en traitement automatique (c'était ça ton idée ?),
- quand on l'affiche dans un terminal, en évitant de mettre des
caracteres de contrÍ´le qui vont fiche le bazar ...
est-ce que ça convient, d'avoir tous ces tags qui s'affichent dans le
terminal quand on est en CLI (par ex au moment d'indiquer que les
arguments sont mauvais) ?
In article <slrnsks8om.83t.sc@scarpet42p.localdomain>,
Stéphane CARPENTIER <sc@fiat-linux.fr> wrote:
Soit tu ne veux voire les choses que d'un cÍ´té applicatif. Dans ce cas,
c'est simple, tu balances tout sur stdout et stderr et tu laisses les
intégrateurs, admins systèmes et utilisateurs finaux gérer ce qu'ils en
font comme ils le veulent.
Si les logs sont perdus lancés en mode
graphique, c'est pas grave, l'utilisateur a toujours la possibilité de
lancer en ligne de commande (même le mode graphique) pour voir les logs
qui l'intéressent sur le terminal le jour o͹ il veut comprendre.
mon souci c'est que si qqn a juste des bugs Í faire remonter, faut pas
que ça soit trop compliqué.
c'est pas comme s'il lui prend simplement l'envie de regarder sous le
capot. dans ce cas lÍ c'est Í lui de se remonter les manches.
D'abord, il faut que quoiqu'il arrive, l'absence de possibilité
d'écrire tes logs ne puisse pas empêcher ton appli de tourner. Ça veut
dire que dans ton code tu dois prendre en compte une mauvaise
installation ou un mauvais lancement.
aucun pb, en ada il suffit de rattraper toutes les exceptions.
la seule question qui me tracassait était de savoir dans quelle mesure
ces erreurs lÍ avaient besoin d'être rapportées Í leur tour, parce qu'il
y a un risque de tomber dans une boucle infinie.
mais si on n'a pas besoin de les rapporter, aucun pb :-)
Ensuite, il y a le packager qui doit pouvoir choisir le répertoire de
logs par défaut lors de l'installation. Puis, l'admin système doit
pouvoir en choisir un autre pour l'ensemble de ses utilisateurs. Puis,
un utilisateur particulier doit pouvoir choisir o͹ il met les logs pour
lui. Avec la possibilité de changer les logs par une option lors du
démarrage s'il veut faire un test.
C'est pour ça qu'il faut bien que tu fasses attention Í la préséance
dans le choix des possibilités si c'est défini Í plusieurs endroits. Il
faut absolument que ce qui est écrit en dur dans ton code ne soit utilisé
que si rien d'autre n'est trouvé. Il faut aussi que l'option en ligne de
commande prenne le dessus sur toutes les variables d'environnement et
fichiers de conf. De même que l'utilisateur final peut écrire dans son
$HOME et pas dans /etc et donc /etc va être réservé Í l'admin système ou
au packager et être moins prioritaire que $HOME.
tout ça me parait un peu compliqué (pour l'instant),
mais ce qui me parait simple c'est :
- de tout balancer sur stdout et stderr en plus des fichiers,
Pour la séparation de stdout et stderr, c'est pas forcément très utile.
Il me semble préférable de tout mettre au même endroit avec un niveau de
log qui contient un tag et qui est paramétrable. Par exemple, tu mets du
DEBUG, INFO, WARNING et ERROR quand tu envoies tes logs avec un niveau
d'activation faible en temps normal pour avoir moins de lignes et tu
affiches tout quand tu veux comprendre ce qu'il se passe.
j'aime bcp l'idée :-)
je ne sais pas si c'est facile Í faire très rapidement, parce que :
- il faut que je définisse des règles pour catégoriser les logs
(auj dans mon code les logs ne sont divisés qu'en 2 catégories : DEBUG
et ERROR)
- il faut que je réfléchisse Í comment j'organise une ligne, pour que ça
soit agréable Í la fois
- Í utiliser en traitement automatique (c'était ça ton idée ?),
- quand on l'affiche dans un terminal, en évitant de mettre des
caracteres de contrÍ´le qui vont fiche le bazar ...
est-ce que ça convient, d'avoir tous ces tags qui s'affichent dans le
terminal quand on est en CLI (par ex au moment d'indiquer que les
arguments sont mauvais) ?
In article ,
Stéphane CARPENTIER wrote:Soit tu ne veux voire les choses que d'un cÍ´té applicatif. Dans ce cas,
c'est simple, tu balances tout sur stdout et stderr et tu laisses les
intégrateurs, admins systèmes et utilisateurs finaux gérer ce qu'ils en
font comme ils le veulent.Si les logs sont perdus lancés en mode
graphique, c'est pas grave, l'utilisateur a toujours la possibilité de
lancer en ligne de commande (même le mode graphique) pour voir les logs
qui l'intéressent sur le terminal le jour o͹ il veut comprendre.
mon souci c'est que si qqn a juste des bugs Í faire remonter, faut pas
que ça soit trop compliqué.
c'est pas comme s'il lui prend simplement l'envie de regarder sous le
capot. dans ce cas lÍ c'est Í lui de se remonter les manches.
D'abord, il faut que quoiqu'il arrive, l'absence de possibilité
d'écrire tes logs ne puisse pas empêcher ton appli de tourner. Ça veut
dire que dans ton code tu dois prendre en compte une mauvaise
installation ou un mauvais lancement.
aucun pb, en ada il suffit de rattraper toutes les exceptions.
la seule question qui me tracassait était de savoir dans quelle mesure
ces erreurs lÍ avaient besoin d'être rapportées Í leur tour, parce qu'il
y a un risque de tomber dans une boucle infinie.
mais si on n'a pas besoin de les rapporter, aucun pb :-)
Ensuite, il y a le packager qui doit pouvoir choisir le répertoire de
logs par défaut lors de l'installation. Puis, l'admin système doit
pouvoir en choisir un autre pour l'ensemble de ses utilisateurs. Puis,
un utilisateur particulier doit pouvoir choisir o͹ il met les logs pour
lui. Avec la possibilité de changer les logs par une option lors du
démarrage s'il veut faire un test.
C'est pour ça qu'il faut bien que tu fasses attention Í la préséance
dans le choix des possibilités si c'est défini Í plusieurs endroits. Il
faut absolument que ce qui est écrit en dur dans ton code ne soit utilisé
que si rien d'autre n'est trouvé. Il faut aussi que l'option en ligne de
commande prenne le dessus sur toutes les variables d'environnement et
fichiers de conf. De même que l'utilisateur final peut écrire dans son
$HOME et pas dans /etc et donc /etc va être réservé Í l'admin système ou
au packager et être moins prioritaire que $HOME.
tout ça me parait un peu compliqué (pour l'instant),
mais ce qui me parait simple c'est :
- de tout balancer sur stdout et stderr en plus des fichiers,
Pour la séparation de stdout et stderr, c'est pas forcément très utile.
Il me semble préférable de tout mettre au même endroit avec un niveau de
log qui contient un tag et qui est paramétrable. Par exemple, tu mets du
DEBUG, INFO, WARNING et ERROR quand tu envoies tes logs avec un niveau
d'activation faible en temps normal pour avoir moins de lignes et tu
affiches tout quand tu veux comprendre ce qu'il se passe.
j'aime bcp l'idée :-)
je ne sais pas si c'est facile Í faire très rapidement, parce que :
- il faut que je définisse des règles pour catégoriser les logs
(auj dans mon code les logs ne sont divisés qu'en 2 catégories : DEBUG
et ERROR)
- il faut que je réfléchisse Í comment j'organise une ligne, pour que ça
soit agréable Í la fois
- Í utiliser en traitement automatique (c'était ça ton idée ?),
- quand on l'affiche dans un terminal, en évitant de mettre des
caracteres de contrÍ´le qui vont fiche le bazar ...
est-ce que ça convient, d'avoir tous ces tags qui s'affichent dans le
terminal quand on est en CLI (par ex au moment d'indiquer que les
arguments sont mauvais) ?
Thomas wrote:pourquoi la généralité c'est bcp plus `./configure` que `make config` ?
configure est tout un environnement Í son (autoconf), qui génère tout
y.c. Makefile.
oui, c'est du Preprocessing :-)
tout Í fait.
Tu peux alors centraliser tes définitions dans un fichier de
constantes/préprocessing généré par le configurateur avant compilation.
pour toi, ça ne serais pas trop rigide, de ne plus rien pouvoir
configurer post-compilation ?
Ca dépend de l'application, mais dans certains cas c'est acceptable, en
particulier si c'est open source.
et si je te suis bien, dans tous les logiciels que tu fais, même pour
les autres, tu n'as jamais besoin d'en faire non plus ?
Pas sÍ»r de comprendre en quoi avoir un système qui me permet de
retrouver mes données hors site en cas de problème, Í chaque
modification que je trouve importante est insuffisant?
D'ailleurs j'aimais bien l'idée du système de fichier Í versionning de
VMS: le fichier toto devient toto;1 si on le modifie. C'est ainsi que je
vois l'idée que certains programmes ajoutent un ".orig" ou un ~: du
versionning du pauvre.
Thomas <fantome.forums.tDeContes@free.fr.invalid> wrote:
> pourquoi la généralité c'est bcp plus `./configure` que `make config` ?
configure est tout un environnement Í son (autoconf), qui génère tout
y.c. Makefile.
> oui, c'est du Preprocessing :-)
tout Í fait.
Tu peux alors centraliser tes définitions dans un fichier de
constantes/préprocessing généré par le configurateur avant compilation.
> pour toi, ça ne serais pas trop rigide, de ne plus rien pouvoir
> configurer post-compilation ?
Ca dépend de l'application, mais dans certains cas c'est acceptable, en
particulier si c'est open source.
> et si je te suis bien, dans tous les logiciels que tu fais, même pour
> les autres, tu n'as jamais besoin d'en faire non plus ?
Pas sÍ»r de comprendre en quoi avoir un système qui me permet de
retrouver mes données hors site en cas de problème, Í chaque
modification que je trouve importante est insuffisant?
D'ailleurs j'aimais bien l'idée du système de fichier Í versionning de
VMS: le fichier toto devient toto;1 si on le modifie. C'est ainsi que je
vois l'idée que certains programmes ajoutent un ".orig" ou un ~: du
versionning du pauvre.
Thomas wrote:pourquoi la généralité c'est bcp plus `./configure` que `make config` ?
configure est tout un environnement Í son (autoconf), qui génère tout
y.c. Makefile.
oui, c'est du Preprocessing :-)
tout Í fait.
Tu peux alors centraliser tes définitions dans un fichier de
constantes/préprocessing généré par le configurateur avant compilation.
pour toi, ça ne serais pas trop rigide, de ne plus rien pouvoir
configurer post-compilation ?
Ca dépend de l'application, mais dans certains cas c'est acceptable, en
particulier si c'est open source.
et si je te suis bien, dans tous les logiciels que tu fais, même pour
les autres, tu n'as jamais besoin d'en faire non plus ?
Pas sÍ»r de comprendre en quoi avoir un système qui me permet de
retrouver mes données hors site en cas de problème, Í chaque
modification que je trouve importante est insuffisant?
D'ailleurs j'aimais bien l'idée du système de fichier Í versionning de
VMS: le fichier toto devient toto;1 si on le modifie. C'est ainsi que je
vois l'idée que certains programmes ajoutent un ".orig" ou un ~: du
versionning du pauvre.
Le 26-09-2021, Thomas a écrit :In article ,
Stéphane CARPENTIER wrote:Soit tu ne veux voire les choses que d'un cÍ´té applicatif. Dans ce cas,Si les logs sont perdus lancés en mode
graphique, c'est pas grave, l'utilisateur a toujours la possibilité de
lancer en ligne de commande (même le mode graphique) pour voir les logs
qui l'intéressent sur le terminal le jour o͹ il veut comprendre.
mon souci c'est que si qqn a juste des bugs Í faire remonter, faut pas
que ça soit trop compliqué.
Il n'y a rien de compliqué. Si tu balances tous tes logs sur ta sortie
d'erreur, tu dis Í l'utilisateur de tapper la commande
« $> monsuperprogramme 2> fichier.log »
et de t'envoyer le fichier « fichier.log » quand il a reproduit le bug.
c'est pas comme s'il lui prend simplement l'envie de regarder sous le
capot. dans ce cas lÍ c'est Í lui de se remonter les manches.
Oui, mais pour se remonter les manches, il faut juste que tu lui
permettes de le faire.
D'abord, il faut que quoiqu'il arrive, l'absence de possibilité
d'écrire tes logs ne puisse pas empêcher ton appli de tourner. Ça veut
dire que dans ton code tu dois prendre en compte une mauvaise
installation ou un mauvais lancement.
aucun pb, en ada il suffit de rattraper toutes les exceptions.
la seule question qui me tracassait était de savoir dans quelle mesure
ces erreurs lÍ avaient besoin d'être rapportées Í leur tour, parce qu'il
y a un risque de tomber dans une boucle infinie.
Je ne suis pas sÍ»r d'avoir été clair. Imaginons que la seule possibilité
de configuration soit le fichier « /etc/monprog.config » qui est donc Í
la main de l'intégrateur et de l'admin système. Imaginons toujours que
par erreur, la ligne correspondant Í l'écriture des logs soit définie Í
« /bin/monprog.log ». T'as beau catcher toutes tes exceptions, tu les
envoies o͹ tes erreurs ?
mais si on n'a pas besoin de les rapporter, aucun pb :-)
En fait, c'est ton programme, c'est toi qui doit savoir ce qui doit être
rapporté.
Ensuite, il y a le packager qui doit pouvoir choisir le répertoire de
logs par défaut lors de l'installation. Puis, l'admin système doit
pouvoir en choisir un autre pour l'ensemble de ses utilisateurs. Puis,
un utilisateur particulier doit pouvoir choisir o͹ il met les logs pour
lui. Avec la possibilité de changer les logs par une option lors du
démarrage s'il veut faire un test.
C'est pour ça qu'il faut bien que tu fasses attention Í la préséance
dans le choix des possibilités si c'est défini Í plusieurs endroits. Il
faut absolument que ce qui est écrit en dur dans ton code ne soit utilisé
que si rien d'autre n'est trouvé. Il faut aussi que l'option en ligne de
commande prenne le dessus sur toutes les variables d'environnement et
fichiers de conf. De même que l'utilisateur final peut écrire dans son
$HOME et pas dans /etc et donc /etc va être réservé Í l'admin système ou
au packager et être moins prioritaire que $HOME.
tout ça me parait un peu compliqué (pour l'instant),
Je ne vois pas en quoi c'est plus compliqué que ce que tu écrivais en
cherchant dans les variables systèmes ou les répertoires différents.
Je te dis juste qu'il faut que tu fasses attention Í l'ordre dans lequel
tu vas chercher tes fichiers.
mais ce qui me parait simple c'est :
- de tout balancer sur stdout et stderr en plus des fichiers,
Ça me semble suttout faire double emploi.
Pour la séparation de stdout et stderr, c'est pas forcément très utile.
Il me semble préférable de tout mettre au même endroit avec un niveau de
log qui contient un tag et qui est paramétrable. Par exemple, tu mets du
DEBUG, INFO, WARNING et ERROR quand tu envoies tes logs avec un niveau
d'activation faible en temps normal pour avoir moins de lignes et tu
affiches tout quand tu veux comprendre ce qu'il se passe.
j'aime bcp l'idée :-)
je ne sais pas si c'est facile Í faire très rapidement, parce que :
- il faut que je définisse des règles pour catégoriser les logs
(auj dans mon code les logs ne sont divisés qu'en 2 catégories : DEBUG
et ERROR)
Mon idée, c'est que tu te programmes une fonction genre
« sendlog(niveau,message) »
Et c'est ta fonction sendlog qui va choisir quoi faire de tes logs :
poubelle si c'est pas le bon niveau de logs et envoi dans le cas
contraire.
Je ne sais pas si tu utilises un framework, ou si tu définis toutes tes
fonctions, mais il doit bien exister quelque chose.
est-ce que ça convient, d'avoir tous ces tags qui s'affichent dans le
terminal quand on est en CLI (par ex au moment d'indiquer que les
arguments sont mauvais) ?
Si c'est une application qui tourne dans un terminal, faut pas que les
logs la rendent inutilisable.
Par exemple, la commande find, si tu
cherches toto.txt avec « find / -name toto.txt » en tant que simple
utilisateur, tu vas avoir l'écran rempli d'erreurs des répertoires que
tu n'as pas le droit de lire. et s'il y a une réponse positive, tu ne
vas pas la voir. Alors tu vas plutÍ´t faire ta recherche avec un
« find / -name toto.txt 2> /dev/null ».
Le 26-09-2021, Thomas <fantome.forums.tDeContes@free.fr.invalid> a écrit :
> In article <slrnsks8om.83t.sc@scarpet42p.localdomain>,
> Stéphane CARPENTIER <sc@fiat-linux.fr> wrote:
>
>> Soit tu ne veux voire les choses que d'un cÍ´té applicatif. Dans ce cas,
>> Si les logs sont perdus lancés en mode
>> graphique, c'est pas grave, l'utilisateur a toujours la possibilité de
>> lancer en ligne de commande (même le mode graphique) pour voir les logs
>> qui l'intéressent sur le terminal le jour o͹ il veut comprendre.
>
> mon souci c'est que si qqn a juste des bugs Í faire remonter, faut pas
> que ça soit trop compliqué.
Il n'y a rien de compliqué. Si tu balances tous tes logs sur ta sortie
d'erreur, tu dis Í l'utilisateur de tapper la commande
« $> monsuperprogramme 2> fichier.log »
et de t'envoyer le fichier « fichier.log » quand il a reproduit le bug.
> c'est pas comme s'il lui prend simplement l'envie de regarder sous le
> capot. dans ce cas lÍ c'est Í lui de se remonter les manches.
Oui, mais pour se remonter les manches, il faut juste que tu lui
permettes de le faire.
>> D'abord, il faut que quoiqu'il arrive, l'absence de possibilité
>> d'écrire tes logs ne puisse pas empêcher ton appli de tourner. Ça veut
>> dire que dans ton code tu dois prendre en compte une mauvaise
>> installation ou un mauvais lancement.
>
> aucun pb, en ada il suffit de rattraper toutes les exceptions.
>
> la seule question qui me tracassait était de savoir dans quelle mesure
> ces erreurs lÍ avaient besoin d'être rapportées Í leur tour, parce qu'il
> y a un risque de tomber dans une boucle infinie.
Je ne suis pas sÍ»r d'avoir été clair. Imaginons que la seule possibilité
de configuration soit le fichier « /etc/monprog.config » qui est donc Í
la main de l'intégrateur et de l'admin système. Imaginons toujours que
par erreur, la ligne correspondant Í l'écriture des logs soit définie Í
« /bin/monprog.log ». T'as beau catcher toutes tes exceptions, tu les
envoies o͹ tes erreurs ?
> mais si on n'a pas besoin de les rapporter, aucun pb :-)
En fait, c'est ton programme, c'est toi qui doit savoir ce qui doit être
rapporté.
>> Ensuite, il y a le packager qui doit pouvoir choisir le répertoire de
>> logs par défaut lors de l'installation. Puis, l'admin système doit
>> pouvoir en choisir un autre pour l'ensemble de ses utilisateurs. Puis,
>> un utilisateur particulier doit pouvoir choisir o͹ il met les logs pour
>> lui. Avec la possibilité de changer les logs par une option lors du
>> démarrage s'il veut faire un test.
>>
>> C'est pour ça qu'il faut bien que tu fasses attention Í la préséance
>> dans le choix des possibilités si c'est défini Í plusieurs endroits. Il
>> faut absolument que ce qui est écrit en dur dans ton code ne soit utilisé
>> que si rien d'autre n'est trouvé. Il faut aussi que l'option en ligne de
>> commande prenne le dessus sur toutes les variables d'environnement et
>> fichiers de conf. De même que l'utilisateur final peut écrire dans son
>> $HOME et pas dans /etc et donc /etc va être réservé Í l'admin système ou
>> au packager et être moins prioritaire que $HOME.
>
> tout ça me parait un peu compliqué (pour l'instant),
Je ne vois pas en quoi c'est plus compliqué que ce que tu écrivais en
cherchant dans les variables systèmes ou les répertoires différents.
Je te dis juste qu'il faut que tu fasses attention Í l'ordre dans lequel
tu vas chercher tes fichiers.
> mais ce qui me parait simple c'est :
> - de tout balancer sur stdout et stderr en plus des fichiers,
Ça me semble suttout faire double emploi.
>> Pour la séparation de stdout et stderr, c'est pas forcément très utile.
>> Il me semble préférable de tout mettre au même endroit avec un niveau de
>> log qui contient un tag et qui est paramétrable. Par exemple, tu mets du
>> DEBUG, INFO, WARNING et ERROR quand tu envoies tes logs avec un niveau
>> d'activation faible en temps normal pour avoir moins de lignes et tu
>> affiches tout quand tu veux comprendre ce qu'il se passe.
>
> j'aime bcp l'idée :-)
>
> je ne sais pas si c'est facile Í faire très rapidement, parce que :
> - il faut que je définisse des règles pour catégoriser les logs
> (auj dans mon code les logs ne sont divisés qu'en 2 catégories : DEBUG
> et ERROR)
Mon idée, c'est que tu te programmes une fonction genre
« sendlog(niveau,message) »
Et c'est ta fonction sendlog qui va choisir quoi faire de tes logs :
poubelle si c'est pas le bon niveau de logs et envoi dans le cas
contraire.
Je ne sais pas si tu utilises un framework, ou si tu définis toutes tes
fonctions, mais il doit bien exister quelque chose.
> est-ce que ça convient, d'avoir tous ces tags qui s'affichent dans le
> terminal quand on est en CLI (par ex au moment d'indiquer que les
> arguments sont mauvais) ?
Si c'est une application qui tourne dans un terminal, faut pas que les
logs la rendent inutilisable.
Par exemple, la commande find, si tu
cherches toto.txt avec « find / -name toto.txt » en tant que simple
utilisateur, tu vas avoir l'écran rempli d'erreurs des répertoires que
tu n'as pas le droit de lire. et s'il y a une réponse positive, tu ne
vas pas la voir. Alors tu vas plutÍ´t faire ta recherche avec un
« find / -name toto.txt 2> /dev/null ».
Le 26-09-2021, Thomas a écrit :In article ,
Stéphane CARPENTIER wrote:Soit tu ne veux voire les choses que d'un cÍ´té applicatif. Dans ce cas,Si les logs sont perdus lancés en mode
graphique, c'est pas grave, l'utilisateur a toujours la possibilité de
lancer en ligne de commande (même le mode graphique) pour voir les logs
qui l'intéressent sur le terminal le jour o͹ il veut comprendre.
mon souci c'est que si qqn a juste des bugs Í faire remonter, faut pas
que ça soit trop compliqué.
Il n'y a rien de compliqué. Si tu balances tous tes logs sur ta sortie
d'erreur, tu dis Í l'utilisateur de tapper la commande
« $> monsuperprogramme 2> fichier.log »
et de t'envoyer le fichier « fichier.log » quand il a reproduit le bug.
c'est pas comme s'il lui prend simplement l'envie de regarder sous le
capot. dans ce cas lÍ c'est Í lui de se remonter les manches.
Oui, mais pour se remonter les manches, il faut juste que tu lui
permettes de le faire.
D'abord, il faut que quoiqu'il arrive, l'absence de possibilité
d'écrire tes logs ne puisse pas empêcher ton appli de tourner. Ça veut
dire que dans ton code tu dois prendre en compte une mauvaise
installation ou un mauvais lancement.
aucun pb, en ada il suffit de rattraper toutes les exceptions.
la seule question qui me tracassait était de savoir dans quelle mesure
ces erreurs lÍ avaient besoin d'être rapportées Í leur tour, parce qu'il
y a un risque de tomber dans une boucle infinie.
Je ne suis pas sÍ»r d'avoir été clair. Imaginons que la seule possibilité
de configuration soit le fichier « /etc/monprog.config » qui est donc Í
la main de l'intégrateur et de l'admin système. Imaginons toujours que
par erreur, la ligne correspondant Í l'écriture des logs soit définie Í
« /bin/monprog.log ». T'as beau catcher toutes tes exceptions, tu les
envoies o͹ tes erreurs ?
mais si on n'a pas besoin de les rapporter, aucun pb :-)
En fait, c'est ton programme, c'est toi qui doit savoir ce qui doit être
rapporté.
Ensuite, il y a le packager qui doit pouvoir choisir le répertoire de
logs par défaut lors de l'installation. Puis, l'admin système doit
pouvoir en choisir un autre pour l'ensemble de ses utilisateurs. Puis,
un utilisateur particulier doit pouvoir choisir o͹ il met les logs pour
lui. Avec la possibilité de changer les logs par une option lors du
démarrage s'il veut faire un test.
C'est pour ça qu'il faut bien que tu fasses attention Í la préséance
dans le choix des possibilités si c'est défini Í plusieurs endroits. Il
faut absolument que ce qui est écrit en dur dans ton code ne soit utilisé
que si rien d'autre n'est trouvé. Il faut aussi que l'option en ligne de
commande prenne le dessus sur toutes les variables d'environnement et
fichiers de conf. De même que l'utilisateur final peut écrire dans son
$HOME et pas dans /etc et donc /etc va être réservé Í l'admin système ou
au packager et être moins prioritaire que $HOME.
tout ça me parait un peu compliqué (pour l'instant),
Je ne vois pas en quoi c'est plus compliqué que ce que tu écrivais en
cherchant dans les variables systèmes ou les répertoires différents.
Je te dis juste qu'il faut que tu fasses attention Í l'ordre dans lequel
tu vas chercher tes fichiers.
mais ce qui me parait simple c'est :
- de tout balancer sur stdout et stderr en plus des fichiers,
Ça me semble suttout faire double emploi.
Pour la séparation de stdout et stderr, c'est pas forcément très utile.
Il me semble préférable de tout mettre au même endroit avec un niveau de
log qui contient un tag et qui est paramétrable. Par exemple, tu mets du
DEBUG, INFO, WARNING et ERROR quand tu envoies tes logs avec un niveau
d'activation faible en temps normal pour avoir moins de lignes et tu
affiches tout quand tu veux comprendre ce qu'il se passe.
j'aime bcp l'idée :-)
je ne sais pas si c'est facile Í faire très rapidement, parce que :
- il faut que je définisse des règles pour catégoriser les logs
(auj dans mon code les logs ne sont divisés qu'en 2 catégories : DEBUG
et ERROR)
Mon idée, c'est que tu te programmes une fonction genre
« sendlog(niveau,message) »
Et c'est ta fonction sendlog qui va choisir quoi faire de tes logs :
poubelle si c'est pas le bon niveau de logs et envoi dans le cas
contraire.
Je ne sais pas si tu utilises un framework, ou si tu définis toutes tes
fonctions, mais il doit bien exister quelque chose.
est-ce que ça convient, d'avoir tous ces tags qui s'affichent dans le
terminal quand on est en CLI (par ex au moment d'indiquer que les
arguments sont mauvais) ?
Si c'est une application qui tourne dans un terminal, faut pas que les
logs la rendent inutilisable.
Par exemple, la commande find, si tu
cherches toto.txt avec « find / -name toto.txt » en tant que simple
utilisateur, tu vas avoir l'écran rempli d'erreurs des répertoires que
tu n'as pas le droit de lire. et s'il y a une réponse positive, tu ne
vas pas la voir. Alors tu vas plutÍ´t faire ta recherche avec un
« find / -name toto.txt 2> /dev/null ».
configure est tout un environnement Í son (autoconf), qui génère tout
y.c. Makefile.
je ne comprend pas ...
peux tu reformuler stp ? :-)
configure est tout un environnement Í son (autoconf), qui génère tout
y.c. Makefile.
je ne comprend pas ...
peux tu reformuler stp ? :-)
configure est tout un environnement Í son (autoconf), qui génère tout
y.c. Makefile.
je ne comprend pas ...
peux tu reformuler stp ? :-)