Yii2-如何设置日志消息中的时间?

时间:2018-08-21 05:45:38

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

我在Yii2中使用EmailTarget,并且正在记录这样的消息。

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

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

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

默认情况下,Yii2生成日志消息并以GMT格式显示时间。

如何在这些日志消息中配置时间?

2 个答案:

答案 0 :(得分:1)

您可以创建一个从yii\log\EmailTarget扩展的新类,并覆盖从formatMessage()继承的函数yii\Log\Target

Yii 2 Docs (log\Target) Github source

然后在您的配置中使用该类:

'components' => [
    'log' => [
         'targets' => [
             [
                'class' => 'your\namespace\CustomEmailTarget',
                'mailer' => 'mailer',
                'levels' => ['error', 'warning'],
                'message' => [
                    'from' => ['log@example.com'],
                    'to' => ['developer1@example.com', 'developer2@example.com'],
                    'subject' => 'Log message',
                ],
            ],
        ],
    ],
],

答案 1 :(得分:1)

此日志目标使用date()进行日期格式设置,因此,如果使用错误的时区获取日期,则您的PHP中的时区设置可能不正确。您可以使用date_default_timezone_set()来更改date()使用的时区,例如在您的配置中:

date_default_timezone_set('America/Los_Angeles');

另请参阅list of available timezones


如果您的日志目标应使用与应用程序其余部分不同的时区,则可以创建自定义目标并以这种方式覆盖getTime()

protected function getTime($timestamp) {
    $oldTimezone = date_default_timezone_get();
    date_default_timezone_set('UTC'); // <- put your timezone here

    $parts = explode('.', StringHelper::floatToString($timestamp));
    $result = date('Y-m-d H:i:s', $parts[0]) . ($this->microtime && isset($parts[1]) ? ('.' . $parts[1]) : '');

    date_default_timezone_set($oldTimezone);
    return $result;
}