Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

gérer des fichiers log

78 réponses
Avatar
Thomas
bonjour :-)


j'ai des logs Í  gérer, et j'aimerais mieux ne pas les effacer quand j'ai
besoin de place pour un nouveau fichier.


j'ai regardé ce qui se passe dans /var/log/ :

est ce que c'est qqch de plus ou moins normalisé, ou est ce qu'on fait
vraiment ce qu'on veut ?


1
j'aime bcp l'idée d'avoir un n° que je peux incrementer jusqu'Í 
l'infini, pas de limite supérieure :-)


2
le gros pb, c'est que ça ajoute le n° après l'extension plutÍ´t qu'avant.
du coup, mon éditeur de texte croit avoir affaire Í  des pages de man
plutÍ´t qu'Í  des logs !

quel genre de pb ça peut poser si je décide de faire différemment ?

et pendant que j'y suis, pourquoi ne pas corriger ça au niveau du
système ?


3
apparemment, quand on a besoin de place, on décale tous les fichiers
d'un cran.

si Í  la place je met juste le dernier n° (le 1er dispo) au fichier qui
n'en a pas encore, sans toucher aux autres, qu'est ce que vous en dites ?

--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/

10 réponses

4 5 6 7 8
Avatar
Thomas
In article <sddfa6$15k4$,
Stephane Tougard wrote:
On 2021-07-23, Thomas wrote:
du coup l'intégrateur met tous les logs dans le même fichier ? et c'est
pas gênant ?

L'intégrateur fait ce qu'il veut,

pas tout Í  fait :
dans ce cas de figure, je ne crois pas qu'il ait la possibilité de
re-separer le debug et les erreurs.
ça n'a pas une grande importance.

en fait, quand j'ai fait les fichiers de logs, ça m'a paru naturel de
faire un fichier pour chacun.
mais en fait, Marc et toi vous vous en fichez ?
un seul fichier avec tout ce qu'il y a Í  logger, ça vous va bien ?
(et STDOUT est fait pour quoi ?)

C'est la sortie standard, c'est pour échanger avec l'applicatif (pour
une appli en ligne de commande). Sur une appli graphique, ça sert Í  rien.

ok, donc tu as l'air d'accord avec Marc :-)
- S'en fiche (ce que font 99% des applications graphiques).

veux tu dire qu'elles produisent quand même des logs, mais qu'elles s'en
fichent d'écraser les logs précédents ou d'en avoir qui montent jusqu'Í 
l'infini ?

Lance un firefox en ligne de commande, tu vas t'apercevoir qu'il va
afficher plein de choses sur la console. Pour une utilisation
courante, on s'en fiche.

il y a un module qui envoie automatiquement un rapport en cas de crash.
si j'ai bien compris, il récupère via un wrapper script ce qu'on voit
sur la console,
simplement, quand on le lance en ligne de commande, cette redirection
n'est pas faite ?
est ce que ce module a du être programmé séparément pour chaque
plateforme ?
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
Avatar
Thomas
In article ,
Stéphane CARPENTIER wrote:
Le 22-07-2021, Thomas a écrit :
In article <60f83dc1$0$3743$,
Nicolas George <nicolas$ wrote:
Thomas , dans le message
, a écrit :
> dans ce cas, pourrais tu m'aider Í  le poser mieux, stp ?
Désolé, je n'ai pas vraiment l'énergie.

ah bon. tant pis, dommage.
(si tu l'avais eue, je suis sur que j'aurais pu bcp apprendre,
même s'il serait forcément resté qques points de désaccords dus Í  ce que
j'ai déjÍ  appris ailleurs et Í  la différence des environnements et
contextes dans lesquels chacun évolue.)

Je crois que ce que Nicolas veut t'expliquer (ainsi que Marc en fait),
c'est que tu dis que tu ne veux t'en occuper que d'un point de vue
développeur et pas administrateur système, mais toutes tes questions
sont orientée administration système.

peut être que l'incompréhension persiste.
mais avec Marc, Í  force d'échanger, j'ai l'impression qu'on commence Í 
se comprendre :-)
(j'espère ne pas me tromper, et que si oui il ne m'en voudra pas de ce
que je dis ici).
J'ai eu l'impression que tu l'avais compris Í  un moment mais avec
d'autres réponses de ta part je n'en suis pas sÍ»r.

dans ce cas lÍ , si tu as suffisamment de patience, ce qu'il me faudrait
c'est que tu me détailles ça, stp.
pour les réponses de ma part qui font que tu n'en es pas sÍ»r, il faut
que tu poses les questions te permettant d'en être sur ...
par exemple, personne n'a répondu directement Í  ces questions :
est ce que tu trouves qu'elles sont orientées administration système ?
et si oui pourquoi ?
évidement, je ne peux pas en vouloir Í  Nicolas de ne pas avoir assez
d'énergie pour communiquer avec moi, il ne me dois rien.
et il en faut un peu, puisqu'il semble bien que nos différences ne
soient pas minces, tant dans le langage que nous utilisons que dans
l'environnement qui fait notre vie pro de tous les jours (donc nous
n'avons pas affaire aux mêmes pbs Í  résoudre etc)
j'espère que tu peux comprendre que pour moi, c'est un peu frustrant
d'avoir qqn qui me dit que je n'ai pas compris, et qui ne me donne pas
les clés pour comprendre.
peut être qu'il a considéré m'avoir donné les clés, et s'est étonné que
je ne comprenne pas, mais dans ce cas lÍ  il manque au minimum de
pédagogie.
ça aurais été chouette qu'il cherche Í  savoir ce qui avait raté.
d'ailleurs je crois que c'est ce que t'as un peu essayé de faire dans la
suite de ce msg, et je t'en remercie :-)
En gros, le développeur, il balance tout ce qui ne s'affiche pas dans
l'interface graphique dans stout et dans stderr. Point bare. Tout le
reste, c'est de l'administration système.

il me semble l'avoir compris.
Techniquement parlant, le développeur de l'application peut choisir un
nom de fichier pour ses logs. Mais c'est juste de l'ingérence dans
l'administration système.

j'ai récemment expliqué pourquoi ça ne me convenait pas.
Ça n'a aucun sens de demander des bonnes
pratiques de nomage de fichiers de logs d'un point de vue développeur et
pas administrateur système.

c'était seulement au début, avant que je comprenne les 1ers malentendus.
Marc m'a expliqué que de son point de vue : c'est acceptable de produire
un fichier de log + une sauvegarde (Í  moins que ça soit "+ une
sauvegarde" seulement pour les autres fichiers), si c'est configurable.
(je simplifie un peu ce qu'il a dit sans relire tout le fil,
j'espère qu'il me corrige si j'ai mal traduit)
Tout ce que tu veux faire en plus de stderr et stdout va juste
compliquer les choses Í  celui qui veut mettre en place une politique de
logrotate.

d'o͹ la question n° 3 indiquée ci dessus : "est ce que ça vous dérange ?"
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
Avatar
Thomas
In article <60fc1f0f$0$23940$,
Nicolas George <nicolas$ wrote:
Voire encore mieux : une application graphique, souvent on la lance
elle-même depuis un bureau graphique, et on ne voit jamais les sorties
standard, donc elle ne devrait strictement rien écrire dessus Í  part en cas
d'échec catastrophique.

et en cas d'échec catastrophique, comment sait on par quels états on est
passés avant, qui nous ont conduits Í  la catastrophe ?
Il peut bien sͻr y avoir des exceptions, mais comme justement ce sont des
exceptions, on ne peut rien dire sans savoir en quoi ce sont des exceptions.

mais, comment savoir si / en quoi ce sont des exceptions, si on n'a pas
l'énergie pour communiquer ?
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
Avatar
Nicolas George
Thomas , dans le message
, a écrit :
et en cas d'échec catastrophique, comment sait on par quels états on est
passés avant, qui nous ont conduits Í  la catastrophe ?

On réessaie en activant les options de debug.
mais, comment savoir si / en quoi ce sont des exceptions, si on n'a pas
l'énergie pour communiquer ?

Si on se pose la question, on n'est probablement pas une exception.
Avatar
Thomas
In article <si9urh$mad$,
Marc SCHAEFER wrote:
Ca fait 25 ans que je n'ai plus écrit d'Ada.

8-o
???
tu as déjÍ  programmé en Ada, et maintenant tu développes de l'embarqué
en C ?
???
est-ce que tu as eu une super mauvaise expérience en Ada il y a 25 ans,
ou est-ce qu'on t'impose Í  toutes forces ton environnement de
développement ?
il y a 25 ans, Ada95 venait de sortir, donc si tu n'a fait que du Ada83,
il y en a eu des améliorations depuis ! ;-)
POO, contrats, ...
voilÍ  une excellente présentation :-)
https://www.youtube.com/watch?vµlRyBRk0d8
(j'adore le "langage épais" :-) )
bon, a priori, je n'ai pas besoin de pousser la résilience de mon
logiciel au point o͹ on puisse le changer de place pendant son
exécution,

C'était pour te faire comprendre la philosophie complètement différente
de UNIX concernant les chemins.

je sais que c'est un peu spécial :-)
je pense que si c'est moi qui l'avais fait, je l'aurais fait un peu
différemment, genre plus intuitif ;-)
Il n'est en général pas une bonne
pratique de `deviner' o͹ est "son" répertoire. Soit c'est en dur
(/etc/application/), ~/.application, etc), soit c'est une variable
d'environnement, soit c'est configuré quelque part.

en fait, c'était déjÍ  programmé dedans quand je l'ai repris, pour
permettre au logiciel de trouver ses images, et je ne pensais pas que ça
poserais des pbs de le réutiliser pour faire les fichiers de logs :-)
alors je pense qu'Í  très court terme je vais faire comme ça quand même,
parce que :
- pour l'instant on ne peut pas l'installer, on ne peut le faire marcher
que dans le répertoire des sources,
- j'aimerais mieux, tant que je n'ai pas évolué, que tout ce qui
concerne ce logiciel reste Í  l'intérieur de son répertoire,
- je ne sens pas la prise en charge d'un wrapper script pour tout le
monde.
mais je garde bien en tête toutes tes recommandations, et je vais tacher
au moins de le rendre configurable Í  moyen terme :-)
en fait, ce que j'essaye de faire maintenant, c'est bien comprendre le
pb ainsi que toutes les solutions,
pour pouvoir bien concevoir les modules que je suis en train de revoir
maintenant,
de manière Í  ne pas devoir les revoir de fond en comble le jour o͹ je
revois d'autres modules pour m'approcher un peu plus de l'idéal
(par exemple si j'ajoute la prise en charge d'un fichier de config dans
6 mois)
Et changer le répertoire courant durant l'exécution, c'est changer
la référence et donc on a des soucis pour tous les arguments de ligne de
commande

même si a priori on peut aussi juste lire les fichiers immédiatement Í 
l'ouverture (typiquement, pour un fichier de config qu'on ne modifie
pas, on peut faire ça),
je ne vois pas l'intérêt de changer le répertoire courant, donc même si
c'était comme ça quand je l'ai repris je vais le virer vite fait ;-)
le Filesystem Hierarchy Standard (même s'il devient apparemment
obsolète).

qu'est ce que c'est ?
(il a peut être besoin d'une mise Í  jour ?)

https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

effectivement, c'est bien précisé lÍ  :
https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s08.html
chaque application -> directement dans le "user's home directory"
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 ?
j'allais dire qu'ils devraient proposer des regroupements du genre
~/.config/ , mais en fait ils proposent la "XDG Base Directory
Specification"
<https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.
html>
donc même si c'est pas absolument mon idéal, cette Spécification existe,
allons-y !
amtha, ça serais bien que le Filesystem Hierarchy Standard insiste un
peu plus, pour que tout le monde utilise la XDG Base Directory
Specification :-)
connais tu ça ? (c'est lÍ  d'o͹ vient le ~/.config/ apparemment)
Í  ton avis, est ce qu'il y a des prerequis pour utiliser cette
Spécification ?
si on décide de s'y mettre,
- est ce qu'on peut juste prendre les petits morceaux qui nous plaisent ?
(par exemple, regarder $XDG_DATA_HOME mais pas $XDG_DATA_DIRS ni
$datadir, ou mettre une autre valeur par défaut que celle indiquée)
- ou alors est ce qu'on doit la prendre en charge entièrement et
rigoureusement, sous peine de fiche un gros bazar ?
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 ?
Apparemment c'est surtout que certaines distributions ont laissé tombé.

ah dommage
(sais tu si elles avaient de bonnes raisons de le faire ?)
et lÍ  le rangement en sous-répertoires retrouve tout son intérêt pour
la commodité.

C'est juste.

et la XDG Base Directory Specification y remédie :-)
reste les developpeurs Í  convaincre, surtout ceux qui utilisent snap ;-)
en fait, je pense que j'aurai l'occasion de faire une fenêtre de
"préférences", qui va éditer "en mode graphique" un fichier de ce genre
(donc ce fichier sera écrit et lu symétriquement, et pas édité Í  la
main).

Dommage, j'adore quand je peux générer ce genre de fichier
automatiquement, par exemple pour préconfigurer une salle de machines
ou tester des applications automatiquement.
Donc: configuration stocké en format texte, dans
~/.config/application/config par exemple.
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 ?
j'ai cru comprendre que pour permettre aux utilisateurs de Windows de
double cliquer sur un fichier pour l'ouvrir, il est nécessaire de

Microsoft est pour moi hors sujet.

pour moi c'est pas hors sujet,
parce que je sais qu'il y a des gens qui s'en sont servis,
puisqu'il y a dans le code et dans le log SVN des notes concernant des
corrections de bug pour que ça puisse mieux fonctionner sous Windows :-)
donc je considère ça comme un prerequis du mainteneur qui me l'a confié
;-)
même s'il ne me l'a pas dit comme ça, je considère que ça fait partie de
ma mission de ne pas casser ce qui marche ;-)
prendre en charge l'indication du fichier cliqué comme argument unique
(je ne sais pas comment ça se passe sur les autres plateformes)

La plupart du temps le GUI va simplement lancer /usr/bin/toto
nom-fichier-double-cliqué.
Toutefois, la plupart des GUI permettent de
configurer le comportement avec des templates (exemple: programme %f
dans l'association MIME), il me semble.

ok donc ça c'est le boulot de l'intégrateur.
tant que je ne suis pas au point lÍ  dessus, je souhaite que ça puisse
fonctionner sans intégration.
donc, comment faire qqch qui réponde Í  ton besoin et qui soit compatible
avec ce comportement de Windows ?

Dans mon optique, le monde Microsoft ne m'intéresse pas, donc je ne
vais pas trop élaborer.

pour la question précédente, en fait on dirait que Windows et les autres
plateformes sont similaires.
il faut juste trouver un mécanisme qui soit compatible avec ça sans
wrapper script.
donc pas de fichier de config obligatoire, mais tu as dit que ça pouvait
être facultatif.
il faudrait aussi que ça soit compatible avec la manière d'utiliser le
logiciel ...
mais non en fait, puisque je peux séparer la partie gui et la partie cli
...
sauf que la partie cli aussi risque d'avoir besoin du fichier de config
...
(une suggestion ?)
dans quels cas on peut vouloir exprimer un chemin relativement depuis un
autre répertoire ?

C'était lié Í  ton file-browser qui change de répertoire courant.

tu disais "sémantiquement, tu vas changer de répertoire Í  chaque fois
que tu veux relativement exprimer un chemin depuis ce répertoire"
ah oui, tu disais ça en lien avec le file-browser ?
je croyais que c'était une généralité et qu'il y avait des cas o͹
c'était vraiment utile.
mais avec le file-browser ... comme toi, je ne vois pas l'intérêt de
faire des bugs ailleurs ...
Je constate aussi qu'il y a un problème inhérent aux GUI ou plutÍ´t aux
applications qui n'acceptent pas d'être lancées deux fois.
Pour moi, c'est un bug, mais c'est Í  quoi s'attendent les utilisateurs
Microsoft et Apple.

je suis un futur-ex Apple ;-)
mais il y a un truc qu'il faut que j'essaye de faire ;-)
ne pas essayer d'être parfait des le début !!! :-D
je me demande ce qu'il peut y avoir comme pb quand par exemple 2
instances veulent modifier le même fichier ...
mais tant pis, cette affaire lÍ  je ne m'en occupe pas,
je laisse ça aux OS, aux intégrateurs, aux utilisateurs ...
Comme quoi faire du GUI *et* de la ligne de commande c'est compliqué.

veux tu dire que tu recommandes de tjr lancer les applications GUI
depuis un bureau GUI et pas depuis un terminal ?
- parce que je ne sens pas la prise en charge d'un wrapper script qui va
marcher Í  tous les coups sur toutes les plateformes
(voir l'autre branche du fil)

Un script pour chaque plateforme, plutÍ´t.

oui, donc voilÍ  : il faut que ça puisse marcher sans.
si je te comprend bien, écrire sur stdout et stderr ne provoque jamais
aucune erreur d'aucune sorte ? le pire qui puisse arriver, c'est que ce
qu'on y envoie tombe dans un puits sans fond ?

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 ?
A toi de la traiter (p.ex. en
l'ignorant ou en la reportant au niveau supérieur: exemple: erreur
d'écriture dans stdout -> warning unique dans stderr).
ce dont je parlais était d'ignorer les erreurs d'écriture dans les
fichiers de logs, puisque les sorties standards suffisent pour récupérer
l'information.

Erreur d'écriture dans fichier de log -> erreur dans stderr et dialogue
graphique vu que c'est quand même quelque chose de rare.

une erreur d'écriture dans un fichier de log, surtout si on inclus
l'ouverture en écriture, qui fait une erreur en cas d'interdiction,
ça peut arriver si par exemple on installe mon logiciel mal fichu comme
il est Í  un niveau système.
mais surtout :
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.
alors j'ai eu tendance Í  considérer ça comme facultatif, cad :
moi j'en veux, alors je les fait quand même,
mais si pour une raison quelconque il y a un pb pour les faire, comme ça
n'est pas un pb pour toi, j'ai juste Í  l'ignorer.
donc par exemple : s'il y a un pb Í  la lecture du fichier de config, je
ne connais pas encore l'emplacement des fichiers de log,
mais c'est pas grave, puisque c'est facultatif on ne les fait pas, c'est
simple.
mais peut être que, tout en préférant les logiciels qui ne s'en mêlent
pas,
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 ?
et donc, doivent-ils aussi être complets ?
s'il y a un pb Í  la lecture du fichier de config (ou avant),
on ne sait même pas encore Í  ce moment lÍ  si on veut des fichiers de log
ou pas :
que fait-on avec les erreurs ou autres messages qui ont lieu Í  ce moment
lÍ  ?
que me suggères tu Í  cette étape ? :-)
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
Avatar
Thomas
In article <si9vlu$mad$,
Marc SCHAEFER wrote:
Thomas wrote:
- une application desktop est un exécutable compilé pour la plateforme
qui l'exécute,

correct, sauf si c'est du bytecode ou du script (python, perl), lÍ  il
n'y a pas de phase de compilation.

le bytecode c'est le truc qu'on fait interpréter par les JVM ?
(dans ce cas lÍ  il y a un peu de compilation quand même, puisque c'est
du code intermédiaire)
tandis qu'avec une application bureau client/serveur, il y a une part de
chaque coté, le serveur ne gère pas tout.

Et le client peut envoyer ses logs au serveur, ou pas.

:-)
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 !
d'o͹ la question que j'ai posée Í  Stephane Tougard sur firefox :-)
est ce que le debug équivaut Í  des "notifications normales", ou est ce
que c'est autre chose ?

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" ?)
stdout: informations normales (version du programme, opérations
normales)
stderr: erreurs, évt. debug.

merci :-)
as tu des exemples d'opérations normales ?
(on était en mode graphique, lÍ )
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 ?
quand il y a des msgs du genre "ignoring unknown switch" ou "Interactive
mode permits only one file on the command line",
comment les catégorises tu ? interaction utilisateur ou erreurs ?

erreurs.

ok :-)
j'ai oublié de te demander, mais je suppose que si on a un "usage: ..."
c'est pareil.
On doit pouvoir faire
ton-programme 2>/dev/null
et n'avoir que des informations et aucun message d'erreur.

par rapport Í  la question ci-dessus,
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 ?
(un peu plus fastidieux que si on traite tout pareil !)
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
Avatar
Marc SCHAEFER
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.
(sais tu si elles avaient de bonnes raisons de le faire ?)

Non, je ne me suis pas trop intéressé Í  ça.
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
Exemple plus compliqué qui génère des lettres depuis une base de
données, en Perl:
make_latex("template", "out.tex",
'CHER' => (($row[0] eq 'M') ? 'Cher' : 'Chère'),
'ADRESSE' => $a,
'SOMME' => $s,
'PRENOM' => $p,
'APAYER' => ($s > 0) ? 'true' : 'false');
avec un fichier template qui ressemble Í :
opening{%CHER% %PRENOM%,}
...
Exemple en Perl Mojolicious via TemplateToolkit qui génère de l'HTML:
<form action="/config" method="post">
<label>Filtre d'&eacute;metteur
<select name="from">
% foreach my $f (@{$filters}) {
<option value="<%= $f->id %>"<%= ($f->id eq $current_filter->{'from'}) ? " selected" : "" %>><%= $f->name %></option>
% }
</select>
</label>
<label>Filtre de thread
<select name="thread">
% foreach my $f (@{$filters}) {
<option value="<%= $f->id %>"<%= ($f->id eq $current_filter->{'thread'}) ? " selected" : "" %>><%= $f->name %></option>
% }
</select>
</label><br>
<input type="submit">
</form>
---> SI C'EST DU TEXTE, J'AIME!
sauf que la partie cli aussi risque d'avoir besoin du fichier de config
(une suggestion ?)

des valeurs par défaut s'il n'y a pas de config, p.ex. en dur
$HOME/nom-app/log etc.
ah oui, tu disais ça en lien avec le file-browser ?

C'est toi qui as dit que ton file browser dans ton code changeait de
répertoire courant. Ou c'est ce dont je me rappelle.
je me demande ce qu'il peut y avoir comme pb quand par exemple 2
instances veulent modifier le même fichier ...

Il existe des verrous, et on peut informer l'utilisateur si c'est une
erreur de l'utilisateur. Si c'est le fonctionnement même de
l'application d'écrire dans le même fichier, ça semble un bug de
l'application?
Comme quoi faire du GUI *et* de la ligne de commande c'est compliqué.

veux tu dire que tu recommandes de tjr lancer les applications GUI
depuis un bureau GUI et pas depuis un terminal ?

Non, ça c'est égal.
Ce que je voulais dire est que de faire une application qui se comporte
comme j'ai envie en ligne de commande (avec des paramètres adaptés, etc)
et aussi en GUI est probablement complexe.
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.
Avatar
Marc SCHAEFER
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)

Il y a toutefois des cas o͹ l'on transcompile le bytecode en code natif
(just in time), typiquement sur Android au moment o͹ on installe
l'application.
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 !

Typiquement, sous UNIX, il m'est arrivé de configurer des applications
de manière Í  ce que le le log aille dans:
/network/fs.toto.ch/logs/$CLIENT/application-${UNIQUE}.log
et par la magie de l'automounter, les logs finissent sur le serveur
fs.toto.ch, dans le répertoire correspondant au nom du client, dans un
fichier correspondant au nom de l'application suffixée d'une valeur
unique contenant la date.
Evidemment, ça marche uniquement dans un réseau intégré ("domaine").
Autre technique que j'ai utilisée: quand le programme se termine, le log
est pushé sur le serveur par HTTPS.
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é. Je me demande si plutÍ´t qu'une discussion
USENET tu ne devrais pas créer un wiki pour organiser tes pensées et les
réponses qui te sont données, et qui nous permettrait de nous rappeler
ce qu'on a déjÍ  discuté :)
j'ai oublié de te demander, mais je suppose que si on a un "usage: ..."
c'est pareil.

J'ai tendance Í  faire ainsi en shell:
if [ mauvais arguments donnés ]; then
echo "$0: bad args." >&2
echo "$0 [--config toto.conf]" >&2
fi
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.
(Pour rappel, >&2 signifie écrire dans stderr).
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?
Avatar
Stéphane CARPENTIER
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. Si le
packageur, l'administrateur ou l'utilisateur final considère que les
logs sont importants, il est possible de gérer le lancement en
redirigeant les logs dans un fichier. C'est pas forcément ton problème.
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.
--
Si vous avez du temps Í  perdre :
https://scarpet42.gitlab.io
Avatar
Stéphane CARPENTIER
Le 24-09-2021, Marc SCHAEFER a écrit :
Typiquement, sous UNIX, il m'est arrivé de configurer des applications
de manière Í  ce que le le log aille dans:
/network/fs.toto.ch/logs/$CLIENT/application-${UNIQUE}.log
et par la magie de l'automounter, les logs finissent sur le serveur
fs.toto.ch, dans le répertoire correspondant au nom du client, dans un
fichier correspondant au nom de l'application suffixée d'une valeur
unique contenant la date.
Evidemment, ça marche uniquement dans un réseau intégré ("domaine").
Autre technique que j'ai utilisée: quand le programme se termine, le log
est pushé sur le serveur par HTTPS.

LÍ , tu commences Í  parler de cas très particuliers et ce n'est
clairement plus le problème du développeur. C'est de l'administration
système pure. Bien sÍ»r, il ne faut pas que le développeur gêne
l'administration système.
Mais fais attention, tu poses des questions dans toutes les directions,
donc tu risques d'avoir des réponses dans toutes les directions.

VoilÍ .
--
Si vous avez du temps Í  perdre :
https://scarpet42.gitlab.io
4 5 6 7 8