Aggiunta della registrazione a un programma preesistente

1

Ho un gioco che ho scritto in java come hobby per un certo numero di anni. Ho una registrazione molto sparsa, solo un semplice output quando qualcosa va veramente male. Sono circa 25.000 righe di codice.

Ho appena rilasciato una prima beta, e mi sto rendendo conto che sarà un incubo trattare le segnalazioni di bug senza buoni registri. Ogni volta che qualcosa va storto sulla mia macchina di prova, ho il lusso di guardare il codice e aggiungere dichiarazioni di stampa se ho bisogno di capire cosa non va. Ovviamente, non è disponibile una volta rilasciato in natura.

  1. Pensi che sia consigliabile provare ad aggiungere la registrazione a questo programma adesso? O pensi che sia troppo lontano per cercare di risolvere questo problema?
  2. Hai qualche consiglio su come fare per farlo? Onestamente non so da dove cominciare.
  3. Hai una raccomandazione per un sistema di registrazione per Java?
  4. Hai qualche buon articolo / consigli sulle migliori pratiche su cosa registrare e come registrarlo?

Grazie! Qualsiasi e tutte le informazioni sono molto apprezzate.

    
posta JoshuaD 22.02.2015 - 06:18
fonte

2 risposte

4

La regola empirica per quanto riguarda la registrazione: "non è mai troppo tardi!"

Do you think it is advisable to try to add logging to this program now? Or do you think that I'm too far along to try to fix this problem?

Puoi iniziare con alcune registrazioni generiche, che sono agnostiche alla tua applicazione in quanto tale:

  • Registri ENTRY / EXIT: puoi aggiungere una dichiarazione di registrazione all'inizio di ogni metodo e in ogni punto di uscita al livello TRACE . (La registrazione degli argomenti in / out è facoltativa)

    public int myMethod(int input) {
        logger.trace(String.format("+++ [%d]", input));
        .
        .
        .
        logger.trace(String.format("--- [%d]", output));
        return output;
    }
    

Questo può sembrare banale e benevolo all'inizio, ma se confronti un registro zero con una traccia di log TRACE , saresti molto meglio con quest'ultimo. Aiuta anche a incapsulare i registri da un singolo metodo tra le dichiarazioni ENTRY e EXIT nel file di registro.

Può essere complicato aggiungere tali log in ogni metodo in assoluto , quindi puoi scegliere di essere un ninja e utilizzare la programmazione orientata all'aspetto per farlo più rapidamente: Come registrare automaticamente la voce / l'uscita dei metodi in Java?

  • ECCEZIONI: puoi sostituire rapidamente tutte le tue dichiarazioni di e.printStackTrace() con un'istruzione di registrazione che inserisce la traccia dello stack nel file di registro.

Do you have any recommendations on how to go about doing it? I honestly don't know where to start.

Supponendo che tu non voglia diventare un esperto nella registrazione e stai semplicemente cercando un modo per "loggare" il tuo codice prima della versione beta, puoi dare un'occhiata a questo tutorial rapido all'aggiunta di istruzioni di registro.

Do you have a recommendation for a logging system for Java?

Se vuoi iniziare rapidamente, utilizza log4j con PatternLayout . Tutto ciò che serve è un semplice file .properties e il JAR incluso nel tuo classpath per vedere i registri che rotolano.

Se vuoi valutare diverse librerie di logging, ma non hai il tempo giusto, allora ti suggerirei di iniziare con log4j ma usare slf4j wrapper su di esso. Quello che fa slf4j è che estrae la libreria di logging in modo che in seguito, puoi facilmente scambiare log4j per qualcos'altro, come logback , senza dover per cambiare le importazioni e la dichiarazione di registrazione sul tuo codice.

Do you have any good articles / best practices recommendations on what to log and how to log it?

Alcuni suggerimenti in cima alla mia testa:

  • Dichiarare un oggetto logger statico per ogni classe: questo garantirà il corretto rilevamento della posizione di dove provengono le dichiarazioni del registro

    final static Logger logger = Logger.getLogger(classname.class);
    
  • registra un messaggio INFO per ogni operazione eseguita con successo da un metodo. Aiuta a non avere una vista a volo d'uccello sul codice e focalizzarsi su un solo metodo contemporaneamente quando si aggiungono i log per la funzionalità (ed è anche più veloce dato che è possibile deformare il proprio codice aggiungendo registri come una macchina!)

  • Assicurati di registrare l'ECCEZIONE nel messaggio ERROR nel tuo blocco catch () - questo registrerà la traccia dello stack nel file di registro invece del solo messaggio
  • Registra un TRACE o un INFO appena prima di avviare operazioni che richiedono molto tempo, in modo che se un utente pedante sta guardando i log mentre il tuo programma è in esecuzione, lui / lei sarà tranquillizzato dal fatto che qualcosa -intensivo sta accadendo e il programma non si è arrestato in modo anomalo solo perché la registrazione si è interrotta per un po '

Registrazione felice! Siate certi che i vostri sforzi pagheranno .

    
risposta data 22.02.2015 - 07:04
fonte
1

Suggerirei di leggere su Aspect-Oriented Programming, in particolare per quanto riguarda la registrazione: link

AOP è una tecnica per mantenere i metodi puliti e incentrati sulla logica aziendale mentre estrae il codice "idraulico", ad esempio sicurezza, convalida o, sì, la registrazione, a classi esterne e disponendo dell'infrastruttura automaticamente. In questo caso, crei un Aspetto chiamato "MethodLogger" e lo applichi alle tue classi, e si aggancia al tuo codice prima e / o dopo l'esecuzione di ogni metodo ed esegue il suo codice, che può registrare la chiamata al metodo e i suoi parametri. p>

Non è la registrazione perfetta, soprattutto se hai metodi lunghi e complicati che richiedono di registrare il loro stato di calcolo nel mezzo, ma possono darti un sacco di informazioni di registrazione, in tutto il tuo programma, in un colpo solo.

    
risposta data 22.02.2015 - 06:32
fonte

Leggi altre domande sui tag