web-dev-qa-db-ja.com

laravelキュージョブでログが機能しない

私は私のsupervisor/conf.d/myconf.confファイルに以下の設定があります:

[program:my-worker]    
process_name=%(program_name)s_%(process_num)02d    
command=php /var/www/html/artisan queue:work sqs --queue=my_queue_name --tries=3 --daemon    
autostart=true    
autorestart=true    
user=root    
numprocs=1    
redirect_stderr=true    
stdout_logfile=/var/www/html/storage/logs/mylogfile.log

Storage/logs/mylogfile.logファイルにすべての権限を付与しました。なぜそれがまだログに記録されないのか理解できません、

毎日のログを使用していると思います。

1つのログファイルがある場合、1つのログファイルがあります。 "laravel.log"は完全なアクセス許可[777]を付与するため、ログを記録でき、すべてが期待どおりに機能します。

しかし、毎日のファイルを選択すると、laravelアプリは何かをログに記録する必要があるときはいつでも新しいファイルを作成します。このファイルの所有者はWebサーバーです(daemon/www -root)laravelはユーザーが実行するためdaemon/www-rootです。

キューが処理されているときのアクションのユーザーは "cli"であり、このファイルに書き込む権限がありません。そのため、例外がスローされ、処理が停止します。

毎日のログを使用している場合、私が推奨するのは、モノログの設定を変更して、ユーザーごとに異なるログファイルが作成されるようにすることです。

このコードをbootstrap/app.phpに追加します

/**
 * Configure Monolog.
 */
$app->configureMonologUsing( function( Monolog\Logger $monolog) {
    $processUser = posix_getpwuid( posix_geteuid() );
    $processName= $processUser[ 'name' ];

    $filename = storage_path( 'logs/laravel-' . php_sapi_name() . '-' . $processName . '.log' );
    $handler = new Monolog\Handler\RotatingFileHandler( $filename );
    $monolog->pushHandler( $handler );
});

アプリを再開する直前。

これで、cliのログファイルも作成され、キューに関連するすべてのものがそのファイルに記録されます。

これにより、ログファイルもクリーンに保たれます。 HTTPアプリログは別のファイルにあり、キュー処理ログは別のファイルにあります。

また、次のコマンドを実行することを忘れないでください。

新しい設定が正しく読み込まれていることを確認するには

php artisan config:clear

スーパーバイザデーモンキューワーカーを使用しているため、キューの再起動信号をブロードキャストする必要があります。

php artisan queue:restart

お役に立てれば。

19
Prabhat Rai

@PrabhatRaiの回答に基づいて、Laravelのデフォルトの動作により似た別の設定例を次に示します。

このコードをbootstrap/app.phpに追加します。

$app->configureMonologUsing(function (Monolog\Logger $monolog) {
    $filename = storage_path('logs/' . php_sapi_name() . '-' . posix_getpwuid(posix_geteuid())['name'] . '.log');
    $monolog->pushHandler($handler = new Monolog\Handler\RotatingFileHandler($filename, 30));
    $handler->setFilenameFormat('laravel-{date}-{filename}', 'Y-m-d');
    $handler->setFormatter(new \Monolog\Formatter\LineFormatter(null, null, true, true));
});
  • 次のようなファイルを保存します:laravel-2017-03-27-cli-raph.logおよびlaravel-2017-03-27-fpm-cgi-raph.log
  • 新しい行が保持されます(デフォルトではLaravel動作)
  • Laravel Log Viewerで動作します
5
rap-2-h

この問題を解決するために、私は次のことを行いました:

  1. ストレージディレクトリとそのすべてのサブディレクトリのグループIDを設定します。このディレクトリで作成されたすべてのファイルには、グループとしてwww-dataが含まれます。

    Sudo chgrp -r www-data storage
    Sudo chmod +R g+s storage
    
  2. <user>グループwww-dataに対してスクリプトを実行する

    Sudo usermod -a -G www-data user
    
0
0Fabien0