我在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格式显示时间。
如何在这些日志消息中配置时间?
答案 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;
}