Come procederesti nella progettazione di un modello di registro strutturato per i sistemi?

4

La mia app Web genera voci di registro su hook come model.save . Al momento, ho una classe Entry (che rappresenta una voce di registro) con un campo stringa content per contenere il testo della voce di registro.

Esempi di tali voci:

  1. Voce (contenuto = 'Account 123-456-7890 spending changed to $500/day' )
  2. Voce (contenuto = 'Account 123-456-7890 paused spending' )

Il problema principale di questo approccio è che è difficile ricavare il valore semantico da questi oggetti Entry se content è solo un campo stringa.

Ad esempio, se voglio scoprire con quale frequenza la spesa di un account viene modificata in media nel mio team , dovrò scrivere alcune regole personalizzate per trovare tutte le voci con il testo 'spending changed to' e analizzarli. Questo è soggetto ad errori perché il testo può contenere elementi imprevedibili come lettere maiuscole o spazi bianchi.

Poiché la maggior parte delle voci di registro sono generate a livello di codice, mi è venuto in mente che posso usare un enum per rappresentare il contenuto della classe Entry.

Questo significa che l'esempio sopra può essere trasformato nel seguente:

  1. Voce (content_id = 1, content_args = "{ account_id: 123-456-7890, value: '500' }" )
  2. Voce (content_id = 2, content_args = "{ account_id: 123-456-7890 }" )

E Content Enum:

class Content(Enum):  
  1: 'Account {{ account_id }} spending changed to ${{ value }}/day' 
  2: 'Account {{ account_id }} paused spending'

Con le voci strutturate, l'esecuzione di analisi personalizzate su questi dati diventa molto semplice.

Sono ancora in una fase molto precoce nel progettare questo refactoring. Non sarei sorpreso se ci fossero implementazioni esistenti di questo modello da qualche parte.

Piuttosto che reinventare la ruota, mi piacerebbe vedere come gli altri lo fanno. Esistono già plug-in / strumenti che stanno già implementando questo modello?

    
posta Hot dog 23.08.2018 - 00:29
fonte

2 risposte

1

In questo momento la memoria è relativamente economica.
Invece di avere un record nel database e costruire il sistema di log attorno ad esso - crea un nuovo record ogni volta che l'applicazione apporta modifiche all'entità

Puoi recuperare l'entità corrente dal record aggiunto per ultimo e avrai tutti i dati di registrazione completi ben strutturati.

Un altro approccio potrebbe essere quello di utilizzare lo stesso schema di tabella per la tabella dei registri, in modo da avere una tabella di registro separata con lo stesso schema per ogni tabella di entità che si desidera registrare.

    
risposta data 23.08.2018 - 07:17
fonte
0

Due cose mi vengono in mente con la tua domanda.

Per molti linguaggi di programmazione esistono framework di registrazione elaborati (ad esempio, la famiglia Log4J per Java, C #, C ++ e altri). Consiglierei di usarne uno (se trovi che la registrazione è la soluzione più adatta a te).

Non sono sicuro che il tuo problema rientri nella tipica categoria di "logging". Generalmente produco tronchi per informazioni piuttosto brevi, forse una settimana circa. I miei registri sono indirizzati agli amministratori di sistema o agli sviluppatori, registrando le azioni importanti che il sistema ha intrapreso o situazioni straordinarie (errori / avvisi).

Registrare le azioni degli utenti per un tempo sufficientemente lungo per supportare le statistiche è qualcosa che non farei con un file di registro, ma con una tabella di database transaction con colonne come type , source_account , target_account , amount , e simili. Ciò semplifica la creazione di statistiche.

    
risposta data 23.08.2018 - 21:31
fonte

Leggi altre domande sui tag