2012-10-01 9 views
8

AppEngine utilizza luglio per la sua registrazione e ho configurato il file logging.properties e il riferimento a quella AppEngine-web.xmlCome posso cambiare il formato di registrazione in Google AppEngine

Il problema è che il formato che AppEngine presenta i dati nel log della console viene troncato dopo circa 180 caratteri su ciascuna riga del registro. E dal momento che gran parte di questo è occupata con il metodo e il nome della classe (incluso il pacchetto) e la data non c'è molto del messaggio di registro effettivo che viene fuori.

Ho provato a configurare il mio Formatter, sia programmaticamente e via logging.properties, senza fortuna.

mi rendo conto che avrei potuto spingere tutto il mio registro attraverso slf4j, logback o log4j ma credo che in questo modo fa sì che tutti questi log per apparire come stdout nella console di log AppEngine, che ha il suo stile di verbosità.

C'è un modo per definire un particolare formato per il log AppEngine e se sì, come? Sarebbe sufficiente se ogni riga di registro non venisse troncata a 180 caratteri.

+1

Sto avendo lo stesso problema. Ho creato un formattatore personalizzato e l'ho specificato nel mio logging.properties, ma sembra essere completamente ignorato da Appengine. Sono abbastanza sicuro che il mio file logging.properties venga prelevato perché la modifica del livello di log funziona. – sappenin

+0

Buona domanda, ma penso che il sommario sia fuorviante: il problema è che le linee di log visualizzate nella console del motore dell'app sono troncate. – Tom

risposta

0

Dopo scavare in questo un po 'più lontano, non ho potuto ottenere una consuetudine luglio Handler o Formatter per ottenere raccolti dal runtime AppEngine. Così, invece, ho creato un ServletContextListener per inizializzare il logger principale con la mia stessa formattazione personalizzata, come segue:

<listener> 
    <listener-class>MyLoggingListener</listener-class> 
</listener> 

Ecco un ServletContextListener campione:

public class MyLoggingListener implements ServletContextListener 
{ 
    private static Logger LOG; 

    @Override 
    public void contextInitialized(ServletContextEvent sce) 
    { 
     LOG = Logger.getLogger(""); 
     Handler[] handlers = LOG.getHandlers(); 
     for (Handler handler : handlers) 
     { 
      handler.setFormatter(new MyLogFormatter()); 
     } 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent sce) 
    {} 
} 

Aggiornamento: Il codice precedente funziona in l'Ambiente Dev, ma sembra essere ignorato su Appengine. Torna al tavolo da disegno su questo.

2

Si è provato a utilizzare la funzionalità di download del registro: non tronca i registri, è possibile visualizzare tutto e specificare il numero di giorni e la gravità delle voci di registro da scaricare.

C:\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.7.2.1\appengine-java-sdk-1.7.2.1\bin>appcfg.cmd --severity=DEBUG --num_days=2 request_logs C:\workspace\my_app\war C:\workspace\MY_LOGS.TXT 

<path to SDK>/appcfg.cmd --severity=DEBUG --num_days=2 request_logs <path to war> <path to log> 

Questo è l'unico modo che ho trovato per essere in grado di vedere i miei dati di log. Il livello di registro predefinito è INFO, quindi è necessario utilizzare gli argomenti gravità e num_days perché sia ​​utile.

Inoltre, se si desidera scaricare i registri di un back-end, allora avete bisogno di specificare la versione back-end utilizzando la seguente opzione nella riga di comando. Dove lavoratore è il nome del back-end.

--version=worker 
+0

Questo è il collegamento alla documentazione per la funzione di download del registro. https://developers.google.com/appengine/docs/java/tools/uploadinganapp#Downloading_Logs –

+0

Grazie Greg, il download del registro mi consente di leggere lunghe righe di registro. Ma è ancora un rompicapo da leggere e posso solo accedervi da una macchina che ha anche un sdk app-engine su di esso (che è solo circa il 30% delle volte). Sto davvero cercando un modo per configurare il formato del registro in modo da essere pronto a leggere i registri dal browser. – William

+0

In realtà, se guardi all'interno del file di script che ho menzionato, vedrai che in realtà sta solo avviando l'applicazione java e che hai solo bisogno di portare con te quel singolo file JAR. –

0

Guardando attraverso il codice sorgente per lo strumento di configurazione del motore applicazione stessa, ho visto che tutto quello che sta facendo chiamando lo stesso LOGSERVICE cui si desidera avere accesso a se stessi attraverso l'API LOGSERVICE.

Pertanto, la risposta alla tua domanda è davvero semplice come far cadere il codice dal seguente link nel tuo codice base, fissandolo solo all'utente Admin e al problema risolto.

https://developers.google.com/appengine/docs/java/logservice/overview

+0

Beh, sembra che l'overkill di massa di hardcode una pagina per recuperare i registri in un formato migliore perché AppEngine non sembra in grado (o nessuno sa come) di configurare un programma di formattazione per il logger che funziona. Ma diavolo suppongo che risponda alle mie domande grazie. – William

+0

Nota finale: mi sono reso conto che facendo clic sull'icona più si espandono le righe del registro per mostrare il registro completo. Quindi ho accesso al mio intero disco, è solo in un formato un po 'goffo. – William

Problemi correlati