heroku - วิธีดูบันทึกทั้งหมด


468

ฉันมีแอพเล็ก ๆ ใน heroku เมื่อใดก็ตามที่ฉันต้องการเห็นบันทึกฉันไปที่บรรทัดคำสั่งและทำ

heroku logs

นั่นแสดงให้ฉันเห็นแค่ 100 บรรทัดเท่านั้น ไม่มีวิธีดูบันทึกที่สมบูรณ์สำหรับแอปพลิเคชันของเราใน heroku หรือไม่?

คำตอบ:


785

อัปเดต (ขอบคุณ dawmail333):

heroku logs -n 1500

หรือเพื่อบันทึกการถ่ายทอดสด

heroku logs -t 

เอกสารบันทึก Heroku

หากคุณต้องการมากกว่าสองสามพันบรรทัดคุณสามารถใช้ท่อระบายน้ำ Syslogของ heroku

อีกวิธีหนึ่ง (วิธีเก่า):

$ heroku run rails c
File.open('log/production.log', 'r').each_line { |line| puts line }

5
ตอนนี้ไม่ทำงานกับ cedar stack มีใครพบทางเลือกใหม่หรือไม่?
nathanvda

2
เพียงใช้heroku logs -n 1500มันเป็นวิธีที่ดีที่สุดใน Cedar หากคุณต้องการบรรทัดมากกว่านั้นคุณต้องมี syslog drain: devcenter.heroku.com/articles/logging#syslog_drains
Liam Dawson

นี่เป็นเคล็ดลับที่มีประโยชน์เช่นกันสำหรับปัญหาท่อสินทรัพย์: heroku logs -n 2000 | grep 'precompiled'
Dave Collins

heroku run rails cมันเป็นเรื่องจริง Updated!
glebm

3
สำหรับวิธีการแบบเก่าทำไมคุณถึงเรียกใช้ rails console แทนที่จะเป็น just heroku run cat log/production.log?
Chloe

139

การบันทึกได้รับการปรับปรุงอย่างมากใน heroku!

$ heroku logs -n 500

ดีกว่า!

$ heroku logs --tail

การอ้างอิง: http://devcenter.heroku.com/articles/logging

ปรับปรุง

สิ่งเหล่านี้ไม่ใช่ส่วนเสริมอีกต่อไป แต่เป็นส่วนหนึ่งของฟังก์ชันการทำงานเริ่มต้น :)


4
นอกจากนี้ - ไม่เกิน 1500 ฉันคิดว่า Heroku เพิ่งตัดอะไรหลังจากนั้น
เลียมดอว์สัน

52

Heroku ปฏิบัติต่อบันทึกเป็นกระแสข้อมูลตามเวลาที่กำหนด *.logไม่แนะนำให้เข้าถึงไฟล์บนระบบไฟล์ในสภาพแวดล้อมดังกล่าวด้วยเหตุผลหลายประการ

ขั้นแรกหากแอปของคุณมี dyno มากกว่าหนึ่งไฟล์ล็อกแต่ละไฟล์จะแสดงมุมมองบางส่วนเท่านั้นในเหตุการณ์ของแอปของคุณ คุณจะต้องรวมไฟล์ทั้งหมดด้วยตนเองเพื่อรับมุมมองแบบเต็ม

ประการที่สองระบบไฟล์ใน Heroku มีความหมายชั่วคราวทุกครั้งที่คุณเริ่มหรือย้ายไดโน (ซึ่งเกิดขึ้นประมาณวันละครั้ง) ) ล็อกไฟล์จะหายไป ดังนั้นคุณจะได้รับมุมมองมากที่สุดต่อวันในบันทึกของไดโนเดียว

ในที่สุดเมื่อCedar stackทำงานheroku consoleหรือแม้กระทั่งheroku run bashไม่ได้เชื่อมต่อคุณกับ dyno ที่กำลังทำงานอยู่ มันวางไข่ใหม่สำหรับbashคำสั่งโดยเฉพาะ สิ่งนี้เรียกว่ากระบวนการแบบครั้งเดียว ดังนั้นคุณจะไม่พบไฟล์บันทึกสำหรับ dynos อื่น ๆ ของคุณที่ใช้กระบวนการ http heroku runที่เกิดขึ้นจริงในหนึ่งกลับกลายสำหรับ

การบันทึกและการมองเห็นโดยทั่วไปเป็นพลเมืองชั้นหนึ่งของ Heroku และมีเครื่องมือหลายอย่างที่จัดการปัญหาเหล่านี้ ขั้นแรกเพื่อดูสตรีมแบบเรียลไทม์ของเหตุการณ์แอปพลิเคชันใน dynos ทั้งหมดและเลเยอร์ทั้งหมดของแอ็พพลิเคชัน / สแต็กใช้heroku logs -tคำสั่งเพื่อตัดเอาต์พุตไปยังเทอร์มินัลของคุณ

$ 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 ...

วิธีนี้ใช้ได้ผลดีในการสังเกตพฤติกรรมแอปพลิเคชันของคุณในตอนนี้ หากคุณต้องการจัดเก็บบันทึกเป็นระยะเวลานานคุณสามารถใช้หนึ่งในโปรแกรมเสริมการบันทึกจำนวนมากที่จัดเก็บบันทึกการแจ้งเตือนและทริกเกอร์

สุดท้ายหากคุณต้องการจัดเก็บไฟล์บันทึกด้วยตนเองคุณสามารถตั้งค่าsyslog drainของคุณเองเพื่อรับกระแสกิจกรรมจาก Heroku และโพสต์กระบวนการ / วิเคราะห์ตัวเอง

สรุป: อย่าใช้heroku consoleหรือheroku run bashดูไฟล์บันทึกแบบคงที่ ไปที่สตรีมกิจกรรมการบันทึกของ Heroku สำหรับแอปของคุณโดยใช้heroku logsหรือ Add-on การบันทึก


23

ดูสตรีม / ตัวกรองแต่ละรายการ

เช่นบันทึกเฉพาะแอปพลิเคชันของคุณเท่านั้น

heroku logs --source app -t

หรือดูเฉพาะบันทึกของเราเตอร์

heroku logs --ps router

หรือโซ่พวกเขาเข้าด้วยกัน

heroku logs --source app --ps worker

ดีมาก..


5
หากต้องการดูเฉพาะบันทึกการสมัครของฉันฉันheroku logs --ps web.1(ด้วย 1 dyno)
Maxence

22

คำตอบข้างต้นมีประโยชน์มากมันจะช่วยให้คุณดูจากบรรทัดคำสั่ง ในกรณีที่คุณต้องการทำจาก GUI ของคุณคุณต้องลงชื่อเข้าใช้บัญชี heroku ของคุณจากนั้นเลือกแอปพลิเคชันของคุณและสุดท้ายคลิกที่ดูบันทึก

มุมมองภาพ


1
วิธีการนี้จะแสดงผลลัพธ์ของบันทึกตามที่เกิดขึ้นโดยเริ่มจากเวลาที่คุณคลิกที่ตัวเลือก "ดูบันทึก" ดังนั้นจึงไม่มีประโยชน์เว้นแต่คุณต้องการเพียงแค่ตัดบันทึกโดยไม่ต้องเข้าไปในคอนโซล
Jeremy Gunter

2
ไม่มีตัวเลือกใด ๆ ในการดูบันทึกทั้งหมดจาก UI นี้เอง
Garg

16

ติดตามการบันทึกของ Heroku

ในการดูบันทึกของคุณเรามี:

  1. คำสั่งบันทึกจะดึงข้อมูล 100 บรรทัดใหม่ตามค่าเริ่มต้น

heroku logs

  1. แสดงตัวเลือกสูงสุด 1500 บรรทัด--num(หรือ-n)

heroku logs -n 200

  1. แสดงบันทึกในเวลาจริง

heroku logs --tail

  1. หากคุณมีแอพมากมายใน heroku

heroku logs --app your_app_name



8

คุณสามารถเข้าถึงไฟล์บันทึกของคุณโดยใช้ Command Line Interface ( การใช้งาน CLI) )

หากติดตั้ง CLI ของ Heroku และคุณรู้จักชื่อแอปพลิเคชันของคุณ (เช่นhttps://myapp.herokuapp.com/) คุณสามารถเรียกใช้คำสั่งต่อไปนี้:

heroku logs --tail --app=myapp

นอกจากนี้คุณยังสามารถเข้าถึงบันทึกในสตรีมแบบเรียลไทม์โดยใช้:

heroku logs --source app --tail --app=myapp

หากบันทึกบอกอะไรคุณเช่นนี้:

npm ข้อผิดพลาด! บันทึกที่สมบูรณ์ของการทำงานนี้สามารถพบได้ใน:

npm ข้อผิดพลาด! /app/.npm/_logs/2017-07-11T08_29_45_291Z-debug.log

จากนั้นคุณสามารถเข้าถึงได้โดยใช้เทอร์มินัล bash ผ่าน 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
Michael Fulton

7

อาจคุ้มค่าที่จะเพิ่มบางอย่างเช่นแผน Papertrail ฟรีในแอปของคุณ การกำหนดค่าเป็นศูนย์และคุณจะได้รับข้อมูลการบันทึก 7 วันสูงสุด 10MB / วันและสามารถค้นหาบันทึกย้อนหลังได้ 2 วัน


4

สำหรับไฟล์ WAR:

ฉันไม่ได้ใช้ github แต่ฉันอัปโหลดโดยตรงเป็นไฟล์ WAR (ซึ่งฉันพบว่าง่ายกว่าและเร็วกว่า)

ดังนั้นต่อไปนี้ช่วยฉัน:

heroku logs --app appname

หวังว่ามันจะช่วยใครซักคน


4

คุณต้องใช้-tหรือ--tailตัวเลือกและคุณต้องกำหนดชื่อแอพ heroku ของคุณ

heroku logs -t --app app_name

4

ทางออกของฉันคือการได้รับบันทึกที่สมบูรณ์ในครั้งแรกที่แอปพลิเคชันเริ่มต้นเช่น

heroku logs -n 1500 > log

จากนั้นเพิ่มfgrep -vfเพื่อให้เป็นปัจจุบันเช่น:

heroku logs -n 1500 > newlog ; fgrep -vf log newlog >> log

สำหรับการบันทึกอย่างต่อเนื่องเพียงทำซ้ำโดยใช้ watch ทุก ๆ x นาที (หรือวินาที)


2

หากต้องการดูบันทึกโดยละเอียดคุณต้องใส่สองบรรทัดในproduction.rbไฟล์:

config.logger = Logger.new(STDOUT)
config.logger.level = Logger::DEBUG

จากนั้นโดยการเรียกใช้

heroku logs -t

คุณสามารถดูบันทึกโดยละเอียด


2

ฉันชอบที่จะทำแบบนี้

heroku logs --tail | tee -a herokuLogs

คุณสามารถปล่อยให้สคริปต์ทำงานในพื้นหลังและคุณสามารถกรองบันทึกจากไฟล์ข้อความตามที่คุณต้องการได้ตลอดเวลา


ขอบคุณฉันใช้เวลาสักครู่เพื่อเลื่อน แต่ในที่สุดก็พบทางออกสำหรับฉัน
Meinkraft

2

คุณต้องมีบันทึกการระบายน้ำที่นำมาใช้และควรจะมีบันทึกของคุณที่นั่นเพื่อดูบันทึกทั้งหมด (จัดการบันทึกประวัติด้วย):

  1. ตัวเลือกแรก - สามารถใช้ Splunk: คุณสามารถระบายบันทึกทั้งหมดของคุณเช่น:
heroku drains:add syslog+tls://splunk-server.com:514 -a app_name

จากนั้นเข้าสู่เซิร์ฟเวอร์ splunk ของคุณและค้นหาบันทึกจำนวนเท่าใดก็ได้ ฉันใช้ Splunk แล้วและนี่ก็ใช้ได้ดีสำหรับฉัน

  1. ตัวเลือกที่สอง - คุณสามารถซื้อเพิ่มในแอพของคุณได้ตามที่ระบุด้านล่าง: (ฉันไม่ได้ใช้ตัวเลือกเหล่านี้ แต่เป็นตัวเลือกที่มีให้)

    • Timber.io
    • ซูโม่ลอจิก
    • LogEnteries
    • บันทึก DNA
    • ทางกระดาษ

นอกจากนี้คุณยังสามารถดูตัวเลือกด้านล่าง: หากคุณต้องการให้บันทึกของคุณอยู่ในรูปแบบ JSON ซึ่งจะช่วยหากคุณกำลังผลักดันบันทึกของคุณไปยังระบบภายนอกเช่น Splunk / ELK มันจะกลายเป็นเรื่องง่าย ใน JSON

https://github.com/goodeggs/heroku-log-normalizer

ไม่มี Readme.md แต่มีคำอธิบายบางอย่างที่https://github.com/goodeggs/bites/issues/20

ในที่สุด

และคุณสามารถใช้คำสั่งด้านล่างตามที่ผู้ใช้รายอื่นกล่าวถึงไว้แล้ว:

คำสั่งต่อไปนี้จะจัดทำบันทึกการใช้งานใน Heroku

heroku logs -t -a <app_name>

COMAND ต่อไปนี้จะแสดงให้เห็นถึง1000จำนวนบรรทัดของบันทึกจาก Heroku

heroku logs -n 1000 -a <app_name>

หมายเหตุมีเพียง 1500 บรรทัดของบันทึกล่าสุดเท่านั้นและส่วนที่เหลือจะถูกลบออกจาก heroku dyno


1

ฉันขอแนะนำให้ใช้ addon ฉันใช้ Logentries หากต้องการใช้งานให้รันในบรรทัดคำสั่งของคุณ:

heroku addons:create logentries:le_tryit

(คำสั่งนั้นสร้าง addon สำหรับบัญชีฟรี แต่คุณสามารถอัพเกรดได้อย่างชัดเจนหากคุณต้องการ)

Logentries ช่วยให้คุณบันทึกปริมาณการบันทึกได้สูงสุด 5GB ต่อเดือน ข้อมูลดังกล่าวสามารถค้นหาได้โดยการค้นหาคำสั่งภายใน 7 วันที่ผ่านมาและมีการแจ้งเตือนแบบเรียลไทม์

ดังนั้นเพื่อตอบคำถามของคุณโดยใช้ addon นี้คุณมั่นใจได้ว่าบันทึกของคุณจะไม่สูญหายอีกต่อไปเมื่อคุณไปถึง 1500 บรรทัดที่ Heroku บันทึกโดยค่าเริ่มต้น หวังว่านี่จะช่วยได้! ขอให้มีความสุขมาก ๆ ในวันนี้!


1

heroku logs -t แสดงให้เราเห็นบันทึกสด heroku logs -n 1500สำหรับจำนวนบันทึกที่เฉพาะเจาะจง

แต่ถึงกระนั้นฉันขอแนะนำให้ใช้ add-on ทางกระดาษซึ่งมีประโยชน์บางอย่างและมีแผนขั้นพื้นฐานฟรี


0

คุณสามารถใช้ได้ heroku logs -n 1500

แต่นี่ไม่ใช่วิธีที่แนะนำ (ในคำอื่น ๆ ไม่ได้แสดงภาพจริง)

ฉันขอแนะนำให้คุณเสียบเครื่องมือการบันทึกบางอย่าง (sumoLogic, paper trail n all) เป็นส่วนเสริม

พวกเขาทั้งหมดมีรุ่นฟรี (มีข้อ จำกัด เล็กน้อย แต่เพียงพอสำหรับแอปขนาดเล็กหรือ dev env ซึ่งจะให้ข้อมูลเชิงลึกที่ดีและเครื่องมือในการวิเคราะห์บันทึก)


-2

สำหรับซีดาร์สแต็คดู:

https://devcenter.heroku.com/articles/oneoff-admin-ps

คุณต้องเรียกใช้:

heroku ทำงานทุบตี ...


9
ใน Cedar heroku run bashหมุนไดนาโมใหม่เพื่อโฮสต์bashคำสั่ง ระบบไฟล์บน dyno นั้นจะไม่มีไฟล์บันทึกใด ๆ จาก dynos ของเว็บ 'ที่ใช้งานอยู่' ดังนั้นวิธีการนี้จะไม่ทำงาน
Ryan Daigle
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.