LoginSignup
3
3

Laravel 10でCloudWatchにログを保存しようとするとMonolog\LogRecord $recordでエラーになる

Posted at

はじめに

以前は使用できていたmaxbanton/cwhのライブラリが
Laravel 10で使用できない状況に陥ったので対処策を入れてみました。

本編

事象について

AWS✖️Laravelでログ機能をCloudWatchで実装する際に
以下のライブラリを使用しようとするとエラーが出ることが判明しました。

Laravel 10より以前は使えていたのですが、
どうやらLaravel 10でMonolog 3にアップデートにされたことに伴い、
Monologの引数が配列→Monolog\LogRecordに型が変わったために
以下のようなエラーが発生し、実行できなくなっていたようです:sob:

Declaration of write(array $record) must be compatible with write(Monolog\LogRecord $record)

解決策

ライブラリのファイルを複製して
該当箇所の型を書き換えたハンドラークラスを作成することで
無事に実行できるようになりました:ok_hand:

一例として置いておきます。

【前提】 
composer require maxbanton/cwhをインストールして
使用しようとしていたものと想定しています。

【解消方法】

  1. 以下に格納されているライブラリの実体ファイルをコピーし、
    自分のプロジェクト配下に配置する(以後MyCloudWatchクラスとする)

    ./vendor/maxbanton/cwh/src/Handler/CloudWatch.php
    
  2. (tanerincode 氏のコミットを参考に)変更内容を反映する

  3. 元のCloudWatchクラスを使用している実装箇所を、
    MyCloudWatchを向くように置き換える

use Maxbanton\Cwh\Handler\CloudWatch;

class hoge{
  public function huga(){

    $handler = new CloudWatch(........;
  
  }
}

use MyHandler\CloudWatch;

class hoge{
  public function huga(){

    $handler = new CloudWatch(........;
  
  }
}

おわりに

国内外問わず開発者さんのGithubなどに上がっているソースコードを見てみると
ありがたいことに解消PRが見つかったりしますね:bow:
英語を恐れず(Google翻訳をお供に)根気強く探してみることが
大事だなと改めて認識するなどしました。

参考記事

Special Thanks!! :)

tanerincode 氏:sunglasses:

ちいかわ部隊の皆さん(身内ネタ)

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3