【问题标题】:Laravel log file based on date基于日期的 Laravel 日志文件
【发布时间】:2016-06-05 20:42:07
【问题描述】:

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

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

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

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

提前致谢。

【问题讨论】:

    标签: php laravel logging laravel-5.2


    【解决方案1】:

    在我使用的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)。

    【讨论】:

    • stack 驱动可以同时使用多个驱动。如果您不需要,您可以简单地将默认设置为daily 而不是stack。您可以通过在 .env 文件中将其设置为 LOG_CHANNEL=daily
    • 请记住,daily 驱动程序会在 days 键下设置的天数之后删除日志。要永久保留它们,只需将其设置为 0。
    • 不工作,我已经设置了很多天'默认'=> env('LOG_CHANNEL','daily'),但不工作。正在生成单个文件 laravel.log。
    • @totymedli 出于好奇,可以在 Laravel 文档中找到详细信息,其中说如果我们将 0 设置为天数,它将不会删除日志。我很难弄清楚哪些参数通道支持以及它们做什么。我在 laravel 文档中找不到它。
    • @DS9 在框架源码中搜索daily即可。在LogManager 中,他们将值传递给 Monolog 的 RotatingFileHandler,在那里检查值,如果是 0,则关闭 GC。
    【解决方案2】:

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

    'log' => 'single',
    

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

    'log' => 'daily',
    

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

    还有一些其他方法可用,因此请务必查看official documentation 了解更多信息。


    此答案适用于 Laravel 5.2,即原始问题中指定的版本。正如@ShanthaKumara 的回答(https://stackoverflow.com/a/51816907/3965631)所见,在从未有过的 Laravel 版本中,Logging 配置已移至它自己的配置文件中。请不要提出修改建议以更改此答案以反映新版本。

    【讨论】:

      【解决方案3】:

      只需打开 .env 文件并更改

      LOG_CHANNEL=stack
      

      到

      LOG_CHANNEL=daily
      

      然后运行命令

      php artisan config:cache
      

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

      【讨论】:

        【解决方案4】:

        每日日志的 laravel 没问题,但在第一年,你将拥有 365 个 laravel.log 的文件。我的做法是在'single'频道的'path'做如下操作。

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

        这样您就可以按年/月/日组织日志。

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

        【讨论】:

        • 我喜欢这个建议。但是,Laravel 8 缓存配置。这意味着需要在每天午夜清除缓存。你的解决方案是什么?
        • 嘿@John Hanley。您能否详细说明一个更好的问题,我不知道缓存与日志记录有什么关系。
        • Laravel 缓存日志配置。您的日期将变成静态的,不会每天都在变化。
        • Laravel 不缓存日志配置。加载日志文件的数据库缓存驱动程序是不必要且不实用的。
        • 你用的是什么版本? Laravel 8 将日志配置缓存在bootstrap/cache/config.php。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-24
        • 2019-12-02
        • 1970-01-01
        相关资源
        最近更新 更多