Класс Log
Класс Log в Laravel является фасадом для монитора логов и предоставляет удобный API для записи сообщений разных уровней. Он поддерживает множество драйверов, включая однофайловый, ежедневный, syslog, stderr и другие. Основные уровни логирования: emergency, alert, critical, error, warning, notice, info и debug. Класс позволяет легко переключаться между каналами и создавать стек каналов для гибкой настройки логирования.
Синтаксис
<?php
Log::info($message, $context);
Log::error($message, $context);
Log::warning($message, $context);
Log::debug($message, $context);
?>
Пример
Давайте запишем информационное сообщение с указанием контекстных данных:
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesLog;
use AppModelsArticle;
class ArticleController extends Controller
{
public function index()
{
$articles = Article::all();
$res = $articles->count();
Log::info('Articles loaded', ['count' => $res]);
return view('articles.index', ['articles' => $articles]);
}
}
?>
Пример
Запишем сообщение об ошибке с передачей исключения:
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesLog;
use Exception;
class UserController extends Controller
{
public function show($id)
{
try {
$user = User::findOrFail($id);
return view('users.show', ['user' => $user]);
} catch (Exception $e) {
Log::error('User not found', [
'id' => $id,
'exception' => $e->getMessage()
]);
return redirect()->route('users.index');
}
}
}
?>
Пример
Используем разные уровни логирования для различных ситуаций:
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesLog;
use AppModelsOrder;
class OrderController extends Controller
{
public function process($id)
{
Log::debug('Starting order processing', ['order_id' => $id]);
$order = Order::find($id);
if (!$order) {
Log::warning('Order not found', ['order_id' => $id]);
return response()->json(['error' => 'Order not found'], 404);
}
if ($order->status === 'cancelled') {
Log::notice('Attempt to process cancelled order', [
'order_id' => $id,
'status' => $order->status
]);
return response()->json(['error' => 'Order is cancelled'], 400);
}
$order->status = 'processing';
$order->save();
Log::info('Order processed successfully', ['order_id' => $id]);
return response()->json(['success' => true]);
}
}
?>
Пример
Используем метод channel для записи в определенный канал:
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesLog;
use IlluminateHttpRequest;
class ApiController extends Controller
{
public function store(Request $request)
{
$data = $request->all();
Log::channel('api')->info('API request received', ['data' => $data]);
// Обработка данных
$res = ['status' => 'success', 'message' => 'Data processed'];
Log::channel('api')->debug('API response sent', ['response' => $res]);
return response()->json($res);
}
}
?>
Пример
Создаем стек каналов с помощью метода stack:
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesLog;
use AppModelsReport;
class ReportController extends Controller
{
public function generate($id)
{
Log::stack(['daily', 'slack'])->info('Generating report', ['report_id' => $id]);
$report = Report::find($id);
if (!$report) {
Log::stack(['daily', 'slack'])->error('Report not found', ['report_id' => $id]);
return response()->json(['error' => 'Report not found'], 404);
}
$res = $report->generate();
Log::stack(['daily', 'slack'])->info('Report generated', ['report_id' => $id, 'size' => strlen($res)]);
return response()->json(['data' => $res]);
}
}
?>