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

Yii2-如何在日志消息中设置时间?,yii2,yii2-advanced-app,yii2-basic-app,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 默认情况下,Yi2生成日志消息并以GMT格式显示时间 如何在这些日志消息中配置时间?您可以创建一个从yii\log\EmailTarget扩展的新类,

我在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
默认情况下,Yi2生成日志消息并以GMT格式显示时间


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

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

然后在配置中使用该类:

'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',
                ],
            ],
        ],
    ],
],

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

date_default_timezone_set('America/Los_Angeles');
另见


如果日志目标应使用与应用程序其余部分不同的时区,则可以通过以下方式创建自定义目标并覆盖:

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;
}
受保护函数getTime($timestamp){
$oldTimezone=date\u default\u timezone\u get();
日期默认时区设置('UTC');//微时间和isset($parts[1])?('.$parts[1]):'';
日期\默认\时区\设置($oldTimezone);
返回$result;
}

日志时间是使用格式化的,所以更改它的唯一方法是覆盖它。
目标中的方法受保护。我认为它应该是公共的,这样就可以配置日志消息时间。@Akshaypjoshi更改可见性将不会神奇地允许您配置日志消息时间<如果要覆盖此方法,代码>受保护的
就足够了。谢谢,但我希望从数据库中获取时区,并根据其值在日志文件中显示DateTime。这会有所帮助。谢谢