Le root Log4J est en level “debug” par défaut car, dans Simplicité, le logging “normal” (= utilisant AppLog) est géré par la notion paramétrable de log event et certains paramètres systèmes qui permettent d’activer le niveau de trace voulu (jusqu’au niveau debug) à la demande
le LOG_DEBUG (livré par défaut à no) qui détermine si les events de niveau debug sont actifs ou non)
les LOG_INFO, LOG_WARN, etc. (livrés par défaut à yes) qui font de même pour les logs events des autres niveaux
les autres LOG_* qui déterminent si certains loggings système particuliers sont actifs, ex: LOG_SQL_SYSTEM et LOG_SQL_USER qui permettent parfois en dev de débugger certaines requêtes SQL du socle
Il ne faut jamais activer les params LOG_* livrés par défaut à no en prod (sauf éventuellement très ponctuellement pour investiguer un pb précis) car ça induit potentiellement des volumes de logs énormes.
Au delà de ces params systèmes et log events paramétrables, rien ne vous empêche de customiser votre image Docker pour adapter le log4j2.xml et/ou le logging.properties à vos usages (ex: utilisation de traces logs qui n’utilisent pas AppLog) et vos besoins/contraintes.
Par exemple pour mettre le root logger Log4J à “info”:
FROM registry.simplicite.io/platform:<tag>
RUN sed -i '/Root/s/level="debug"/level="info"' /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/log4j2.xml
Ou ajouter des exceptions comme celles qu’on a mis sur les traces des libs JGit.
Etc.
Cela dit, je pense qu’il faudrait commencer par regarder de près ce qui se retrouve effectivement dans vos logs pour mieux cerner ce qui induit éventuellement un volume excessif et donc pouvoir déterminer ce qu’il convient de faire exactement.
PS: j’avais zappé mais dans les images Docker récentes il y a des variables d’environnement qu’on peut directement passer au container pour ajuster les fichiers de logs sans devoir construire une image custom:
LOG4J_ROOT_LEVEL pour ajuster le root level dans log4j2.xml
LOGGING_CONSOLE_LEVEL et LOGGING_FILE_LEVEL pour ajuster le niveau de log console et fichier dans le logging.properties
Ca ne dispense pas pour autant de l’analyse ci-dessus pour savoir ce qui induit un niveau de log inapproprié dans votre cas et donc pour pouvoir déterminer ce qu’il convient de faire exactement.
David, j’ai une question sur les logs qui sont affichées dans Simplicite. Sur quoi s’affiche cet affichage? Sur le fichier simplicite.log ou sur la console?
Je ne suis pas sûr de comprendre ce que vous entendez par “les logs qui sont affichées dans Simplicite”…
Si on parle de la page UI legacy “log viewer” (que, pour mémoire, il ne faut jamais utiliser autrement que ponctuellement et uniquement en DEV), celle-ci lit dans le fichier simplicite.log configuré en tant que file appender (SIMPLICITE-FILE) dans la config du logger Log4J.
Si on parle des logs accessibles niveau Docker (ex: via un docker logs -f <container ID/name>) il s’agit des logs configurés en tant que console appender (SIMPLICITE-CONSOLE) dans la config Log4J (auxquels s’ajoutent les logs Tomcat configurées au niveau du Java logging qui sont aussi poussées vers la console)
Si on parle des logs remontées dans la console du navigateur via websockets c’est un mécanisme niveau AppLog indépendant du logger Log4J.
Oui la page /ui/logs est ce que j’appelle la page legacy “log viewer”.
C’est plus une “backdoor” historique destinée uniquement au DEV et pas du tout optimale dans son traitement. Il ne faut jamais l’utiliser en PROD (où il faut aller à la source pour consulter les logs = récupérer ce que Docker lit de la console et/ou monter un volume pour accéder aux fichiers logs).
Pour la petite histoire, lorsqu’on a mis en place la mécanique de remontée de traces AppLog via websockets vers la console du navigateur (en 3.1 = en 2014-2015 (!)), on a voulu supprimer définitivement ce “log viewer” historique. Malheureusement les websockets ne sont pas encore bien supportées sur toutes les infras, donc on l’a conservé jusqu’à nouvel ordre pour ne pas frustrer ceux qui ont une infra incompatible avec les websockets. Mais ça reste une “backdoor” à réserver à un usage ponctuel et uniquement en DEV.
Comme dit à plusieurs reprises lors de nos échanges, je soupçonne que vous vous en servez comme votre outil “nominal” pour suivre en permanence les logs de PROD. Si c’est le cas c’est une très mauvaise idée et ça nous conforte dans l’idée que cet outil historique doit être définitivement retiré de la plateforme.
David,
malgré nos échanges je n’avais pas compris jusque là que tu parlais de ce dispositif. En toute honnêteté, je ne sais pas dans quelle mesure il est utilisé par l’équipe, mais je vais leur transmettre la préco de ne surtout pas l’utiliser en PROD.
Pour mémoire, mon soupçon est lié à des infos de supervision JVM fournies qui semblaient indiquer une présence d’instances de classes Java qui ne sont utilisées que par ce composant “log viewer”
Suite à ce soupçon nous avons apportés qques petites améliorations sur ce composant (dans le cadre de la révision 5.1.35) mais ça reste malgré tout fondamentalement une “backdoor” pas optimale (et en fin de vie) qu’il vaut mieux éviter d’utiliser, surtout en PROD.