Aprende a configurar logging por canales en Laravel, registrar eventos con el helperlogger, y controlar la aprobación de calificaciones con Gates y Resources. Aquí verás cómo ajustar .env, proteger rutas y filtrar listados por estado aprobado, con ejemplos claros y listos para aplicar.
¿Cómo configurar el logging por canales en Laravel?
Laravel organiza los logs por canales asociados a un driver. En config/logging.php, la variable de entorno LOG_CHANNEL define el canal por defecto: usualmente stack con driverstack, que centraliza todo en un único archivo dentro de storage/logs.
Cambia a daily para un archivo de log por día.
Ubicación de archivos: storage/logs.
Configuración de entorno: .env con LOG_CHANNEL.
Ejemplo para activar el driver diario:
# .env
LOG_CHANNEL=daily
Para escribir mensajes, usa el helperlogger() desde consola con php artisan tinker y los métodos de nivel: error, info, warning.
php artisan tinker
>>> logger()->error('Soy un error');>>> logger()->info('Soy un mensaje');
Claves que debes retener:
Canales y drivers: cada canal usa un driver específico.
stack vs daily: un archivo único vs un archivo por día.
Niveles de log: error, info, warning, etc.
¿Cómo proteger la aprobación con gates y controladores?
La aprobación de calificaciones queda restringida a usuarios administradores mediante un Gate. En AuthServiceProvider, define la política admin que recibe el usuario y valida que is_admin sea true.
En el controlador que aprueba, autoriza con Gate::authorize antes de ejecutar la lógica. El método establece la fecha de aprobación con Carbon::now() y persiste.
Declara una ruta POST protegida por autenticación para rating/{id}/approve que apunte a approve.
// routes/api.phpRoute::post('rating/{id}/approve',[RatingController::class,'approve']);// protegida por autenticación
Puntos críticos:
Gate admin: autoriza solo si is_admin está en true.
Controlador approve: asigna approved_at con Carbon::now() y devuelve 200.
Ruta protegida: requiere usuario autenticado con token válido antes de aprobar.
¿Qué hacer si recibes 403 al aprobar?
Verifica que el usuario logueado tenga is_admin en true en la base de datos.
Asegura que inicias sesión con el correo correcto y usas el token emitido para ese usuario.
¿Cómo listar y filtrar ratings aprobados con resources?
Agrega en tu configuración un campo que permita requerir aprobación:
// config/*.php'require_approval'=>true,
Crea un método list en el controlador (por ejemplo, ProductRatingController) que solo sea visible para administradores. Construye la consulta con un builder del modelo Rating y devuelve una colección con un resource.
Eloquent nos probee un metodo "when()" que funciona exactamente igual que usar los if() con la unica ventaja de mejorar legibilidad y hacer tambien una sintaxis mas fluida:
Nota: Si tienen un servidor en producción y quieren saber las notas de los loggins sin tener que acceder al servidor para buscar el archivo de logs. Pueden sincronizar un channel de Slack, Microsoft Teams, etc, y tener un rescate rápido de errores a través de un Webhook.
gracias por que no se explica que es solo te avienta el tema, mal para los que no saben nada de ingles :/
Muchas gracias!
Me gustó lo de los loggers. yo siempre solía hacerlos por a parte, creo que me serán muy útiles...
Dejo el commit de la clase con Laravel 8:
Gracias!
Decepcionante el curso, solo copia codigo sin explicar nada. Entendes mas leyendo la documentación que con el curso
En las pruebas que se hacen en la clase, como se envia el token que recibimos al hacer login?
Si te refieres a los Testing, con el actingAs() ya lo hace.
Ahora si son las pruebas a tráves de un cliente HTTP como Postman o Insomnia, es enviando un Header:
Authorization: Bearer <Aca el JWT Token>
el profe tiene buenos conocimientos y por eso me extraño que hiciera esa consulta con if y no con when
El loggin en laravel podemos configurarlos para ver en tiempo real lo que esta pasando en la aplicacion
el loggin.php que esta en la carpeta config podemos configurar el modulo de Logging
Me sale este error en postman
{
"error": "Use of undefined constant ratings - assumed 'ratings' (this will throw an Error in a future version of PHP)"
}
ya le pase el token solo que no me muestra los datos