pendonl/laravel-schedulelogger

此包已被弃用且不再维护。未建议替代包。

记录 Laravel 中计划任务的执行时间

v1.1.3 2016-12-17 13:35 UTC

This package is auto-updated.

Last update: 2020-05-22 14:54:29 UTC


README

Latest version on Packagist Software License Travis branch Scrutinizer SensioLabs Insight Style Ci Total Downloads

此包自动记录 Laravel 中计划任务的执行时间。只需将默认的 Schedule 类替换为 LogSchedule 类,时间将默认保存到数据库中。

安装 & 使用

使用 composer 安装包

composer require pendonl/laravel-schedulelogger

将服务提供者和外观添加到 config/app.php 中。 (对于 Laravel 5.5 及以上版本,启用了自动发现)

'providers' => [
    ...
    PendoNL\LaravelScheduleLogger\LaravelScheduleLoggerServiceProvider::class,
    ...
]

然后

'aliases' => [
    ...
    'LogSchedule' => PendoNL\LaravelScheduleLogger\Facade::class,
    ...
]

下一步是发布和运行迁移

php artisan vendor:publish --provider="PendoNL\LaravelScheduleLogger\LaravelScheduleLoggerServiceProvider"
php artisan migrate

然后我们必须替换由事件使用的事件默认 Schedule 实例,为此我们需要编辑 app/Console/Kernel.php。在文件底部添加此方法

/**
 * Define the application's command schedule.
 *
 * @return void
 */
protected function defineConsoleSchedule()
{
    if (App::environment('local', 'staging')) {
        $this->app->instance(
            'Illuminate\Console\Scheduling\Schedule', $schedule = new \PendoNL\LaravelScheduleLogger\Console\Scheduling\LogSchedule
        );
    } else {
        $this->app->instance(
            'Illuminate\Console\Scheduling\Schedule', $schedule = new Schedule
        );
    }
    
    $this->schedule($schedule);
}

同时确保在 app/Console/Kernel.php 的顶部导入 App Facade

use App;

完成这些后,通过运行 php artisan schedule:run 测试设置,如果一切顺利,你将看不到错误,并且在你的数据库中 schedulelogs 表将填充 X 条记录。

你可以使用此命令 php artisan schedulelogger:clean 清理日志。或者添加以下计划作业

$schedule->command('schedulelogger:clean');

你可以指定要保留的日志数量。参数 days 是可选的,默认为 30 天,例如,仅保留上周的记录,命令将是

php artisan schedulelogger:clean 7

显示执行时间

要显示屏幕上的信息,你可以在控制器中导入模型

use PendoNL\LaravelScheduleLogger\Schedulelog;

之后,只需获取记录即可。LogSchedule Facade 有一个简单的方法可以返回以毫秒为单位的执行时间。以下是一个示例。

foreach(Schedulelog::take(10)->get() as $log) {
    $ms = LogSchedule::getExecutiontime($log);
    echo "Execution of command [$log->command_name] took [$ms] milliseconds";
}

致谢

安全

如果您发现任何安全问题,请通过电子邮件 joshua@pendo.nl 而不是使用问题跟踪器。

关于 Pendo

Pendo 是一家位于荷兰马斯特里赫特的网络开发公司。如果您愿意,可以 访问我们的网站

许可

MIT 许可证(MIT)。有关更多信息,请参阅 许可文件