Odpowiedzi:
Aktualizacja (dzięki dawmail333):
heroku logs -n 1500
lub, aby ogonić dzienniki na żywo
heroku logs -t
Jeśli potrzebujesz więcej niż kilku tysięcy linii, możesz użyć Syslog Drains heroku
Alternatywnie (stara metoda):
$ heroku run rails c
File.open('log/production.log', 'r').each_line { |line| puts line }
heroku logs -n 1500
, to najlepsza metoda dostępna na Cedrze. Jeśli potrzebujesz więcej linii, potrzebujesz drenażu syslog: devcenter.heroku.com/articles/logging#syslog_drains
heroku run rails c
. Zaktualizowano!
heroku run cat log/production.log
?
Rejestrowanie znacznie się poprawiło w Heroku!
$ heroku logs -n 500
Lepszy!
$ heroku logs --tail
referencje: http://devcenter.heroku.com/articles/logging
AKTUALIZACJA
To już nie są dodatki, ale część domyślnej funkcjonalności :)
Heroku traktuje logi jako uporządkowane czasowo strumienie zdarzeń. Dostęp do *.log
plików w systemie plików nie jest zalecany w takim środowisku z różnych powodów.
Po pierwsze, jeśli twoja aplikacja ma więcej niż jedną hamownię, to każdy plik dziennika reprezentuje tylko częściowy widok zdarzeń Twojej aplikacji. Aby uzyskać pełny widok, musisz ręcznie zagregować wszystkie pliki.
Po drugie, system plików w Heroku ma efemeryczne znaczenie, gdy za każdym razem restartujesz lub przenosisz hamownię (co zdarza się raz dziennie ) pliki dziennika są tracone. Dzięki temu masz najwyżej jednodniowy widok na dzienniki tego pojedynczego hamowni.
Wreszcie, na stosie Cedar działa, heroku console
a nawet heroku run bash
nie łączy cię z aktualnie uruchomioną dynamiką. Pojawia się nowy specjalnie dla tego bash
polecenia. Jest to nazywane procesem jednorazowym . W związku z tym nie znajdziesz plików dziennika dla innych dynos, które wykonują rzeczywiste procesy http na tym, który został stworzony heroku run
.
Rejestrowanie i ogólnie widoczność jest pierwszorzędnym obywatelem Heroku i istnieje kilka narzędzi, które rozwiązują te problemy. Po pierwsze, aby zobaczyć strumień zdarzeń aplikacji w czasie rzeczywistym dla wszystkich dynos i wszystkich warstw aplikacji / stosu, użyj heroku logs -t
polecenia, aby dopasować dane wyjściowe do terminala.
$ heroku logs -t
2010-09-16T15:13:46-07:00 app[web.1]: Processing PostController#list (for 208.39.138.12 at 2010-09-16 15:13:46) [GET]
2010-09-16T15:13:46-07:00 app[web.1]: Rendering template within layouts/application
2010-09-16T15:13:46-07:00 heroku[router]: GET myapp.heroku.com/posts queue=0 wait=0ms service=1ms bytes=975
2010-09-16T15:13:47-07:00 app[worker.1]: 2 jobs processed at 16.6761 j/s, 0 failed ...
Działa to doskonale do obserwowania zachowania aplikacji w tej chwili. Jeśli chcesz przechowywać dzienniki przez dłuższy czas, możesz użyć jednego z wielu dodatków do rejestrowania, które zapewniają przechowywanie, alarmowanie i wyzwalanie.
Na koniec, jeśli chcesz samodzielnie przechowywać pliki dziennika, możesz skonfigurować własny drenaż syslog, aby otrzymywać strumień zdarzeń z Heroku i przetwarzać / analizować siebie.
Podsumowanie: Nie używaj heroku console
ani heroku run bash
do przeglądania statycznych plików dziennika. Dołącz do strumienia zdarzeń dziennika Heroku dla aplikacji za pomocą heroku logs
lub dodatku rejestrującego.
Zobacz także poszczególne strumienie / filtry.
Na przykład przeglądaj tylko dzienniki aplikacji
heroku logs --source app -t
Lub zobacz tylko dzienniki routera
heroku logs --ps router
Lub połącz je razem
heroku logs --source app --ps worker
Tak dobrze..
heroku logs --ps web.1
(z 1 dyno)
Cóż, powyższe odpowiedzi są bardzo pomocne, pomogą ci zobaczyć z linii poleceń. Natomiast jeśli chcesz to zrobić z GUI, musisz zalogować się na swoje konto heroku, a następnie wybrać aplikację i na koniec kliknąć przeglądać logi
Śledź rejestrowanie Heroku
Aby wyświetlić twoje logi, mamy:
heroku logs
--num
(lub -n
) opcję.
heroku logs -n 200
heroku logs --tail
heroku logs --app your_app_name
Możesz uzyskać dostęp do swoich plików dziennika za pomocą interfejsu wiersza poleceń Heroku ( użycie CLI ).
Jeśli zainstalowany jest interfejs CLI Heroku i znasz nazwę swojej aplikacji (np. https://myapp.herokuapp.com/
), Możesz uruchomić następującą komendę:
heroku logs --tail --app=myapp
Możesz również uzyskać dostęp do dzienników w strumieniu czasu rzeczywistego, używając:
heroku logs --source app --tail --app=myapp
Jeśli dzienniki mówią coś takiego:
npm ERR! Pełny dziennik tego uruchomienia można znaleźć w:
npm ERR! /app/.npm/_logs/2017-07-11T08_29_45_291Z-debug.log
Następnie możesz uzyskać do nich dostęp za pomocą terminalu bash za pośrednictwem interfejsu Heroku CLI:
heroku run bash --app=myapp
less ./.npm/_logs/2017-07-11T08_29_45_291Z-debug.log
/usr/bin/less: cannot execute binary files
Być może warto dodać do swojej aplikacji coś w rodzaju bezpłatnego planu Papertrail . Zero konfiguracji, a otrzymasz 7 dni rejestrowania danych do 10 MB / dzień i możesz przeszukiwać 2 dni dzienników.
Musisz użyć -t
lub --tail
opcji i musisz zdefiniować nazwę swojej aplikacji heroku.
heroku logs -t --app app_name
Moim rozwiązaniem jest uzyskanie pełnego dziennika przy pierwszym uruchomieniu aplikacji, na przykład:
heroku logs -n 1500 > log
następnie dodaj, fgrep -vf
aby być na bieżąco, na przykład:
heroku logs -n 1500 > newlog ; fgrep -vf log newlog >> log
w celu ciągłego logowania wystarczy iterować za pomocą zegarka co x minut (lub sekund).
Wolę to robić w ten sposób
heroku logs --tail | tee -a herokuLogs
Możesz pozostawić skrypt działający w tle i możesz po prostu filtrować dzienniki z pliku tekstowego w dowolny sposób w dowolnym momencie.
Musisz zaimplementować opróżnianie dzienników i opróżniać je tam, aby zobaczyć wszystkie dzienniki (zarządzaj również dziennikami historycznymi):
heroku drains:add syslog+tls://splunk-server.com:514 -a app_name
A następnie zaloguj się do serwera splunk i wyszukaj dowolną liczbę dzienników. Używam Splunk i działa to dla mnie idealnie.
Druga opcja - możesz kupić dodatek do swojej aplikacji, jak podano poniżej: (Nie korzystałem z tych opcji, ale są one dostępne).
Możesz także spojrzeć na poniższe opcje: Jeśli chcesz mieć swoje dzienniki w formacie JSON, ponieważ pomoże to w przekazywaniu dzienników do systemu zewnętrznego, takiego jak Splunk / ELK, wyszukiwanie (również pod względem wydajności) byłoby łatwe w JSON.
https://github.com/goodeggs/heroku-log-normalizer
Nie ma Readme.md, ale niektóre wyjaśnienia znajdują się na https://github.com/goodeggs/bites/issues/20
W końcu
I zawsze możesz użyć poniższego polecenia, o którym wspominali już inni użytkownicy:
Następujące polecenie spowoduje dopasowanie generowanych dzienników do heroku
heroku logs -t -a <app_name>
Poniższa komenda pokaże 1000 wierszy dzienników z heroku
heroku logs -n 1000 -a <app_name>
Uwaga: dostępnych jest tylko 1500 najnowszych wierszy dzienników, a reszta jest usuwana z heroku dyno.
Sugeruję użycie dodatku, używam Logentries. Aby go użyć, uruchom w linii poleceń:
heroku addons:create logentries:le_tryit
(to polecenie tworzy dodatek do darmowego konta, ale oczywiście możesz je uaktualnić, jeśli chcesz)
Logentries pozwala zaoszczędzić do 5 GB woluminu dziennika na miesiąc. Informacje te można przeszukiwać za pomocą wyszukiwania poleceń w ciągu ostatnich 7 dni i zawiera alerty w czasie rzeczywistym.
Tak więc, aby odpowiedzieć na twoje pytanie, używając tego dodatku upewniasz się, że twoje logi nie są już tracone po osiągnięciu 1500 linii zapisanych domyślnie przez Heroku. Mam nadzieję że to pomoże! Miłego dnia!
heroku logs -t
pokazuje nam dzienniki na żywo.
heroku logs -n 1500
dla określonej liczby dzienników
Ale nadal polecam korzystanie z dodatku szlak papieru, który ma pewne zalety i ma bezpłatny plan podstawowy.
Możesz użyć
heroku logs -n 1500
Ale to nie jest zalecane podejście (innymi słowy nie pokazuje prawdziwego obrazu)
Sugeruję podłączenie jakiegoś narzędzia do logowania. (sumoLogic, ślad papieru n wszystkie) jako dodatek
Wszystkie mają darmową wersję (z kilkoma ograniczeniami, choć wystarczająca do małej aplikacji lub środowiska programistycznego, co zapewni dobry wgląd i narzędzie do analizy dzienników)
Aby zobaczyć stos cedru, patrz:
https://devcenter.heroku.com/articles/oneoff-admin-ps
musisz uruchomić:
heroku run bash ...
heroku run bash
uruchamia nową hamownię, aby obsłużyć bash
polecenie. System plików na tym urządzeniu nie będzie zawierał żadnych plików dziennika z „aktywnych” web dynos, więc to podejście nie zadziała.