Comprende el código correctamente previamente a usarlo a tu trabajo y si ttienes algo que aportar puedes comentarlo.
Solución:
Laravel versión 5.6.10 y posteriores tienen soporte para un permission
elemento en la configuración (config/logging.php
) Para el single
y el daily
conductor:
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 7,
'permission' => 0664,
],
No es necesario hacer malabarismos con Monolog en el script de arranque.
Específicamente, se agregó soporte en https://github.com/laravel/framework/commit/4d31633dca9594c9121afbbaa0190210de28fed8.
Comencemos con lo que es constante.
Usted tiene un php artisan
comando, dirigido por root
.
Es seguro asumir que este comando se ejecuta diariamente.
Solución nº 1:
Dado que el usuario que crea los archivos es el que tiene permiso para escribir en ellos por defecto, podemos separar los registros por usuario así:
App/start/global.php
/*
|--------------------------------------------------------------------------
| Application Error Logger
|--------------------------------------------------------------------------
|
| Here we will configure the error logger setup for the application which
| is built on top of the wonderful Monolog library. By default we will
| build a basic log file setup which creates a single file for logs.
|
*/
Log::useDailyFiles(storage_path().'/logs/laravel-'.get_current_user().'.log');
Si tu www-datos el usuario creara un registro de errores, daría como resultado: storage/logs/laravel-www-data-2015-4-27.log
.
Si tu raíz el usuario creara un registro de errores, daría como resultado: storage/logs/laravel-root-2015-4-27.log
.
Solución nº 2:
Cambie el registro utilizado por su comando artesanal, en su script php.
En tus run()
función, agregue esta línea al principio:
Log::useFiles(storage_path().'/logs/laravel-'.__CLASS__.'-'.Carbon::now()->format('Y-m-d').'.log');
Si el nombre de tu clase es ArtisanRunner
entonces su archivo de registro será:
storage/logs/laravel-ArtisanRunner-2015-4-27.log
.
Conclusión: La solución número 1 es mejor, dado que delimita sus registros por usuario y, por lo tanto, no se producirán errores.
EDITAR: Como señaló Jason, get_current_user()
devuelve el nombre del propietario del script. Por lo tanto, para que se aplique la solución n.° 1, chown
sus archivos de clase artesanal al nombre de usuario requerido.
Para Laravel 5.1 utilizo lo siguiente hacia la parte inferior de bootstrap/app.php
(como se menciona en los documentos):
/**
* Configure Monolog.
*/
$app->configureMonologUsing(function(MonologLogger $monolog)
$filename = storage_path('logs/laravel-'.php_sapi_name().'.log');
$handler = new MonologHandlerRotatingFileHandler($filename);
$monolog->pushHandler($handler);
);
Por supuesto, hay muchos otros controladores que puede usar en su lugar.
Reseñas y calificaciones del tutorial
Si te mola el tema, eres capaz de dejar un escrito acerca de qué te ha impresionado de esta crónica.