Per scopi di registrazione, ho creato un metodo logTitle() che stampa il nome del metodo di chiamata per i nostri test TestNG. Il codice di esempio è sotto.Ottenere risultati diversi per getStackTrace() [2] .getMethodName()
@Test
public void test1() throws Exception {
method1();
}
public static void method1() throws Exception {
Utils.logTitle(2);
}
...
public static void logTitle(Integer level) throws Exception {
// Gets calling method name
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
// This would get current method name
switch (level) {
case 1:
logger.info("=======================================================");
logger.info(method);
logger.info("=======================================================");
break;
case 2:
logger.info("------------------------------------");
logger.info(method);
logger.info("------------------------------------");
break;
case 3:
logger.info("---------------------");
logger.info(method);
logger.info("---------------------");
break;
case 4:
logger.info("--------- " + method + " ------------");
break;
default:
logger.info(method);
}
}
Il problema è che sto ottenendo risultati diversi per logTitle() su due macchine diverse. laptop
di ognuno restituisce correttamente:
2016-06-20 14:22:06 INFO - ------------------------------------
2016-06-20 14:22:06 INFO - method1
2016-06-20 14:22:06 INFO - ------------------------------------
nostri dev box unix rendimenti diversamente:
2016-06-20 14:42:26 INFO - ------------------------------------
2016-06-20 14:42:26 INFO - logTitle
2016-06-20 14:42:26 INFO - ------------------------------------
questo funziona correttamente sul computer portatile di tutti gli altri, non solo la casella UNIX dev. Penso che la scatola di sviluppo di unix stia usando la versione di Java di IBM, mentre tutti gli altri usano la versione di Oracle di Java, ma non sono sicuro se questo sia il colpevole o meno.
Qualche idea?
forse c'è qualche inlining del metodo method1 in corso? – MeBigFatGuy
Come stampare l'intera traccia dello stack (non solo il nome del metodo del terzo elemento) e vedere qual è la differenza? –
Ho il sospetto che [questa risposta] (http://stackoverflow.com/a/1069150/3788176) e le sue osservazioni ti aiuterò. –