2012-10-01 3 views
8

AppEngine używa lip jego rejestrowanie i mam skonfigurowany plik logging.properties i odniesienie do tego w interfejsu App Engine-web.xmlJak mogę zmienić format rejestrowania w Google AppEngine

Problemem jest to, że format, który AppEngine przedstawia dane w dzienniku konsoli obcięte po około 180 znakach na każdej linii dziennika. A ponieważ duża część tego jest zajęta metodą i nazwą klasy (łącznie z pakietem) i datą, nie ma zbyt wiele rzeczywistych komunikatów, które się pojawiają.

Próbowałem skonfigurować mój własny formatter, zarówno programowo jak i poprzez logging.properties bez szczęścia.

Zdaję sobie sprawę, że mogę przesłać cały mój dziennik poprzez slf4j, logback lub log4j, ale uważam, że powoduje to, że wszystkie takie logi pojawiają się jako stdout w konsoli dziennika AppEngine, który ma swój własny styl gadatliwości.

Czy istnieje sposób zdefiniowania określonego formatu dla dziennika AppEngine, a jeśli tak, to w jaki sposób? t wystarczyłoby, gdyby każda linia dziennika nie została obcięta do 180 znaków.

+1

Mam ten sam problem. Stworzyłem niestandardowy formatter i określiłem go w pliku logging.properties, ale wygląda na to, że został całkowicie zignorowany przez appengine. Jestem dość pewny, że mój plik logging.properties jest pobierany, ponieważ zmiana poziomu dziennika działa. – sappenin

+0

Dobre pytanie, ale myślę, że podsumowanie jest mylące: problem polega na tym, że wiersze dziennika wyświetlane w konsoli aplikacji są przycięte. – Tom

Odpowiedz

0

Po wkopaniu się w to nieco dalej, nie mogłem uzyskać niestandardowego manipulatora JUL lub formattera, który zostałby przechwycony przez środowisko wykonawcze appengine. Więc zamiast tego stworzył ServletContextListener aby zainicjować rejestratora głównego z własną niestandardową formater, co następuje:

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

Oto ServletContextListener próbki:

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) 
    {} 
} 

Aktualizacja: Powyższy kod działa w środowiska Dev, ale wydaje się być ignorowane w Appengine. Wracam do deski kreślarskiej.

2

Czy próbowałeś skorzystać z funkcji pobierania dziennika: Nie obcina ona dzienników, widać wszystko i może określać liczbę dni i wagę, które wpisy do pobrania mają być zapisywane.

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> 

To jedyny sposób, w jaki udało mi się zobaczyć moje dane dziennika. Domyślny poziom rejestrowania to INFO, więc naprawdę musisz użyć argumentów o ważności i num_days, aby był przydatny.

Dodatkowo, jeśli chcesz pobrać dzienniki dla zaplecza, musisz określić wersję backendu za pomocą następującej opcji w wierszu poleceń. Gdzie pracownik jest nazwą zaplecza.

--version=worker 
+0

Oto link do dokumentacji funkcji pobierania dziennika. https://developers.google.com/appengine/docs/java/tools/uploadinganapp#Downloading_Logs –

+0

Dzięki Greg pobranie dziennika daje mi możliwość czytania długich linii dziennika. Ale wciąż jest to ból w tyłku do czytania i mogę uzyskać do nich dostęp tylko z komputera, który ma również aplikację-engine-sdk (która jest tylko około 30% czasu). Naprawdę szukam sposobu na skonfigurowanie formatu dziennika, aby móc czytać dzienniki z przeglądarki. – William

+0

Właściwie, jeśli zajrzysz do tego skryptu, o którym wspomniałem, zobaczysz, że to naprawdę dopiero uruchamia aplikację java, i że musisz tylko mieć przy sobie ten pojedynczy plik JAR. –

0

Przeglądając kod źródłowy dla samego konfiguratora App Engine, widziałem, że to wszystko to robi to wywołanie samego LOGSERVICE które masz dostęp do siebie poprzez API LOGSERVICE.

Dlatego odpowiedź na twoje pytanie jest tak prosta, jak upuszczenie kodu z poniższego linku do bazy kodu, zabezpieczenie go tylko dla użytkownika Admin i problem rozwiązany.

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

+0

Cóż, wydaje się masowym przesadą do twardego kodu strony, aby pobrać dzienniki w lepszym formacie, ponieważ AppEngine nie wydaje się być zdolny (lub nikt nie wie jak) do skonfigurowania Formattera dla działającego programu rejestrującego. Ale, do diabła, myślę, że to odpowiada na moje pytania, dzięki. – William

+0

Ostatnia uwaga: zdałem sobie sprawę, że kliknięcie ikony plus rozszerza linie dziennika, pokazując pełny zapis dziennika. Tak więc mam dostęp do mojej pełnej płyty, to tylko w nieco przyziemnym formacie. – William