3
votes

TYPO3: Comment configurer $ GLOBALS ['TYPO3_CONF_VARS'] ['LOG'] correclty

J'essaie de configurer la journalisation pour une classe personnalisée dans TYPO3 en utilisant la configuration du cadre de journalisation comme expliqué ici:

https://docs.typo3.org/m/typo3/reference-coreapi/8.7/en-us/ApiOverview/Logging/Configuration/Index.html

Je souhaite configurer la journalisation pour chaque classe dans

\ Aip \ Taglialacoda \ Task \

En l'absence de journal de configuration, les messages sont écrits dans le fichier journal sous typo3temp \ var \ log

J'ai fait plusieurs essais comme celui-ci:

$GLOBALS['TYPO3_CONF_VARS']['LOG']['Aip']['Taglialacoda']['Task']['writerConfiguration'] = [
    TYPO3\CMS\Core\Log\LogLevel::INFO => [
        TYPO3\CMS\Core\Log\Writer\SyslogWriter::class => [],
    ]
];

Le résultat est toujours le même: je ne trouve aucun message enregistré. La classe que j'ai écrite est une tâche, elle étend donc AbstractTask et possède son propre enregistreur. Pour cette raison, j'ai éloigné un autre enregistreur (je ne veux pas que chaque tâche écrive dans SYS LOG) Comme je l'ai dit sans configuration, le nouvel enregistreur écrit dans le fichier journal. L'ajout d'une configuration mal saisie la classe lève une exception (donc la configuration est prise en compte). En utilisant la configuration ci-dessus, le message du journal semble disparaître.


0 commentaires

3 Réponses :


0
votes

c'est pour consigner vos messages de journal dans la table de journal (vous pouvez trouver la liste 'log' dans le backend) si vous voulez 'écrire dans un fichier, utilisez filewrite: https://docs.typo3.org/m/typo3 /reference-coreapi/8.7/en-us/ApiOverview/Logging/Writers/Index.html#filewriter


1 commentaires

C'est exactement le problème: je veux écrire dans la table du journal mais rien n'est écrit ni dans la table ni dans le fichier journal



0
votes

Sommaire:

Autant que je sache, vous n'avez pas de chance si vous voulez vous connecter avec le framework de journalisation à la table de base de données sys_log et lire ceci dans le module BE "Log" avec uniquement les fonctionnalités de base.

Soit:

  1. Utilisez l'extension " logs " (source sur GitHub ) (avertissement: il s'agit d'une extension tierce qui a été "archivée" sur GitHub, je ne sais pas si ni combien de temps elle sera supportée). Il crée son propre module backend "Log" dans "Admin Tools".

  2. Utiliser la journalisation des fichiers ou la journalisation des sentinelles

  3. Écrivez votre propre LogWriter qui écrira dans la table sys_log dans le format correct qui est lisible par le module BE "Log".


Votre configuration semble bonne (en général), mais ne fonctionnera pas comme prévu.

Vous voudrez peut-être d'abord vous assurer que vous savez où SyslogWriter écrira. Ceci est expliqué dans la documentation . SyslogWriter n'écrira pas dans la table de base de données "sys_log" comme on pourrait s'y attendre, mais via syslog dans le journal système. Où cela se termine, dépend de votre configuration. Vous voudrez peut-être vérifier votre / var / log / messages. Ce n'est probablement pas ce que vous voulez. Utilisez plutôt FileWriter ou DatabaseWriter.

Cependant, si vous utilisez DatabaseWriter , cela ne sera pas lisible via le module "Log" dans le backend, comme mentionné dans la documentation:

Le module Admin Tools> Log n'est pas adapté aux enregistrements écrits par DatabaseWriter dans la table sys_log. Si vous y écrivez de tels enregistrements, vous ne pourrez pas les voir en utilisant ce module. Astuce: il existe un outil pour afficher ces enregistrements dans le backend TYPO3 à l' adresse https://github.com/vertexvaar/logs .

Je pense que cela aide si vous visualisez la journalisation dans TYPO3 comme 2 API distinctes:

  1. La "vieille" façon de se connecter à la table "sys_log" avec writelog () et de la visualiser avec le module "Log" dans le backend. Ce n'est plus recommandé dans la documentation (bien que toujours utilisé dans le noyau).
  2. La nouvelle façon de se connecter avec l ' "API de journalisation" qui peut se connecter à des fichiers, des tables de base de données, etc. et est également extensible pour se connecter à d'autres auteurs.

La méthode avec 1 est configurée en utilisant $GLOBALS['TYPO3_CONF_VARS'][SYS][belogErrorReporting]

Donc, comme déjà mentionné ci-dessus, vous n'avez pas de chance si vous voulez vous connecter avec le framework de journalisation (2.) au sys_log et lire ceci dans le module BE "Log" avec uniquement les fonctionnalités de base. Il existe une extension répertoriée https://github.com/vertexvaar/logs . Une autre possibilité est de créer votre propre LogWriter puis d'écrire dans le sys_log avec writelog () dedans. De cette façon, vous seriez plus flexible à l'avenir.

Ce que j'ai personnellement beaucoup aimé, c'est la méthode sentinelle avec sentry-typo3 . Vous voudrez peut-être y jeter un coup d'œil. Mais vous devez configurer un serveur de sentinelle. Mais cela se fait très facilement (au moins cela a fonctionné hors de la boîte pour moi), mais bien sûr, cela dépend de l'emplacement de votre site.


  • regardez dans le noyau typo3 / sysext / core / Classes / Log / Writer / DatabaseWriter.php Vous verrez que par défaut "sys_log" est utilisé, mais un schéma différent est requis (comme également mentionné dans la documentation ). À mon avis, cela n'a aucun sens, mais c'est comme ça.
  • regardez dans le noyau typo3 / sysext / core / Classes / Log / Writer / SyslogWriter.php . Vous verrez que la journalisation (dans writeLog ()) se fait avec la fonction PHP syslog . Ceci n'est pas conscient de la journalisation TYPO3 dans sys_log.
  • regardez dans les gestionnaires d'erreurs et d'exceptions de base, par exemple typo3 / sysext / core / Classes / Error / AbstractExceptionHandler.php et vous verrez que la journalisation se fait via le framework de journalisation ( $this->logger ) et vers sys_log .

2 commentaires

J'avais basé ma logique sur le fait que la table de journal est remplie avec des événements tels que la connexion et la déconnexion de l'administrateur, l'effacement du cache et même certaines erreurs PHP, donc SyslogWriter devrait déjà être configuré pour écrire dans la table sys_log. Suite à votre suggestion, j'ai regardé $ GLOBALS ['TYPO3_CONF_VARS'] et j'ai trouvé qu'il n'y avait pas de configuration spécifique en dehors de la mienne. Ecrire dans le sys_log est exactement ce que je veux réaliser car cela permettrait aux administrateurs du site de regarder les événements du backend


Mon hypothèse initiale selon laquelle vous pouvez simplement vous connecter avec DatabaseWriter et que cela fonctionnera est fausse. J'ai mis à jour ma réponse. C'est à ma connaissance. Il y a peut-être quelqu'un avec une meilleure idée. Je recommanderais également de demander sur le canal Slack # typo3-cms: voir typo3.org/help



0
votes

Vous pouvez utiliser DatabaseWriter comme décrit ici .

Vous devrez adapter votre code à ceci:

$GLOBALS['TYPO3_CONF_VARS']['LOG']['Aip']['Taglialacoda']['Task']['writerConfiguration'] = [
    TYPO3\CMS\Core\Log\LogLevel::INFO => [
        TYPO3\CMS\Core\Log\Writer\DatabaseWriter::class => [],
    ]
];

Cela ajoutera les journaux à la table sys_log par défaut (vous pouvez également utiliser une nouvelle table séparée). Comme mentionné dans la section d'avertissement, ces enregistrements ne peuvent pas être lus par les outils d'administration -> module Journal. Vous devez installer le module de journaux typo3 .


0 commentaires