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

时间:2018-07-31 10:33:20

标签: yii2 yii2-advanced-app yii2-basic-app

我正在尝试在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

2 个答案:

答案 0 :(得分:1)

您可以通过设置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()才能将其删除。

答案 1 :(得分:1)

您可以在配置文件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',
     ],
],