Laravel 基于日期的日志文件
Laravel log file based on date
默认情况下 laravel 将日志文件保存到位于 /storage/logs/laravel.log
的名为 laravel.log 的单个日志文件中
我的问题是如何每天获取一个新的日志文件并将当前日期的日志文件存储为 /storage/logs/laravel-2016-02-23.log
,因此我需要每天将一个新的日志文件保存到 /storage/logs/
我认为我们可以通过扩展默认 Illuminate\Foundation\Bootstrap\ConfigureLogging
引导程序 class 来做到这一点,但我不确定我该怎么做
如果有人能帮助我,我将不胜感激。
提前致谢。
其实比这简单多了。在您的 config/app.php
中,您会看到以下行:
'log' => 'single',
接近文件底部。 Laravel 默认使用 single
方法,它将所有错误存储在一个扩展文件中。如果将此行更改为:
'log' => 'daily',
它会告诉 Laravel 您希望有多个日志,每个日志都以错误发生的日期作为后缀。
还有一些其他方法可用,因此请务必查看 official documentation 了解更多信息。
此答案适用于 Laravel 5.2,这是原始问题中指定的版本。在 Laravel 的从未有过的版本中,日志配置已被移动到它自己的配置文件中,如@ShanthaKumara 的回答 () 所示。请不要建议修改此答案以反映新版本。
在我使用的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 )。
只需打开 .env 文件并更改
LOG_CHANNEL=stack
到
LOG_CHANNEL=daily
然后运行命令
php artisan config:cache
现在我认为你的问题会解决。
每日记录的 laravel 没问题,但在第 1 年,您将有 365 个文件 laravel.log
。我的方法是在 'single'
频道的 'path'
上执行以下操作。
storage_path('logs/' . date("Y") . '/' . date("m") . '/' . date("d") . '/' . 'laravel.log')
这样您就可以按每个year/month/day组织日志。
- 2021/
- 06/
- 01/
- laravel.log
默认情况下 laravel 将日志文件保存到位于 /storage/logs/laravel.log
我的问题是如何每天获取一个新的日志文件并将当前日期的日志文件存储为 /storage/logs/laravel-2016-02-23.log
,因此我需要每天将一个新的日志文件保存到 /storage/logs/
我认为我们可以通过扩展默认 Illuminate\Foundation\Bootstrap\ConfigureLogging
引导程序 class 来做到这一点,但我不确定我该怎么做
如果有人能帮助我,我将不胜感激。
提前致谢。
其实比这简单多了。在您的 config/app.php
中,您会看到以下行:
'log' => 'single',
接近文件底部。 Laravel 默认使用 single
方法,它将所有错误存储在一个扩展文件中。如果将此行更改为:
'log' => 'daily',
它会告诉 Laravel 您希望有多个日志,每个日志都以错误发生的日期作为后缀。
还有一些其他方法可用,因此请务必查看 official documentation 了解更多信息。
此答案适用于 Laravel 5.2,这是原始问题中指定的版本。在 Laravel 的从未有过的版本中,日志配置已被移动到它自己的配置文件中,如@ShanthaKumara 的回答 (
在我使用的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 )。
只需打开 .env 文件并更改
LOG_CHANNEL=stack
到
LOG_CHANNEL=daily
然后运行命令
php artisan config:cache
现在我认为你的问题会解决。
每日记录的 laravel 没问题,但在第 1 年,您将有 365 个文件 laravel.log
。我的方法是在 'single'
频道的 'path'
上执行以下操作。
storage_path('logs/' . date("Y") . '/' . date("m") . '/' . date("d") . '/' . 'laravel.log')
这样您就可以按每个year/month/day组织日志。
- 2021/
- 06/
- 01/
- laravel.log
- 01/
- 06/