Laravel ログを出力してみる

# 目的

- Laravelでのログの出力方法をまとめる
- Laravelのログに関して少し詳しく調査した内容が知りたい方はこちら→[Laravel5.6以降のログの機能をちょっと調べた](https://qiita.com/miriwo/items/0a44b70f722a3863ff38)

# 実施環境

- MacのローカルにLaravelの環境を構築して実施する。環境構築手順の記事はリンクを後述する。
- ハードウェア環境

| 項目 | 情報 |
| --- | --- |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

- ソフトウェア環境

| 項目 | 情報 | 備考 |
| --- | --- | --- |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/adaaaeecae69d6392e08) |
| MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いてこちらの方法で導入→[Mac HomebrewでMySQLをインストールする](https://qiita.com/miriwo/items/ef6a064bc545fbea29d9) |

# 前提条件

- 下記、または下記に準ずる方法でLaravelの環境構築がされていること。
    - [Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/adaaaeecae69d6392e08)

# 前提情報

- 本記事ではログの出力までの方法を最短で記載する、ログの機能の詳細の説明は実施しない。
- 本来アプリ作成時に必要であるDBの作成や.envファイルによるDBの登録などの手順は本記事では説明しない。

# 読後感

- ブラウザのページを表示する処理をトリガーにして`storage/logs/laravel.log`ファイルに「[YYYY-MM-DD HH:MM:SS] local.DEBUG: test」と言う一行をログとして出力できる。

# 筆者の勘違い(ほぼ関係ないので飛ばしてください)

- ログは.envファイルで設定さえすれば出力される物だと思っていた。
- 実際にはログを出力したい場面のコントローラのアクション内でLogファサードを用いて命令が必須である。

# 概要

1. アプリ作成
1. ルーティングの記載
1. UserHomeController作成と記載
1. 確認

# 詳細

1. アプリ作成
    1. アプリを作成する任意のディレクトリに移動して下記コマンドを実行して「test」と言う名前のアプリを作成する。

        ```terminal
        $ laravel new test
        ```
1. ルーティングの記載
    1. testディレクトリで下記コマンドを実行してルーティングファイルを開く。

        ```terminal
        $ routes/web.php
        ```
    1. 開いたルーティングファイルに下記の一行を記載する。

        ```routes/web.php
        Route::get('/user_home', 'UserHomeController@index');
        ```
    1. 記載後のルーティングファイルの内容を下記に記載する。

        ```routes/web.php
        <?php
        
        use Illuminate\Support\Facades\Route;
        
        /*
        |--------------------------------------------------------------------------
        | Web Routes
        |--------------------------------------------------------------------------
        |
        | Here is where you can register web routes for your application. These
        | routes are loaded by the RouteServiceProvider within a group which
        | contains the "web" middleware group. Now create something great!
        |
        */
        
        Route::get('/', function () {
            return view('welcome');
        });
        
        Route::get('/user_home', 'UserHomeController@index');
        ```
    1. 保存して閉じる。
1. UserHomeController作成と記載
    1. testディレクトリで下記コマンドを実行してUserHomeController.phpを作成する。

        ```terminal
        $ php artisan make:controller UserHomeController
        ```
    1. 下記コマンドを実行して先のコマンドで作成したUserHomeController.phpを開く。

        ```terminal
        $ vi app/Http/Controllers/UserHomeController.php
        ```
    1. 開いたUserHomeController.phpを下記の様に修正する。

        ```test/app/Http/Controllers/UserHomeController.php
        <?php
        
        namespace App\Http\Controllers;
        
        use Illuminate\Http\Request;
        //下記を追記する、下記の宣言がないとエラーになる
        use Illuminate\Support\Facades\Log;
        
        class UserHomeController extends Controller
        {
            //下記を追記する
            public function index()
            {
                //Log::debug('ログとして出力したい文字列')の様に記載する
                Log::debug('test');
                return redirect('/');
            }
            //上記までを追記する。
        }
        ```
    1. 保存して閉じる。
1. 確認
    1. testディレクトリで下記コマンドを実行してまだlogファイルが存在していないことを確認する。「No such file or directory」が出力されればlaravel.logファイルは存在しない。

        ```terminal
        $ ls storage/logs/laravel.log
        >ls: storage/logs/laravel.log: No such file or directory
        ```
    1. testディレクトリで下記コマンドを実行してローカルサーバを起動する。

        ```terminal
        $ php artisan serve
        ```
    1. ブラウザからtestアプリにアクセスする。デフォルトだと[http://127.0.0.1:8000/](http://127.0.0.1:8000/)にアクセスするとブラウザでtestアプリが表示できる。
    1. 下記画面が表示されていることを確認する。

        <img width="1439" alt="Laravel.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/b538e184-404a-e00c-6032-a422ae1b914f.png">

    1. [http://127.0.0.1:8000/user_home](http://127.0.0.1:8000/user_home)にアクセスしてみる。(アクセスしても何も起こらず、先の画像と同じLaravelのトップページが表示されると思うがその動作は期待する動作である。)
    1. testディレクトリで下記コマンドを実行してログファイルを開く。

        ```terminal
        $ less storage/logs/laravel.log
        ```
    1. 下記の一行が記載されていることを確認する。(YYYY-MM-DD HH:MM:SSはみなさんがhttp://127.0.0.1:8000/user_homeにアクセスした時間が入る。)

        ```test/storage/logs/laravel.log
        [YYYY-MM-DD HH:MM:SS] local.DEBUG: test 
        ```
    1. 書き込まれていた場合ログの出力が正常に行われたと言うこととなる。