Yii2 - 如何在日志消息中设置时间?
Yii2 - How to set Time in Log messages?
我在 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 格式显示时间。
如何在这些日志消息中配置时间?
您可以创建一个从 yii\log\EmailTarget
扩展的新 class 并覆盖函数 formatMessage()
继承的形式 yii\Log\Target
。
Yii 2 Docs (log\Target)
Github source
然后在您的配置中使用 class:
'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_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;
}
我在 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 格式显示时间。
如何在这些日志消息中配置时间?
您可以创建一个从 yii\log\EmailTarget
扩展的新 class 并覆盖函数 formatMessage()
继承的形式 yii\Log\Target
。
Yii 2 Docs (log\Target) Github source
然后在您的配置中使用 class:
'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_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;
}