自己的日志类不执行writeLog()函数 - TYPO3 7.6.28

时间:2018-06-06 08:54:09

标签: php logging typo3 core

我在“AbstractWriter”类/接口上遇到了一些问题。

想法是编写一个日志函数,在调用导入程序后,每个电子邮件都会发送日志。 导入器命令函数写入日志。

该课程如下:

<?php

namespace my_site_package\Importer\Log\Writer;

use TYPO3\CMS\Core\Log\LogRecord;
use TYPO3\CMS\Core\Log\Writer\AbstractWriter;
use TYPO3\CMS\Core\SingletonInterface;

class MailWriter extends AbstractWriter implements SingletonInterface
{
    protected $buffer = [];

    protected $mail;

    /**
     * @return mixed
     */
    public function getMail()
    {
        return $this->mail;
    }

    /**
     * @param mixed $mail
     */
    public function setMail($mail)
    {
        $this->mail = $mail;
    }

    /**
     * Writes the log record
     *
     * @param LogRecord $record Log record
     * @return \TYPO3\CMS\Core\Log\Writer\WriterInterface $this
     * @throws \RuntimeException
     */
    public function writeLog(LogRecord $record)
    {
        var_dump('writeLog');

        $data = '';
        $recordData = $record->getData();
        if (!empty($recordData)) {
            if (isset($recordData['exception']) && $recordData['exception'] instanceof \Exception) {
                $recordData['exception'] = (string)$recordData['exception'];
            }
            $data = '- ' . json_encode($recordData);
        }

        $this->buffer[] = $record->getMessage() . $data;
        return $this;
    }

    function __destruct()
    {

        error_log('MailWriter');
        if ($this->getMail() === null) {
            return;
        }
        /** @var \TYPO3\CMS\Core\Mail\MailMessage $message */
        $message = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Mail\\MailMessage');
        $message->setTo($this->getMail())
            ->setFrom($this->getMail())
            ->setSubject('Importer Output');

        $message->setBody(implode("<br/>", $this->buffer), 'text/html');

        $message->send();

    }
}

我在ext_localconf.php - &gt;

中配置它

// add MAIL WRITER LOGER
$GLOBALS['TYPO3_CONF_VARS']['LOG']['my_site_package']['Importer']['writerConfiguration'] = [
    \TYPO3\CMS\Core\Log\LogLevel::WARNING => [
        'my_site_package\Importer\Log\Writer\MailWriter' => [
            'mail' => 'test@test.de',
        ],
        'TYPO3\CMS\Core\Log\Writer\FileWriter' => [
            'logFile' => 'typo3temp/logs/typo3_9010781e0f.log'
        ],
    ],
];

在后端模块“配置”中,我可以看到他接受记录器,在我执行导入器后,我收到一封空邮件。他在__destruct()函数中运行,但不在writeLog()函数中运行。

writeLog()函数中的var_dump()输出永远不会出现。

如果我自己创建一个新的LogRecord对象并将其提供给writeLog()函数,我会在使用给定消息启动导入器后收到一封电子邮件。

    function __destruct()
    {

        $log = new LogRecord('__destruct',1,"test if function is loaded");

        $this->writeLog($log);
        var_dump($this->buffer);

        error_log('MailWriter');
        if ($this->getMail() === null) {
            return;
        }
        /** @var \TYPO3\CMS\Core\Mail\MailMessage $message */
        $message = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Mail\\MailMessage');
        $message->setTo($this->getMail())
            ->setFrom($this->getMail())
            ->setSubject('Importer Output');

        $message->setBody(implode("<br/>", $this->buffer), 'text/html');

        $message->send();

    }

此功能几周前就可以使用了。

新的DSGVO更新是否破坏了核心内容或更改了如何使用它?我的意思是他认识到了这个类,但没有从界面中识别给定的函数。

问候, 法比奥

0 个答案:

没有答案