Câu trả lời:
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
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 }
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
heroku run rails c
. Đã cập nhật!
heroku run cat log/production.log
?
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 :)
Heroku coi nhật ký là dòng sự kiện theo thời gian. Truy cập *.log
cá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 console
hoặc thậm chí heroku run bash
khô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 bash
lệ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 -t
lệ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 console
hoặ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 logs
hoặc bổ trợ đăng nhập.
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á
heroku logs --ps web.1
(với 1 dyno)
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ý
Theo dõi đăng nhập Heroku
Để xem nhật ký của bạn, chúng tôi có:
heroku logs
--num
(hoặc -n
) tùy chọn.
heroku logs -n 200
heroku logs --tail
heroku logs --app your_app_name
heroku logs -t
cho chúng ta thấy nhật ký trực tiếp
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
/usr/bin/less: cannot execute binary files
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.
Bạn cần sử dụng -t
hoặc --tail
tù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
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).
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.
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ử):
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.
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).
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.
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!
heroku logs -t
cho chúng ta thấy nhật ký trực tiếp
heroku logs -n 1500
cho 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í.
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ý)
Đố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 ...
heroku run bash
quay lên một dyno mới để lưu trữ bash
lệ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ả.