繁体   English   中英

Laravel 日志文件基于日期

[英]Laravel log file based on date

默认情况下 laravel 将日志文件保存到一个名为 laravel.log 的日志文件中,该文件位于/storage/logs/laravel.log

我的问题是我如何每天获取一个新的日志文件并存储当前日期的/storage/logs/laravel-2016-02-23.log等日志文件,所以我每天都需要一个新的日志文件保存到/storage/logs/

我认为我们可以通过扩展默认的Illuminate\Foundation\Bootstrap\ConfigureLogging引导程序 class 来做到这一点,但我不确定我该怎么做

如果有人可以帮助我,我将不胜感激。

提前致谢。

在我使用的Laravel 5.6版本中,日志的配置文件是config/logging.php

在那里你会找到以下部分

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['single'],
    ],

    'single' => [
        'driver' => 'single',
        'path' => storage_path('logs/laravel.log'),
        'level' => 'debug',
    ],

    'daily' => [
        'driver' => 'daily',
        'path' => storage_path('logs/laravel.log'),
        'level' => 'debug',
        'days' => 7,
    ],
    ...
]

换线

'channels' => ['single'],

进入

'channels' => ['daily'],

然后它会是这样的:

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['daily'],
    ],

    'single' => [
        'driver' => 'single',
        'path' => storage_path('logs/laravel.log'),
        'level' => 'debug',
    ],

    'daily' => [
        'driver' => 'daily',
        'path' => storage_path('logs/laravel.log'),
        'level' => 'debug',
        'days' => 7,
    ],
    ...
]

它将在日志目录中以laravel-2018-08-13.log格式为每一天创建日志文件。 日志目录将像

之前在此处输入图片说明

应用轮换配置后,目录将创建为当前日期创建的日志文件(如为今天2018-08-13创建的圆圈所示)。 在此处输入图片说明

它实际上比这简单得多。 在您的config/app.php您将看到以下行:

'log' => 'single',

靠近文件底部。 Laravel 默认使用single方法,它将所有错误存储在一个单独的扩展文件中。 如果您将此行更改为:

'log' => 'daily',

它会告诉 Laravel 你更喜欢有多个日志,每个日志都以发生错误的日​​期为后缀。

还有一些其他方法可用,因此请务必查看官方文档以获取更多信息。


此答案适用于 Laravel 5.2,这是原始问题中指定的版本。 在 Laravel 的 never 版本中,日志配置已移动到它自己的配置文件中,如@ShanthaKumara 的回答( https://stackoverflow.com/a/51816907/3965631 )所见。 请不要建议修改以更改此答案以反映新版本。

只需打开 .env 文件并更改

LOG_CHANNEL=stack

LOG_CHANNEL=daily

然后运行命令

php artisan config:cache

现在我认为你的问题会解决。

laravel 的日常日志没问题,但在第一年,你将有 365 个laravel.log文件。 我的方法是在'single'频道的'path'上执行以下操作。

storage_path('logs/' . date("Y") . '/' . date("m") . '/' . date("d") . '/' . 'laravel.log')

通过这种方式,您可以按年/月/日组织日志。

  • 2021/
    • 06/
      • 01/
        • laravel.log

您还可以按年/月文件夹拆分每日日志(对于Laravel> = 5.6)

<?php
    // ./config/logging.php
   return [
    /*
    |    ./storage/logs/
    |
    |    ├── 2018
    |    │   └── 12
    |    │       ├── laravel-2018-12-30.log
    |    │       └── laravel-2018-12-31.log
    |    └── 2019
    |        ├── 01
    |        │   ├── laravel-2019-01-01.log
    |        │   ├── laravel-2019-01-02.log
    |
    |        .....
    |
    |        │   └── laravel-2019-01-31.log
    |
    */
    'default' => env('LOG_CHANNEL', 'stack'),
    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['daily'], // set 'daily' channel
        ],
        'daily' => [
            'driver' => 'daily',
            // add dynamic folder structure
            'path' => storage_path('logs/' . date('Y/m/') . 'laravel.log'),
            'level' => 'debug',
            // set the maximum number of days in a month
            'days' => 31,
        ],
    ],
];

完整示例 - https://gist.github.com/andriichuk/893be964de09a96d90d33b56c9b32333

要在 Laravel 中为每天生成一个新文件,您需要做的就是将 \config\logging.php 文件中的“通道”值从“单个”更改为“每日”。

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['daily'],
        'ignore_exceptions' => false,
    ], 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM