Come passare attorno a una variabile del flag di debug?

2

Ho bisogno di generare output di debug in un'applicazione java che non può essere debugata inserendo punti di interruzione e tracce. Fino ad ora ho posizionato il flag di debug come variabile statica in una delle classi e quindi accedendovi da tutte le altre classi. Ma sospetto che alla fine causerà enormi problemi in seguito. Qual è il modo migliore per farlo?

    
posta rsman 12.04.2012 - 12:11
fonte

2 risposte

10

Considera l'utilizzo di un framework di registrazione come log4j. Log4j è molto flessibile ed estensibile. Questa è chiaramente l'opzione migliore.

Se non puoi usare un tale framework, devi dire a tutte le parti del tuo programma che generano l'output di debug, indipendentemente dal fatto che si tratti di un'esecuzione di debug o meno. Questo può essere fatto in due modi. O utilizzando l'accesso statico a qualche variabile / singleton o passando l'informazione alle parti rilevanti. Entrambe le soluzioni presentano vantaggi e svantaggi.

In generale, il pattern statico / singleton è considerato dannoso perché introduce una variabile globale e quindi uno stato globale che può rendere difficile il test. Tuttavia, purché tu stia generando un output che non interferisca con altre parti del tuo programma, dovresti stare bene.

L'altro approccio è quello di passare le informazioni tramite un costruttore, ad esempio. Questo approccio non nasconde la dipendenza dell'oggetto dalle informazioni ed è preferibile in teoria. Tuttavia, ora devi passare queste informazioni a tutte le classi che possono generare output di debug. Se hai molte di queste classi e / o sono sepolte in profondità nel sistema, dovrai fare un sacco di codici per la preparazione. I quadri di iniezione delle dipendenze (ad es. Guice) sono progettati per aiutarvi con questo tipo di codice di piastra di riscaldamento. Se usi già DI questo probabilmente è il modo migliore. Ma se ti sembra di usare una mazza per rompere un dado, dovresti considerare l'uso dell'accesso statico (che è quello che fa log4j).

    
risposta data 12.04.2012 - 12:46
fonte
2

Se tutto ciò che fai in risposta a un flag produce output di debug, allora usare un framework di logging è una scelta migliore: puoi impostare diversi livelli di log in singole classi usando una configurazione localizzata centralmente e controllare il modo in cui le informazioni di logging sono consegnato a te (file, console, database, ecc.)

    
risposta data 12.04.2012 - 12:54
fonte

Leggi altre domande sui tag