我正在使用基于OctoberCMS的Laravel。
我在数据库表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
答案 0 :(得分:2)
问题摘要和评论:
问题包括两部分;
通过将日志文件写入使用的主机的公用文件夹来解决第一个问题。
将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);
}