Yii2 - 如何从日志文件中删除不必要的信息?

Yii2 - How can I remove unnecessary information from log file?

我正在尝试在 Yii2 中记录消息,然后将这些消息通过电子邮件发送到我指定的电子邮件地址。

配置文件 web.php 包含:

'mail' => [
                    'class' => 'yii\log\EmailTarget',
                    'categories' => ['mail'],
                    'logVars' => [],
                    'mailer' => 'mailer',
                    'message' => [
                        'from' => ['user@example.com'],
                        'to' => ['user1@example.com'],
                        'subject' => 'Log message',
                    ],
                ],

我正在记录这样的消息:

Yii::info('Log message example','mail');

执行成功后,我收到的邮件是这样的:

2018-07-31 09:01:12 [127.0.0.1][user@example.com][-][info][mail] Log message example

所以我想做的是从这些消息中删除不需要的信息,如 IP 地址、用户名等,最后我想要的是

2018-07-31 09:01:12 Log message example

您可以通过设置 prefix 属性:

从日志中删除前三部分
'mail' => [
    'class' => 'yii\log\EmailTarget',
    'categories' => ['mail'],
    'logVars' => [],
    'prefix' => function () {
        return '';
    },
    'mailer' => 'mailer',
    'message' => [
        'from' => ['user@example.com'],
        'to' => ['user1@example.com'],
        'subject' => 'Log message',
    ],
],

最后两部分(级别和类别)是硬编码的,您需要扩展 EmailTarget 并覆盖 formatMessage() 以删除它们。

您可以在配置文件 web.php 或代码中进行设置。

Yii::$app->log->targets['test']->prefix = function (){
        return null;
};

'mail' => [
       'class' => 'yii\log\EmailTarget',
       'categories' => ['mail'],
       'logVars' => [],
       'mailer' => 'mailer',
       'prefix' => function () {
           return null;
       },
       'message' => [
       'from' => ['user@example.com'],
       'to' => ['user1@example.com'],
       'subject' => 'Log message',
     ],
],