heroku - làm thế nào để xem tất cả các bản ghi


468

Tôi có một ứng dụng nhỏ trên heroku. Bất cứ khi nào tôi muốn xem nhật ký, tôi đi đến dòng lệnh và làm

heroku logs

Điều đó chỉ cho tôi thấy khoảng 100 dòng. Có cách nào để xem nhật ký hoàn chỉnh cho ứng dụng của chúng tôi trên heroku không?

Câu trả lời:


785

Cập nhật (nhờ dawmail333):

heroku logs -n 1500

hoặc, để theo dõi các bản ghi sống

heroku logs -t 

Tài liệu nhật ký Heroku

Nếu bạn cần nhiều hơn vài nghìn dòng, bạn có thể sử dụng Syslog Drains của heroku

Cách khác (phương pháp cũ):

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

5
Điều này bây giờ không làm việc trên ngăn xếp tuyết tùng. Có ai tìm thấy một sự thay thế mới?
nathanvda

2
Chỉ cần sử dụng heroku logs -n 1500, đó là phương pháp tốt nhất có sẵn trên Cedar. Nếu bạn cần nhiều dòng hơn thế, bạn cần thoát syslog: devcenter.heroku.com/articles/logging#syslog_drains
Liam Dawson

Đây cũng là một mẹo hữu ích cho các vấn đề về Đường ống tài sản: nhật ký heroku -n 2000 | grep 'tiền biên dịch'
Dave Collins

Đó là thực sự heroku run rails c. Đã cập nhật!
glebm

3
Đối với phương pháp cũ, tại sao bạn lại chạy bảng điều khiển đường ray thay vì chỉ heroku run cat log/production.log?
Chloe

139

Ghi nhật ký đã được cải thiện rất nhiều trong heroku!

$ heroku logs -n 500

Tốt hơn!

$ heroku logs --tail

tài liệu tham khảo: http://devcenter.heroku.com/articles/logging

CẬP NHẬT

Đây không còn là các tiện ích bổ sung, mà là một phần của chức năng mặc định :)


4
Ngoài ra, -n có thể lên tới 1500, tôi cho rằng Heroku chỉ cắt bất cứ thứ gì sau đó.
Liam Dawson

52

Heroku coi nhật ký là dòng sự kiện theo thời gian. Truy cập *.logcác tệp trên hệ thống tệp không được khuyến nghị trong một môi trường như vậy vì nhiều lý do.

Đầu tiên, nếu ứng dụng của bạn có nhiều hơn một dyno thì mỗi tệp nhật ký chỉ thể hiện một phần xem vào các sự kiện của ứng dụng của bạn. Bạn sẽ phải tổng hợp thủ công tất cả các tệp để có được chế độ xem đầy đủ.

Thứ hai, hệ thống tập tin trên Heroku có nghĩa là phù du bất cứ khi nào dyno của bạn được khởi động lại hoặc di chuyển (xảy ra khoảng một lần một ngày ) các tệp nhật ký bị mất. Vì vậy, bạn chỉ nhận được tối đa một ngày vào nhật ký của một người đó.

Cuối cùng, trên ngăn xếp Cedar đang chạy heroku consolehoặc thậm chí heroku run bashkhông kết nối bạn với một dyno hiện đang chạy. Nó sinh ra một cái mới đặc biệt cho bashlệnh. Đây được gọi là quá trình một lần . Như vậy, bạn sẽ không tìm thấy các tệp nhật ký cho các dynos khác đang chạy các quy trình http thực tế trên một quy trình được sinh ra heroku run.

Ghi nhật ký và khả năng hiển thị nói chung, là một công dân hạng nhất trên Heroku và có một số công cụ giải quyết các vấn đề này. Trước tiên, để xem luồng sự kiện ứng dụng theo thời gian thực trên tất cả các dynos và tất cả các lớp của ứng dụng / ngăn xếp, hãy sử dụng heroku logs -tlệnh để nối đuôi đầu ra với thiết bị đầu cuối của bạn.

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

Điều này hoạt động rất tốt để quan sát hành vi của ứng dụng của bạn ngay bây giờ. Nếu bạn muốn lưu trữ nhật ký trong thời gian dài hơn, bạn có thể sử dụng một trong nhiều tiện ích ghi nhật ký cung cấp lưu giữ nhật ký, cảnh báo và kích hoạt.

Cuối cùng, nếu bạn muốn tự lưu trữ các tệp nhật ký, bạn có thể thiết lập cống syslog của riêng mình để nhận luồng sự kiện từ Heroku và tự xử lý / phân tích.

Tóm tắt: Không sử dụng heroku consolehoặc heroku run bashđể xem tệp nhật ký tĩnh. Chuyển vào luồng sự kiện nhật ký của Heroku cho ứng dụng của bạn bằng cách sử dụng heroku logshoặc bổ trợ đăng nhập.


23

Cũng xem các luồng / bộ lọc riêng lẻ.

Ví dụ: chỉ đuôi nhật ký ứng dụng của bạn

heroku logs --source app -t

Hoặc chỉ xem nhật ký bộ định tuyến

heroku logs --ps router

Hoặc xâu chuỗi chúng lại với nhau

heroku logs --source app --ps worker

Tốt quá


5
Để chỉ xem nhật ký của ứng dụng của tôi, tôi làm: heroku logs --ps web.1(với 1 dyno)
Tối đa

22

Vâng, các câu trả lời ở trên rất hữu ích, nó sẽ giúp bạn xem từ dòng lệnh. Trong khi đó, nếu bạn muốn làm từ GUI để bạn phải đăng nhập vào tài khoản heroku của bạn và sau đó chọn ứng dụng của bạn và cuối cùng nhấp vào xem nhật ký

xem hình ảnh


1
Phương pháp này chỉ hiển thị cho bạn đầu ra nhật ký khi chúng xuất hiện, bắt đầu từ khi bạn nhấp vào tùy chọn "Xem nhật ký". Vì vậy, nó không hữu ích trừ khi bạn chỉ muốn cơ bản theo đuôi các bản ghi mà không đi vào giao diện điều khiển.
Jeremy Gunter

2
không có tùy chọn nào để xem tất cả các bản ghi từ chính UI này?
Sunil Garg

16

Theo dõi đăng nhập Heroku

Để xem nhật ký của bạn, chúng tôi có:

  1. lệnh log ghi lại 100 dòng log theo mặc định.

heroku logs

  1. hiển thị tối đa 1500 dòng, --num(hoặc -n) tùy chọn.

heroku logs -n 200

  1. Hiển thị nhật ký trong thời gian thực

heroku logs --tail

  1. Nếu bạn có nhiều ứng dụng trên heroku

heroku logs --app your_app_name


9

heroku logs -t cho chúng ta thấy nhật ký trực tiếp


Nhưng nó sẽ dừng lại sau một thời gian.
Neeraj Sewani

8

Bạn có thể truy cập các tệp nhật ký của mình bằng Giao diện dòng lệnh của Heroku ( Cách sử dụng CLI ).

Nếu CLI của Heroku được cài đặt và bạn biết tên ứng dụng của mình (như https://myapp.herokuapp.com/), thì bạn có thể chạy lệnh sau:

heroku logs --tail --app=myapp

Bạn cũng có thể truy cập nhật ký trong luồng thời gian thực bằng cách sử dụng:

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

Nếu các bản ghi cho bạn biết một cái gì đó như thế này:

npm ERR! Một bản ghi đầy đủ của lần chạy này có thể được tìm thấy trong:

npm ERR! /app/.npm/_logs/2017-07-11T08_29_45_291Z-debug.log

Sau đó, bạn cũng có thể truy cập chúng bằng thiết bị đầu cuối bash qua Heroku CLI:

heroku run bash --app=myapp
less ./.npm/_logs/2017-07-11T08_29_45_291Z-debug.log

Tôi nhận được/usr/bin/less: cannot execute binary files
Michael Fulton

7

Có thể đáng để thêm một cái gì đó như gói Papertrail miễn phí vào ứng dụng của bạn. Không có cấu hình và bạn nhận được dữ liệu đăng nhập trị giá 7 ngày lên tới 10MB / ngày và có thể tìm kiếm lại sau 2 ngày đăng nhập.


4

cho các tệp WAR:

Tôi đã không sử dụng github, thay vào đó tôi đã tải lên trực tiếp, một tệp WAR (mà tôi thấy là dễ dàng hơn và nhanh hơn nhiều).

Vì vậy, những điều sau đây đã giúp tôi:

heroku logs --app appname

Hy vọng nó sẽ giúp được ai đó.


4

Bạn cần sử dụng -thoặc --tailtùy chọn và bạn cần xác định tên ứng dụng heroku của mình.

heroku logs -t --app app_name

4

Giải pháp của tôi là hoàn thành nhật ký lần đầu tiên khi ứng dụng khởi động, như:

heroku logs -n 1500 > log

sau đó thêm fgrep -vfđể giữ cho nó cập nhật, như:

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

để ghi nhật ký liên tục, chỉ cần lặp lại nó bằng cách sử dụng đồng hồ cứ sau x phút (hoặc giây).


2

Để xem nhật ký chi tiết, bạn cần đặt hai dòng trong production.rbtệp:

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

và sau đó bằng cách chạy

heroku logs -t

bạn có thể xem nhật ký chi tiết.


2

Tôi thích làm theo cách này

heroku logs --tail | tee -a herokuLogs

Bạn có thể để tập lệnh chạy ở chế độ nền và bạn có thể chỉ cần lọc nhật ký từ tệp văn bản theo cách bạn muốn bất cứ lúc nào.


cảm ơn, tôi đã mất một lúc để cuộn nhưng cuối cùng cũng tìm được giải pháp cho tôi.
Meinkraft

2

Bạn cần phải thực hiện một số nhật ký thoát nước và nên thoát các nhật ký của bạn ở đó, để xem tất cả các nhật ký (cũng quản lý nhật ký lịch sử):

  1. Tùy chọn đầu tiên - Splunk có thể được sử dụng: bạn có thể thoát tất cả các bản ghi của mình như:
heroku drains:add syslog+tls://splunk-server.com:514 -a app_name

Và sau đó đăng nhập vào máy chủ splunk của bạn và tìm kiếm bất kỳ số lượng nhật ký. Tôi đang sử dụng Splunk và điều này đang hoạt động hoàn toàn tốt đối với tôi.

  1. Tùy chọn thứ hai - Bạn có thể mua thêm vào Ứng dụng của mình, như được đưa ra dưới đây: (Tôi chưa sử dụng các tùy chọn này, tuy nhiên đây là những tùy chọn có sẵn).

    • Gỗ.io
    • Logic Sumo
    • Log Entryies
    • Đăng nhập DNA
    • Dấu vết giấy tờ

Bạn cũng có thể xem các tùy chọn bên dưới: Nếu bạn muốn có các bản ghi của mình ở định dạng JSON, vì nó sẽ giúp nếu bạn đang đẩy các bản ghi của mình sang hệ thống bên ngoài như Splunk / ELK, việc tìm kiếm cũng trở nên dễ dàng trong JSON.

https://github.com/goodeggie/heroku-log-n normalizer

Nó không có Readme.md, nhưng một số lời giải thích được đưa ra tại https://github.com/goodeggie/bites/issues/20

Cuối cùng

Và bạn luôn có thể sử dụng lệnh dưới đây như được đề cập bởi những người dùng khác:

Lệnh sau sẽ theo đuôi nhật ký tạo trên heroku

heroku logs -t -a <app_name>

Comand sau đây sẽ hiển thị 1000 số dòng nhật ký từ heroku

heroku logs -n 1000 -a <app_name>

Lưu ý chỉ có 1500 dòng nhật ký mới nhất có sẵn và phần còn lại sẽ bị xóa khỏi heroku dyno.


1

Tôi đề nghị sử dụng một addon, tôi sử dụng Logentries. Để sử dụng nó, hãy chạy trong dòng lệnh của bạn:

heroku addons:create logentries:le_tryit

(lệnh đó tạo addon cho một tài khoản miễn phí nhưng rõ ràng bạn có thể nâng cấp nếu muốn)

Logentries cho phép bạn tiết kiệm tới 5GB dung lượng nhật ký mỗi tháng. Thông tin đó có thể tìm kiếm được bằng cách tìm kiếm lệnh của họ trong vòng 7 ngày qua và nó có thông báo theo thời gian thực.

Vì vậy, để trả lời câu hỏi của bạn, bằng cách sử dụng addon này, bạn đảm bảo rằng nhật ký của bạn sẽ không bị mất nữa khi bạn đạt được 1500 dòng mà Heroku lưu theo mặc định. Hi vọng điêu nay co ich! Có một ngày tuyệt vời!


1

heroku logs -t cho chúng ta thấy nhật ký trực tiếp heroku logs -n 1500cho số lượng cụ thể của các bản ghi

Nhưng tôi vẫn khuyên bạn nên sử dụng tiện ích bổ sung dấu vết giấy có lợi ích nhất định và có gói cơ bản miễn phí.


0

Bạn có thể dùng heroku logs -n 1500

Nhưng đây không phải là một cách tiếp cận được đề xuất (nói cách khác là không cho bạn thấy hình ảnh thực sự)

Tôi sẽ đề nghị bạn cắm một số công cụ đăng nhập. (sumoLogic, vệt giấy n tất cả) như một tiện ích bổ sung

Tất cả đều có phiên bản miễn phí (với một vài hạn chế, mặc dù đủ cho một ứng dụng nhỏ hoặc dev env, sẽ cung cấp cái nhìn sâu sắc và công cụ để phân tích nhật ký)


-2

Đối với ngăn xếp tuyết tùng xem:

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

bạn cần chạy

heroku chạy bash ...


9
Trên Cedar heroku run bashquay lên một dyno mới để lưu trữ bashlệnh. Hệ thống tệp trên dyno đó sẽ không chứa bất kỳ tệp nhật ký nào từ các dynos web 'hoạt động' nên cách tiếp cận này sẽ không hiệu quả.
Ryan Daigle
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.