Laravel 5.7のログインに認証ユーザーIDまたはセッションを追加するにはどうすればよいですか?

アラリバ

私の目標

現在認証されているユーザーIDをカスタムログフォーマットとしてログ行に追加します(syslogドライバーを使用しています)。

私の調査の一環として、ユーザーのアクティビティをデータベースに記録するための優れたパッケージとチュートリアルがあることを確認しましたしかし、少なくとも今のところ、私の意図は、現在行っているように、追加のパッケージやsyslogへのログ記録なしで前進することです。

私のアプリでの典型的なログ呼び出しは次のようになります。

logger()->info("Listing all items");

私は次のようなこともできます:

$uid = Auth::id();
logger()->info("Listing all items for {$uid}");

これは、ドキュメントの例が示唆しているものと似ています。

ドキュメントの例

現在、特定の行でこれを行っていますが、すべてのログ呼び出しでこれを実行したいので、何かをログに記録するたびに自分自身を繰り返すようになります。

必要な出力

電流:

Dec 10 23:54:05 trinsic Laravel[13606]: local.INFO: Hello world []

望ましい:

Dec 10 23:54:05 trinsic Laravel[13606]: local.INFO [AUTH_USER_ID=2452]: Hello world []

私のアプローチ

ドキュメントで提案されているように、フォーマットの変更に成功してロガータップしようとしました

しかし、私の現在の問題は、CustomizeFormatterクラスが実行された時点で、Auth IDがまだ解決されていないように見えることです(これについてはわかりませんが、dd()nullを返すので、それは私の推測です):

<?php

namespace App\Logging;

use Illuminate\Support\Facades\Auth;
use Monolog\Formatter\LineFormatter;

class CustomizeFormatter
{
    /**
     * Customize the given logger instance.
     *
     * @param  \Illuminate\Log\Logger  $logger
     * @return void
     */
    public function __invoke($logger)
    {
        $authUser = Auth::id(); // null

        foreach ($logger->getHandlers() as $handler) {
            $formatter = new LineFormatter("%channel%.%level_name% [AUTH={$authUser}]: %message% %extra%");
            $handler->setFormatter($formatter);
        }
    }
}

セットアップ

Laravel 5.7ログドライバー: syslog

    // config/logging.php

    'syslog' => [
        'driver' => 'syslog',
        'tap' => [ App\Logging\CustomizeFormatter::class ],
        'level' => 'debug',
    ],

私の質問

  • この時点で認証ユーザーを解決する方法、またはこれを達成するための他のアプローチはありますか?
アラリバ

DigitalDrifterの回答と、EmirKarşıyakalıからこの投稿の一部に基づいて、私はなんとか十分に公正な解決策を得ることができました。

(現時点での私の理解によると)まだ解決できないため、ユーザーIDを取得できませんでした。しかし、多かれ少なかれ正確なクライアントIDとセッションIDを取得することに満足しているので、ログでユーザーインタラクションスレッドを追跡できます。

<?php

namespace App\Loggers;

use Monolog\Formatter\LineFormatter;

class LocalLogger
{
    private $request;

    public function __construct(\Illuminate\Http\Request $request)
    {
        $this->request = $request;
    }

    public function __invoke($logger)
    {
        foreach ($logger->getHandlers() as $handler) {
            $handler->setFormatter($this->getLogFormatter());
        }
    }

    protected function getLogFormatter()
    {
        $uniqueClientId = $this->getUniqueClientId();

        $format = str_replace(
            '[%datetime%] ',
            sprintf('[%%datetime%%] %s ', $uniqueClientId),
            LineFormatter::SIMPLE_FORMAT
        );

        return new LineFormatter($format, null, true, true);
    }

    protected function getUniqueClientId()
    {
        $clientId = md5($this->request->server('HTTP_USER_AGENT').'/'.$this->request->ip());
        $sessionId = \Session::getId();

        return "[{$clientId}:{$sessionId}]";
    }
}

構成:

    // config/logger.php

    'syslog' => [
        'driver' => 'syslog',
        'level'  => 'debug',
        'tap'    => [App\Loggers\LocalLogger::class],
    ],

結果

今、私は次のようなものを得ることができます:

Dec 11 13:54:13 trinsic Fimedi[13390]: [2018-12-11 16:54:13] c6c6cb03fafd4b31493478e76b490650 local.INFO: Hello world

または

Dec 11 13:55:44 trinsic Fimedi[13390]: [2018-12-11 16:55:44] [c6c6cb03fafd4b31493478e76b490650:xUs2WxIb3TvKcpCpFNPFyvBChE88Nk0YbwZI3KrY] local.INFO: Hello world

ユーザー/セッションIDの計算方法によって異なります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Laravel 5にログインしているときにユーザーステータスを確認するにはどうすればよいですか?

分類Dev

Laravel 5のリレーションシップにデフォルトのスコープ/条件を追加するにはどうすればよいですか?

分類Dev

デフォルトのLaravel5認証クラスを拡張して、ユーザーを削除および更新できる管理インターフェースを提供するにはどうすればよいですか?

分類Dev

Laravel 5:ユーザーログインセッションに追加の属性を保存する方法

分類Dev

Laravel 5.xで期限切れのセッションからログアウトするにはどうすればよいですか?

分類Dev

Laravel5はユーザーがログインしているかどうかを確認します

分類Dev

Laravelにログインするためにユーザーを認証するにはどうすればよいですか?

分類Dev

Laravel 5センチネル:「アクティベーション」と「スロットル」チェックポイントを無効にするにはどうすればよいですか?

分類Dev

Laravel 5でマージされたコレクションをページ付けするにはどうすればよいですか?

分類Dev

AppServiceProviderを介してnavでユーザープロファイルの写真を渡すにはどうすればよいですか?laravel-5

分類Dev

ユーザープロファイルを更新するにはどうすればよいですか?Laravel-5

分類Dev

プロダクションアプリケーションをLaravel5のプロダクションデータベースにリンクするにはどうすればよいですか?

分類Dev

Laravel(5。*)でプレーンSQLクエリを使用するにはどうすればよいですか?またはShoul私はORMを学びますか?

分類Dev

Laravel 5のブレードでURLセグメントにアクセスするにはどうすればよいですか?

分類Dev

Laravel 5での役割に基づいてユーザーを選択するにはどうすればよいですか?

分類Dev

Laravel 5-db挿入のためにlaravel配列に複数のパラメーターを追加するにはどうすればよいですか?

分類Dev

Laravel 5でハッシュ値をデコードするにはどうすればよいですか?

分類Dev

Laravel 5のコレクションからアイテムを取得するにはどうすればよいですか?

分類Dev

ロードバランサー(ssl_termination)の背後にあるLaravel 5でSSLを構成するにはどうすればよいですか?

分類Dev

Laravel 5ミドルウェア認証を設定するにはどうすればよいですか?

分類Dev

Laravel 5.2認証-ログインしたユーザーの名前とログアウトリンクをすべてのページに表示するにはどうすればよいですか?

分類Dev

リンクされたテーブルの列の値をビュー(Laravel5)で取得するにはどうすればよいですか?

分類Dev

Laravel 5でデフォルトのログインURLを変更するにはどうすればよいですか?

分類Dev

Laravel 5のパッケージからコンソールコマンドを登録するにはどうすればよいですか?

分類Dev

Laravel 5にアラートを追加するにはどうすればよいですか?

分類Dev

Laravel 5でSocialiteを使用してOauthプロバイダーによるトークンの有効性を確認するにはどうすればよいですか?

分類Dev

Laravel 5に非管理者ユーザーアカウントを登録できる管理者ユーザーアカウントを作成するにはどうすればよいですか?

分類Dev

laravel5 pluck(lists)メソッドで作成された場合、配列キーに文字列を追加するにはどうすればよいですか?

分類Dev

Laravel 5を使用して、Mailgunメールが正常に送信されたかどうかを確認するにはどうすればよいですか?

Related 関連記事

  1. 1

    Laravel 5にログインしているときにユーザーステータスを確認するにはどうすればよいですか?

  2. 2

    Laravel 5のリレーションシップにデフォルトのスコープ/条件を追加するにはどうすればよいですか?

  3. 3

    デフォルトのLaravel5認証クラスを拡張して、ユーザーを削除および更新できる管理インターフェースを提供するにはどうすればよいですか?

  4. 4

    Laravel 5:ユーザーログインセッションに追加の属性を保存する方法

  5. 5

    Laravel 5.xで期限切れのセッションからログアウトするにはどうすればよいですか?

  6. 6

    Laravel5はユーザーがログインしているかどうかを確認します

  7. 7

    Laravelにログインするためにユーザーを認証するにはどうすればよいですか?

  8. 8

    Laravel 5センチネル:「アクティベーション」と「スロットル」チェックポイントを無効にするにはどうすればよいですか?

  9. 9

    Laravel 5でマージされたコレクションをページ付けするにはどうすればよいですか?

  10. 10

    AppServiceProviderを介してnavでユーザープロファイルの写真を渡すにはどうすればよいですか?laravel-5

  11. 11

    ユーザープロファイルを更新するにはどうすればよいですか?Laravel-5

  12. 12

    プロダクションアプリケーションをLaravel5のプロダクションデータベースにリンクするにはどうすればよいですか?

  13. 13

    Laravel(5。*)でプレーンSQLクエリを使用するにはどうすればよいですか?またはShoul私はORMを学びますか?

  14. 14

    Laravel 5のブレードでURLセグメントにアクセスするにはどうすればよいですか?

  15. 15

    Laravel 5での役割に基づいてユーザーを選択するにはどうすればよいですか?

  16. 16

    Laravel 5-db挿入のためにlaravel配列に複数のパラメーターを追加するにはどうすればよいですか?

  17. 17

    Laravel 5でハッシュ値をデコードするにはどうすればよいですか?

  18. 18

    Laravel 5のコレクションからアイテムを取得するにはどうすればよいですか?

  19. 19

    ロードバランサー(ssl_termination)の背後にあるLaravel 5でSSLを構成するにはどうすればよいですか?

  20. 20

    Laravel 5ミドルウェア認証を設定するにはどうすればよいですか?

  21. 21

    Laravel 5.2認証-ログインしたユーザーの名前とログアウトリンクをすべてのページに表示するにはどうすればよいですか?

  22. 22

    リンクされたテーブルの列の値をビュー(Laravel5)で取得するにはどうすればよいですか?

  23. 23

    Laravel 5でデフォルトのログインURLを変更するにはどうすればよいですか?

  24. 24

    Laravel 5のパッケージからコンソールコマンドを登録するにはどうすればよいですか?

  25. 25

    Laravel 5にアラートを追加するにはどうすればよいですか?

  26. 26

    Laravel 5でSocialiteを使用してOauthプロバイダーによるトークンの有効性を確認するにはどうすればよいですか?

  27. 27

    Laravel 5に非管理者ユーザーアカウントを登録できる管理者ユーザーアカウントを作成するにはどうすればよいですか?

  28. 28

    laravel5 pluck(lists)メソッドで作成された場合、配列キーに文字列を追加するにはどうすればよいですか?

  29. 29

    Laravel 5を使用して、Mailgunメールが正常に送信されたかどうかを確認するにはどうすればよいですか?

ホットタグ

アーカイブ