Questa è una domanda di follow-up sulle mie passate domande: Pattern di concorrenza del logger nell'applicazione multithread
Come suggerito da altri, sto ponendo questa domanda separatamente.
Come l'apprendimento dall'ultima domanda. In un ambiente multi-thread, il logger dovrebbe essere reso thread-safe e probabilmente asincrono (dove nei messaggi vengono accodati mentre un thread in background scrive scrivendo il thread dell'oggetto richiedente). Il logger potrebbe essere signleton o può essere un logger per gruppo che è una generalizzazione di quanto sopra.
Ora, la domanda che sorge è come deve essere assegnato il logger all'oggetto? Ci sono due opzioni che posso pensare:
1. Oggetto che richiede il logger:
Ogni oggetto dovrebbe chiamare qualche API globale come get_logger()
? Tale API restituisce "il" singleton o il logger di gruppo. Tuttavia, ritengo che ciò implichi l'assunzione di un ambiente applicativo per implementare il logger, che credo sia una sorta di accoppiamento. Se lo stesso oggetto deve essere utilizzato da un'altra applicazione, anche questa nuova applicazione deve implementare tale metodo.
2. Assegna il logger attraverso alcune API conosciute L'altro approccio alternativo consiste nel creare un tipo di classe virtuale che viene implementata dall'applicazione in base alla propria struttura dell'app e assegnare l'oggetto a volte nel costruttore.
Questo è un metodo più generalizzato. Sfortunatamente, quando ci sono così tanti oggetti - e piuttosto un albero di oggetti che passa sugli oggetti logger ad ogni livello è abbastanza disordinato.
My question is there a better way to do this? If you need to pick any one of the above, which approach is would you pick and why?
Altre domande rimangono aperte su come configurarle:
-
Come vengono assegnati i nomi degli oggetti o l'ID in modo da essere utilizzati per la stampa sui messaggi di registro (come i nomi dei moduli)
-
In che modo questi oggetti trovano le proprietà appropriate (come i livelli di registro e altri parametri)
Nel primo approccio, l'API centrale deve affrontare tutte queste varietà. Nel secondo approccio, è necessario un lavoro aggiuntivo.
Quindi, voglio capire dalla reale esperienza delle persone, su come scrivere efficacemente il registratore in un tale ambiente.