私はLaravelに基づいてOctoberCMSを使用しています。OctoberCMSを使用したタスクスケジューリングログ
データベーステーブルvendor_log_
にレコードがあります。
毎日、新しく作成されたレコードのリストを日付の付いた.logファイルに保存するためにLaravelが必要です。
私のカスタムコンポーネントの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)
注:私はより速くテストのためのログを生成するために->daily()
の代わりに->everyMinute()
を使用していました。
ドキュメント:
https://octobercms.com/docs/plugin/scheduling#defining-schedules
https://laravel.com/docs/5.4/scheduling#schedule-frequency-options
によって行うことができますか?文字列変換に対するオブジェクト/配列が正しく動作しない可能性があります。それがエラーを生成するかどうかを確認したい場合は、コントローラなどでこのスクリプトを試すことができますか? –
スケジューラを正しく設定していますか:https://octobercms.com/docs/setup/installation#crontab-setup、つまり正しい行をcrontabに入れてください。パスは正しいですか?どちらの場合でも、 '' regsiterSchedule''メソッドで単純に '' traceLog( 'scheduler'と呼ばれる) ''を呼び出して、実際に呼び出されることを確認してください。 –
@DouwedeHaan私は競合が見つかったと思います、私のサイトは/ publicフォルダにあり、Laravelには/ logの外部に書き込む許可がありません。 –