You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel定时任务日志时间错误,如何配置同步时区?

Laravel日志时区调整方案

问题背景

定时任务日志显示UTC时间(如09:58),但实际本地时间为10:58,服务器时区配置正确,config/app.php中timezone设为UTC,需要让日志显示本地时区(中欧/中非时间)。

解决方案

方法1:修改日志配置的时间格式(快速生效)

编辑config/logging.php,找到你使用的日志通道(比如默认的stack或single),修改date配置项,利用Carbon直接转换时区:

// 以single通道为例
'single' => [
    'driver' => 'single',
    'path' => storage_path('logs/laravel.log'),
    'level' => env('LOG_LEVEL', 'debug'),
    // 替换原有的date配置,这里以中欧时间(Europe/Paris)为例
    'date' => \Carbon\Carbon::now()->tz('Europe/Paris')->format('Y-m-d H:i:s'),
],

如果使用stack通道,需修改其包含的子通道配置。

方法2:自定义日志格式化器(全局生效,更灵活)

  1. 创建自定义格式化器类:
    在app/Logging目录下创建LocalTimeFormatter.php:
<?php

namespace App\Logging;

use Monolog\Formatter\LineFormatter;

class LocalTimeFormatter extends LineFormatter
{
    public function format(array $record): string
    {
        // 将UTC时间转换为目标时区,这里替换为你的本地时区,比如Africa/Abidjan(中非时间)
        $record['datetime'] = $record['datetime']->setTimezone('Africa/Abidjan');
        return parent::format($record);
    }
}
  1. 在config/logging.php中配置使用该格式化器:
'single' => [
    'driver' => 'single',
    'path' => storage_path('logs/laravel.log'),
    'level' => env('LOG_LEVEL', 'debug'),
    'formatter' => App\Logging\LocalTimeFormatter::class,
    // 可选:指定日志格式,确保包含时间占位符
    'formatter_with' => [
        'format' => '[%datetime%] %channel%.%level_name%: %message% %context% %extra%',
    ],
],

方法3:仅针对定时任务调整日志时间

如果只需要定时任务的日志显示本地时间,在任务类中记录日志时手动转换时间:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Carbon\Carbon;

class UpdateEventStatus extends Command
{
    protected $signature = 'events:update-status';
    protected $description = 'Update event statuses';

    public function handle()
    {
        $localTime = Carbon::now()->tz('Europe/Paris')->toDateTimeString();
        $this->info("Success: Checked at {$localTime}");
        
        // 其他任务逻辑...
        $this->info("Number of events updated to 'Terminé': 4");
    }
}

注意事项

  • 替换示例中的时区标识为实际需要的时区,可参考PHP官方支持的时区列表。
  • 修改配置后,执行php artisan config:clear清除配置缓存,确保新配置生效。

内容的提问来源于stack exchange,提问作者ADIL RADIDI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:52:19