首页 > 解决方案 > TYPO3:如何配置 $GLOBALS['TYPO3_CONF_VARS']['LOG'] 正确性

问题描述

我正在尝试使用日志框架的配置为 TYPO3 中的一个自定义类配置日志记录,如下所述:

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

我想为每个类配置日志记录

\Aip\塔利亚科达\任务\

没有配置日志消息被写入typo3temp\var\log 下的日志文件中

我做了几次这样的尝试:

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

结果总是一样的:我找不到任何地方记录的消息。我写的类是一个任务,所以它扩展了 AbstractTask 并有自己的记录器。出于这个原因,我已经建立了另一个记录器(我不希望每个任务都写入 SYS LOG) 正如我所说的没有配置,新记录器会写入日志文件。添加错误输入的配置,该类会引发异常(因此会考虑配置)。使用上面的配置,日志消息似乎消失了。

标签: loggingconfigurationtypo3

解决方案


概括:

据我所知,如果您想使用日志记录框架将日志记录到 sys_log DB 表并在只有核心功能的“日志”BE 模块中读取它,那么您就不走运了。

任何一个:

  1. 使用扩展“日志”(GitHub 上的来源)(免责声明:这是已在 GitHub 上“存档”的第三方扩展,我不知道它是否支持或支持多长时间)。它在“管理工具”中创建自己的后端模块“日志”。

  2. 使用文件记录哨兵记录

  3. 编写您自己的 LogWriter,它将以“Log”BE 模块可读的正确格式写入 sys_log 表。


您的配置看起来不错(通常),但不会按预期工作。

您可能需要先确定,您知道 SyslogWriter 将写入的位置。这在文档中进行了解释。SyslogWriter 不会像预期的那样写入“sys_log”数据库表,而是通过 syslog 写入系统日志。最终结果取决于您的配置。您可能需要检查您的 /var/log/messages。这可能不是你想要的。请改用 FileWriter 或 DatabaseWriter。

但是,如果您使用DatabaseWriter,这将无法通过后端的“Log”模块读取,如文档中所述:

Admin Tools > Log 模块不适用于 DatabaseWriter 写入 sys_log 表的记录。如果您在那里编写此类记录,您将无法使用该模块查看它们。提示:在https://github.com/vertexvaar/logs有一个用于在 TYPO3 后端查看此类记录的工具。

我认为,如果您将 TYPO3 中的 Logging 视为 2 个单独的 API,它会有所帮助:

  1. 使用 writelog() 记录到“sys_log”表并使用后端的“Log”模块查看它的“旧”方式。文档中不再建议这样做(尽管仍在核心中使用)。
  2. 使用“Logging API”进行日志记录的新方法,它可以记录到文件、数据库表等,也可以扩展为记录到其他编写器。

1的方​​法是通过使用配置的$GLOBALS['TYPO3_CONF_VARS'][SYS][belogErrorReporting]

因此,如上所述,如果您想使用日志框架 (2.) 将日志记录到 sys_log 并在仅具有核心功能的“日志”BE 模块中读取此内容,那么您很不走运。列出了一个扩展https://github.com/vertexvaar/logs。另一种可能性是创建自己的 LogWriter,然后使用 writelog() 写入 sys_log。这样你将来会更加灵活。

我个人也非常喜欢的是sentry-typo3的哨兵方法。你可能想看看它。但是你必须设置一个哨兵服务器。但这很容易做到(至少它对我来说是开箱即用的),但这当然取决于您的网站在哪里运行。


  • 查看核心typo3/sysext/core/Classes/Log/Writer/DatabaseWriter.php您会看到默认情况下使用“sys_log”,但需要不同的架构(如文档中所述)。在我看来,这根本没有意义,但事实就是如此。
  • 查看核心typo3/sysext/core/Classes/Log/Writer/SyslogWriter.php。您将看到日志记录(在 writeLog() 中)是使用 PHP 函数syslog完成的。这不知道 sys_log 中的 TYPO3 日志记录。
  • 查看核心错误和异常处理程序,例如typo3/sysext/core/Classes/Error/AbstractExceptionHandler.php,您将看到日志记录是通过日志记录框架( $this->logger)to 完成的sys_log

推荐阅读