adityasetiono/api-logger-bundle
Symfony2 bundle that logs REST API requests/responses (default /api/), tracks duration, and flags slow calls. Configurable enable/disable and slow-time threshold, with optional separate Monolog channels/files for API and slow logs.
Installation:
composer require gamma/api-logger-bundle:dev-master
Register the bundle in config/bundles.php (Laravel 5.5+) or AppKernel.php (Symfony):
Gamma\ApiLoggerBundle\GammaApiLoggerBundle::class,
Enable Logging:
The bundle is enabled by default. Logs will be written to var/logs/api.log (Symfony) or Laravel’s default log channel (if configured).
First Use Case: Log an API request in a controller:
use Gamma\ApiLoggerBundle\Logger\ApiLogger;
public function index(ApiLogger $apiLogger)
{
$apiLogger->logRequest(); // Logs incoming request details
// Your logic here
$apiLogger->logResponse($response); // Logs response details
}
Request/Response Logging:
ApiLogger into controllers/services:
public function store(Request $request, ApiLogger $apiLogger)
{
$apiLogger->logRequest($request); // Auto-captures method, URI, headers, body
$response = $this->processRequest($request);
$apiLogger->logResponse($response); // Captures status, headers, body
}
// src/Kernel.php
protected function build(Request $request)
{
$this->apiLogger->logRequest($request);
return parent::build($request);
}
Profiling Slow Requests:
config/packages/gamma_api_logger.yaml (Symfony) or config/gamma_api_logger.php (Laravel):
gamma_api_logger:
slow_request_threshold: 500 # ms
slow_api.log).Custom Log Channels:
# config/packages/monolog.yaml
handlers:
api_log:
type: stream
path: "%kernel.logs_dir%/api.log"
level: debug
Laravel Integration:
Log facade with the api channel (if configured):
Log::channel('api')->info('Custom API event', ['metadata' => $data]);
Performance Overhead:
gamma_api_logger:
enabled: false
logRequest()/logResponse() selectively in performance-critical paths.Sensitive Data Leakage:
$apiLogger->logRequest($request, ['exclude_body' => true]);
Deprecated Symfony2:
spatie/laravel-logging.Log Rotation:
monolog or Laravel’s single channel) to avoid disk bloat.Missing Logs:
bundles.php/AppKernel.php.gamma_api_logger.Slow Request Threshold:
$apiLogger->setSlowRequestThreshold(1000); // Temporarily override
Custom Log Format:
class CustomApiLogger extends ApiLogger
{
protected function formatRequest(Request $request)
{
return parent::formatRequest($request) . "\nCustom: " . $request->ip();
}
}
Database Logging:
Doctrine connection:
$apiLogger->logToDatabase($request, $response);
Laravel-Specific:
terminating middleware to log responses:
public function handle($request, Closure $next)
{
$response = $next($request);
app('apiLogger')->logResponse($response);
return $response;
}
How can I help you explore Laravel packages today?