Ci sono argomenti per l'utilizzo di una variabile del logger locale

1

Regola PMD LoggerIsNotStaticFinal :

In most cases, the Logger reference can be declared as static and final.

Mi sembra di ricordare alcuni argomenti per l'utilizzo di local variabili per la registrazione, ma non posso richiamarlo.

Un esempio sembra essere per una variabile instance , ma richiede che sia un final , inizializzato nel costruttore.

Un altro caso che posso pensare (make up?) è quando si potrebbe voler usare diversi logger per lo stesso pezzo di codice, forse dipende da altre variabili.

Qualche altro caso in cui una variabile locale di tipo logger potrebbe essere più appropriata?

    
posta Miserable Variable 03.11.2015 - 03:01
fonte

1 risposta

3

Non sono a conoscenza di situazioni in cui un logger locale ha senso su un static final logger utilizzando uno dei framework di registrazione incorporati o standard del settore in Java .

  • I logger sono thread-safe, quindi i thread possono condividere i logger. Avere "il mio" registratore non ha alcun vantaggio qui.

  • I logger sono in genere definiti per una delle seguenti categorie:

    • Per un nome di classe completo. Avere un logger locale non ha senso, dal momento che due logger locali su thread diversi si risolveranno comunque sullo stesso oggetto.

    • Per una categoria di logger arbitraria. Ad esempio, forse tutti gli eventi hardware si collegano a un logger hardware dedicato indipendentemente dal codice che risponde all'evento. Come per il punto precedente, le copie locali di questo logger si risolveranno comunque sullo stesso oggetto.

  • Se ci saranno più riferimenti allo stesso logger, ha senso avere un singolo riferimento. C'è un leggero vantaggio di memoria che non vale la pena ossessionare, ma l' intento di questo è il logger di questa classe è meglio rappresentato dall'avere a livello di classe. Inoltre, è possibile recuperare l'istanza del logger una volta che potrebbe avere un impatto sul codice critico delle prestazioni. Può anche ingombrare il codice per avere istruzioni estranee e non necessarie per recuperare un logger che può essere semplicemente recuperato all'inizio della classe.

Dato come funzionano i logger Java, non c'è davvero alcun vantaggio per un logger locale.

Cosa c'è di più efficiente dal punto di vista dell'esecuzione e del codice?

statico:

public class MyClass {
  private static final Logger LOG = Logger.getLogger(MyClass.class);

  public void doSomething1() {
    LOG.info("Yadda, yadda, yadda");
  }
}

Locale:

public class MyClass {
  public void doSomething1() {
    Logger LOG = Logger.getLogger(MyClass.class);
    LOG.info("Yadda, yadda, yadda");
  }

  // OR...

  public void doSomething2() {
    Logger.getLogger(MyClass.class).info("Yadda, yadda, yadda");
  }
}

Le istruzioni locali sono più dettagliate. La registrazione in questo modo richiede più spazio, che distrae l'occhio del lettore dal codice che effettivamente fa cose.

Non c'è motivo per l'acquisizione di logger locali.

    
risposta data 03.11.2015 - 03:51
fonte

Leggi altre domande sui tag