PHP code example of salvatorecervone / logoperations
1. Go to this page and download the library: Download salvatorecervone/logoperations library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
salvatorecervone / logoperations example snippets
return [
// --------------------------------------------------------------------------
// Abilitazione Globale & Modalità di Tracciamento
// --------------------------------------------------------------------------
'enabled' => env('LOG_OPERATIONS_ENABLED', true),
// 'selective' (default consigliato): traccia solo rotte attivate in Studio o con alias
// 'all': traccia a tappeto tutte le rotte ammesse
'mode' => env('LOG_OPERATIONS_MODE', 'selective'),
// Paracadute Errori 500: in modalità 'selective', cattura comunque crash ed eccezioni 500 anche su rotte non monitorate
'log_uncaught_errors' => env('LOG_OPERATIONS_LOG_UNCAUGHT_ERRORS', true),
// --------------------------------------------------------------------------
// Nomi Tabelle Database & Connessione
// --------------------------------------------------------------------------
// Tabella principale per i log operativi, errori e Storyboard polimorfica
'table_name' => env('LOG_OPERATIONS_TABLE', 'log_operazioni'),
// Tabella per i soggetti multipli collegati (Auto-Discovery Eloquent)
'subjects_table_name' => env('LOG_OPERATIONS_SUBJECTS_TABLE_NAME', 'log_operazioni_soggetti'),
// Auto-Discovery globale degli eventi Eloquent durante le richieste monitorate
'auto_discover_subjects' => env('LOG_OPERATIONS_AUTO_DISCOVER_SUBJECTS', true),
// Namespace dei modelli di dominio da monitorare (esclude pivot e framework)
'models_namespace' => env('LOG_OPERATIONS_MODELS_NAMESPACE', 'App\\Models'),
// Tabella per la memorizzazione delle regole del Tracking Studio (rotte, proxy metodi, sessioni)
'rules_table_name' => env('LOG_OPERATIONS_RULES_TABLE', 'log_operazioni_regole'),
// Connessione DB dedicata (null = connessione predefinita di Laravel; es. 'mysql_logs' o 'sqlite_logs')
'database_connection' => env('LOG_OPERATIONS_DB_CONNECTION', null),
// Caricamento automatico migrazioni (false = gestisci le migrazioni solo manualmente sul DB dedicato)
'load_migrations' => env('LOG_OPERATIONS_LOAD_MIGRATIONS', true),
// --------------------------------------------------------------------------
// Filtri Richieste & Campionamento (Sampling)
// --------------------------------------------------------------------------
// Verbi HTTP monitorati: ['*'] per tutti i verbi sulle rotte selezionate
// oppure lista specifica come ['POST', 'PUT', 'PATCH', 'DELETE']
'allowed_methods' => ['*'],
// Codici di stato esclusi dal logging (es. errori di validazione form)
'excluded_status_codes' => [422],
// Rotte escluse (per evitare loop di auto-logging)
'excluded_routes' => ['api/logoperations*', 'api/log-operations*', 'telescope*'],
// Percentuale di campionamento chiamate riuscite 2xx (0-100%). Gli errori >= 400 sono sempre loggati al 100%
'sampling_rate' => env('LOG_OPERATIONS_SAMPLING_RATE', 100),
// --------------------------------------------------------------------------
// Elaborazione Asincrona su Coda (Queue Worker)
// --------------------------------------------------------------------------
'queue' => [
'enabled' => env('LOG_OPERATIONS_QUEUE_ENABLED', false),
'connection' => env('LOG_OPERATIONS_QUEUE_CONNECTION', null),
'queue' => env('LOG_OPERATIONS_QUEUE_NAME', 'default'), // 'default' o coda dedicata es. 'log-operations'
'tries' => 3,
'backoff' => [5, 10, 30],
'failed_jobs_threshold' => 5,
'alert_email' => env('LOG_OPERATIONS_QUEUE_ALERT_EMAIL', null),
],
// --------------------------------------------------------------------------
// API REST & Sicurezza Accesso
// --------------------------------------------------------------------------
'api_prefix' => env('LOG_OPERATIONS_API_PREFIX', 'api/logoperations'),
'api_middleware' => ['api'],
'gate' => 'viewLogOperations',
'allow_in_local' => true,
// --------------------------------------------------------------------------
// Stack Trace Intelligente a Due Livelli
// --------------------------------------------------------------------------
'stack_trace' => [
'enabled' => env('LOG_OPERATIONS_STACK_ENABLED', true),
'only_on_error' => env('LOG_OPERATIONS_STACK_ONLY_ON_ERROR', true), // Salva stack trace solo su errori (>= 400)
'default_view' => 'core', // 'core' (solo app/) o 'full' (intero albero vendor)
'project_paths' => ['app/'], // Percorsi considerati codice applicativo proprietario
'exclude_paths' => ['vendor/'],
'max_frames' => 100,
'trace_db_callers' => true,
'max_db_callers' => (int) env('LOG_OPERATIONS_MAX_DB_CALLERS', 50),
],
// --------------------------------------------------------------------------
// Gestione & Ripristino Automatico Transazioni DB
// --------------------------------------------------------------------------
'transactions' => [
'manage_unfinished' => true,
'rollback_on_error' => true, // Esegue rollback di sicurezza su HTTP >= 400
'commit_on_success' => false, // false = sicurezza preventiva anche su esito 200
'log_transaction_state' => true,
],
// --------------------------------------------------------------------------
// Privacy, GDPR & Mascheramento Dati Sensibili
// --------------------------------------------------------------------------
'mask_fields' => ['password', 'password_confirmation', 'token', 'secret', 'authorization', 'credit_card'],
'privacy' => [
'anonymize_ip' => env('LOG_OPERATIONS_ANONYMIZE_IP', false),
'anonymize_ip_mask' => 'xxx', // Mascheratura ultimo ottetto IPv4 ('xxx' o '0')
'log_headers' => false,
'mask_headers' => ['authorization', 'php-auth-pw', 'cookie', 'x-csrf-token', 'x-xsrf-token'],
],
// Colonne da interrogare per la ricerca utenti nel Tracking Studio
'user_search_fields' => ['name', 'cognome', 'email'],
// --------------------------------------------------------------------------
// Dashboard Web Standalone
// --------------------------------------------------------------------------
'dashboard' => [
'enabled' => env('LOG_OPERATIONS_DASHBOARD_ENABLED', true),
'route' => 'logoperations',
'middleware' => ['web'],
'per_page' => 20,
'per_page_options' => [15, 20, 25, 50, 100],
],
// --------------------------------------------------------------------------
// Sistema di Allarmi & Notifiche Multi-Canale
// --------------------------------------------------------------------------
'alerts' => [
'enabled' => env('LOG_OPERATIONS_ALERTS_ENABLED', false),
'channels' => ['mail', 'slack', 'discord', 'webhook'],
'mail' => ['to' => env('LOG_OPERATIONS_ALERT_EMAIL', null)],
'slack' => ['webhook_url' => env('LOG_OPERATIONS_SLACK_WEBHOOK', null)],
'discord' => ['webhook_url' => env('LOG_OPERATIONS_DISCORD_WEBHOOK', null)],
'webhook' => [
'url' => env('LOG_OPERATIONS_ALERT_WEBHOOK', null),
'secret' => env('LOG_OPERATIONS_ALERT_WEBHOOK_SECRET', null),
],
'throttle_minutes' => 15,
'notify_on_rollback' => true,
'error_rate' => [
'window_minutes' => 5,
'threshold_percentage' => 10.0,
'min_requests' => 20,
],
],
// --------------------------------------------------------------------------
// Retention Policy & Salvaguardia Audit Trail
// --------------------------------------------------------------------------
'retention' => [
'enabled' => env('LOG_OPERATIONS_RETENTION_ENABLED', false),
'days' => env('LOG_OPERATIONS_RETENTION_DAYS', 90),
'preserve_storyboards' => true, // Protegge al 100% tutti i record con subject_id
'preserve_errors' => true, // Preserva tutti i log con codice HTTP >= 400
'preserve_mutations' => false, // true = preserva anche POST/PUT/DELETE
'chunk_size' => 1000,
],
// Nome identificativo dell'applicazione (per ambienti multi-app o microservizi)
'app_name' => env('LOG_OPERATIONS_APP_NAME', env('APP_NAME', 'laravel')),
];
use SalvatoreCervone\LogOperations\Facades\LogOperations;
class OrderController extends Controller
{
public function store(Request $request)
{
// Checkpoint manuale
LogOperations::step('Inizio validazione ordine');
// Traccia l'esecuzione di un blocco con misurazione automatica della durata
$totale = LogOperations::trace('Calcolo totale carrello', function () {
return $this->calcolaTotale();
});
LogOperations::step('Ordine completato con successo');
return response()->json(['success' => true, 'totale' => $totale]);
}
}
// Esempio con autenticazione Sanctum o sessione Web
'api_middleware' => ['web', 'auth'],
// oppure:
'api_middleware' => ['api', 'auth:sanctum'],
use Illuminate\Support\Facades\Gate;
public function boot(): void
{
Gate::define('viewLogOperations', function ($user = null) {
// Consenti l'accesso solo agli amministratori
return $user && in_array($user->email, [
'[email protected]',
'[email protected]',
]);
});
}
use Illuminate\Database\Eloquent\Model;
use SalvatoreCervone\LogOperations\Traits\HasOperationLogs;
class Order extends Model
{
use HasOperationLogs;
}
// Registra un checkpoint di business collegato all'ordine:
$order->logStep('Autorizzazione pagamento ricevuta da Stripe', ['payment_id' => 'ch_123']);
// Recupera l'intera storia cronologica del record:
$timeline = $order->storyboard();
// In un controller o service monitorato:
$order = Order::create([...]);
$invoice = Invoice::create(['order_id' => $order->id, ...]);
$customer->update(['ultimo_acquisto' => now()]);
$order->storyboard(); // Mostra l'evento di checkout
$invoice->storyboard(); // Mostra lo stesso evento di checkout!
$customer->storyboard(); // Mostra lo stesso evento di checkout!
use Illuminate\Database\Eloquent\Model;
use SalvatoreCervone\LogOperations\Traits\HasOperationLogs;
class AnagraficaUfficio extends Model
{
use HasOperationLogs;
// Specifica le relazioni 'belongsTo' genitore da collegare alla Storyboard:
protected array $logParents = ['anagrafica', 'ufficio'];
public function anagrafica()
{
return $this->belongsTo(Anagrafica::class);
}
public function ufficio()
{
return $this->belongsTo(Ufficio::class);
}
}
use SalvatoreCervone\LogOperations\Attributes\Traceable;
// Traccia tutti i metodi pubblici della classe:
#[Traceable]
class PaymentGatewayService
{
public function charge(Order $order): bool { ... }
}
// Oppure traccia solo singoli metodi:
class OrderService
{
#[Traceable(label: 'Calcolo Giudiziario e Totali', level: 'core')]
public function calcolaTotale(Order $order): float
{
return 99.50;
}
}
// Registra solo il 10% delle chiamate con esito 200 OK
'sampling_rate' => 10,
use SalvatoreCervone\LogOperations\Facades\LogOperations;
// 1. Cancellazione fisica di tutti i log dell'utente:
LogOperations::forgetUser($userId);
// 2. Soft Scrub (preserva durata, rotte e codici HTTP, ma azzera dati personali e IP):
LogOperations::forgetUser($userId, anonymize: true);