使用OctoberCMS的任务计划日志

时间:2017-03-22 10:34:28

标签: php laravel laravel-5 octobercms

我正在使用基于OctoberCMSLaravel

我在数据库表vendor_log_中有记录。

每天我都需要Laravel将新创建的记录列表保存到日期.log文件中。

在我的自定义组件的Plugin.php文件中,我创建了一个registerSchedule函数。我按当前日期记录表中的get(),然后使用file_put_contents将它们附加到.log文件中。

但是,没有日志文件保存到我的日志服务器路径。我无法判断时间表是否未触发或可能是什么,没有错误。

public function registerSchedule($schedule)
{
    # Generate Daily Log File
    $schedule->call(function () {

        # Get Today's Date
        $date = date("Y-m-d");

        # Get Records by Today's Date
        # Match Record created_at date, exclude time
        $records = \Db::table('vendor_log_')
                    ->whereDay('created_at', date('d'))
                    ->whereMonth('created_at', date('m'))
                    ->whereYear('created_at', date('Y'))
                    ->get();

        # Write records to log file
        foreach ($records as $line) {
          file_put_contents("/var/www/mysite/logs/$date.log", $line . PHP_EOL, FILE_APPEND);
        }

    })->everyMinute();
}

$line的输出:

stdClass Object ( [user_id] => 1 [id] => 28 [username] => [name] => test [created_at] => 2017-03-22 02:39:13 )

注意:我使用->everyMinute()代替->daily()来更快地生成测试日志。

文档:
https://octobercms.com/docs/plugin/scheduling#defining-schedules
https://laravel.com/docs/5.4/scheduling#schedule-frequency-options

1 个答案:

答案 0 :(得分:2)

问题摘要和评论:

问题包括两部分;

  • 用户无法写入保存日志的位置
  • DB类返回的对象不能写为字符串

通过将日志文件写入使用的主机的公用文件夹来解决第一个问题。

将DB对象写入字符串可以通过以下代码完成

foreach($records as $record) {
    $array = (array) $record;

    $string = '';

    foreach($record as $key => $value) {
        $string .= $key .' '. $value . ',';
    }

    // strip the trailing comma of the end of the string
    $line = rtrim($string, ',');

    file_put_contents("/link/to/public/$date.log", $line . PHP_EOL, FILE_APPEND);
}