我在“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更新是否破坏了核心内容或更改了如何使用它?我的意思是他认识到了这个类,但没有从界面中识别给定的函数。
问候, 法比奥