コンソールから基本情報行を記録する際に問題があります。ローカルでは、これは正常に動作し、すべてがWebやコンソールからログに記録されます(エラー、情報メッセージ)。しかし、サーバでは、エラーログはうまく動作しますが、私は自分でloggerを呼び出していくつかの情報メッセージを記録しようとすると動作しません。サーバー上のLaravelコンソールでMonologが動作しない
私はLaravel 5.4バージョンを使用しています。
これはテストのためのApp \ Console \ Commands \ DummyCommandクラスの一部です。
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Log\Writer as Log;
class DummyCommand extends Command
{
/**
* Create a new console command instance.
*
* @param \Illuminate\Log\Writer $log
* @return void
*/
public function __construct(Log $log)
{
parent::__construct();
$this->log = $log;
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$message = "Some dummy message";
$this->info($message); // gets printed on console both locally and on server
$this->log->info($message);
$ret = $this->log->getMonolog()->addInfo($message);
dump($ret); // locally = true, server = false
if ($ret === false) {
throw new \Exception('Error while logging!'); // this log works fine both locally and on server
}
}
}
私は、サーバー上で次のコマンドを実行します。
php artisan dummy // prints "Some dummy message" and loggs error message "Error while logging!"
php artisan schedule:run // same thing as above
これが機能しない理由の任意のアイデアを? ストレージフォルダのアクセス権は、すべてのフォルダとファイルで問題ありません。エラーメッセージ(例外)は記録されますが、情報メッセージは記録されません。
編集: これは動作しています。$ this-> log-> info();を呼び出す前に次の行を追加する必要があります。しかし、すべてのコマンドで使用する方法はなく、毎回ログファイルへのパスを設定する必要があります。 (ソース:https://laracasts.com/discuss/channels/general-discussion/logging-in-l5/replies/11771):
$this->log->getMonolog()->addAlert($message);
$this->log->getMonolog()->addCritical($message);
$this->log->getMonolog()->addDebug($message);
$this->log->getMonolog()->addError($message);
$this->log->getMonolog()->addWarning($message);
そして、それは誤りプレフィックス(情報以外のすべて)ですべてのメッセージをログに記録します
$this->log->useDailyFiles(storage_path().'/logs/laravel.log');