Sto cercando un modo per includere __LINE__
come costante in fase di compilazione nei messaggi emessi.__LINE__ equivalente in Java?
Diverse soluzioni sembrano esistere, ma con una grande penalità di runtime come suggerito in __LINE__
in JS e __LINE__
in C#. Solitamente si basano sempre su un oggetto runtime StackFrame
come log4j.
L'utilizzo della possibilità log4j di abilitazione/disabilitazione su una base necessaria non è un'opzione, poiché solitamente quando si verifica un errore, è troppo tardi per abilitare i numeri di riga e il codice inserito non sembra avere numeri di linea più. . Sarebbe possibile, a:
- Pre-processo i file sorgente Java prima della compilazione, idealmente con qualcosa di integrato con Eclipse , così la si può essere testato sulla piattaforma DEVELOPPEMENT anche.
- Essere in grado di pre-processo la classe al momento del caricamento. L'overhead sarebbe quindi trascurabile essendo ammortizzato.
1. In realtà io uso un brutto hack: chiamando un preprocessore personalizzato solo dopo la partenza sul server di build tramite trucchi ANT
Solo per la mia curiosità: perché è necessario il numero di riga nei registri? Quando si verifica un errore, si ha lo stacktrace completo, che indica il numero di linea ... – romaintaz
A volte nell'eccezione, invece del numero di riga ho qualcosa come 'Util.java (Inline Compiled Code)'. E a volte non ho alcuna eccezione, solo la registrazione delle informazioni: "essere qui", "essere qui", non volevo preoccuparmi di avere messaggi univoci (il numero di linea li rende comunque unici) –
La JVM dovrebbe essere in grado di gestire questa situazione. Quale versione di Java usi? –