logging - Heroku-सभी लॉग कैसे देखें




(13)

मेरा समाधान पहली बार एप्लिकेशन शुरू होने पर पूर्ण लॉग प्राप्त करना है, जैसे:

heroku logs -n 1500 > log

फिर इसे अद्यतित रखने के लिए fgrep -vf जोड़ें, जैसे:

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

निरंतर लॉगिंग के लिए, बस इसे हर एक्स मिनट (या सेकंड) के लिए घड़ी का उपयोग करके पुन: सक्रिय करें।

मेरे पास उसकेोकू पर एक छोटा सा ऐप है। जब भी मैं लॉग देखना चाहता हूं तो मैं कमांड लाइन पर जाता हूं और करता हूं

heroku logs

यह केवल मुझे लगभग 100 लाइनों दिखाता है। क्या उसके आवेदन के लिए पूर्णोकू देखने के लिए कोई रास्ता नहीं है?


विस्तृत लॉग देखने के लिए आपको production.rb फ़ाइल में दो लाइनों को रखने की आवश्यकता है:

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

और फिर चलकर

heroku logs -t

आप विस्तृत लॉग देख सकते हैं।



अद्यतन (dawmail333 के लिए धन्यवाद):

heroku logs -n 1500

या, लॉग को पूंछ के लिए जीवित रहने के लिए

heroku logs -t 

Heroku लॉग दस्तावेज

यदि आपको कुछ हज़ार लाइनों की आवश्यकता है तो आप उसकेोकू के सिस्लॉग ड्र्रेन का उपयोग कर सकते हैं

वैकल्पिक रूप से (पुरानी विधि):

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

अलग-अलग स्ट्रीम / फ़िल्टर भी देखें।

जैसे पूंछ केवल आपके आवेदन लॉग

heroku logs --source app -t

या केवल राउटर लॉग देखें

heroku logs --ps router

या उन्हें एक साथ श्रृंखला

heroku logs --source app --ps worker

बहुत अच्छा..


मैं इसे इस तरह से करना पसंद करता हूं

heroku logs --tail | tee -a herokuLogs

आप पृष्ठभूमि में चल रहे स्क्रिप्ट को छोड़ सकते हैं और आप टेक्स्ट फ़ाइल से किसी भी समय लॉग को फ़िल्टर कर सकते हैं।


heroku logs -t हमें हमें लाइव लॉग दिखाता है।


आप Heroku के कमांड लाइन इंटरफेस ( सीएलआई उपयोग ) का उपयोग कर अपनी लॉग फ़ाइलों तक पहुंच सकते हैं।

यदि Heroku की सीएलआई स्थापित है और आप अपने एप्लिकेशन का नाम जानते हैं (जैसे https://myapp.herokuapp.com/ ), तो आप निम्न आदेश चला सकते हैं:

heroku logs --tail --app=myapp

आप रीयल-टाइम स्ट्रीम में लॉग का उपयोग करके भी एक्सेस कर सकते हैं:

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

अगर लॉग आपको इस तरह कुछ बताते हैं:

एनपीएम ईआरआर! इस रन का एक पूरा लॉग इन में पाया जा सकता है:

एनपीएम ईआरआर! /app/.npm/_logs/2017-07-11T08_29_45_291Z-debug.log

फिर आप Heroku CLI के माध्यम से बैश टर्मिनल का उपयोग करके उन्हें भी एक्सेस कर सकते हैं:

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

Logging पर पालन करें

आपके लॉग देखने के लिए हमारे पास है:

  1. लॉग कमांड डिफ़ॉल्ट रूप से 100 लॉग लाइनों को पुनः प्राप्त करता है।

Heroku लॉग्स

  1. अधिकतम 1500 लाइनें दिखाएं, --num (या -n) विकल्प।

Heroku लॉग-एन 200

  1. वास्तविक समय में लॉग दिखाएं

Heroku लॉग - टेल

  1. यदि आपके पास उसकेोकू पर कई ऐप्स हैं

heroku लॉग - your_app_name करें


Heroku घटनाओं के समय-आदेशित धाराओं के रूप में लॉग व्यवहार करता है। विभिन्न कारणों से इस तरह के वातावरण में फाइल सिस्टम पर *.log फ़ाइलों तक पहुंच की सिफारिश नहीं की जाती है।

सबसे पहले, यदि आपके ऐप में एक से अधिक dyno हैं तो प्रत्येक लॉग फ़ाइल केवल आपके ऐप की घटनाओं में आंशिक दृश्य का प्रतिनिधित्व करती है। पूर्ण दृश्य प्राप्त करने के लिए आपको सभी फ़ाइलों को मैन्युअल रूप से एकत्र करना होगा।

दूसरा, हरोकू पर फाइल सिस्टम क्षणिक अर्थ है जब भी आपका डिनो पुनरारंभ होता है या स्थानांतरित होता है (जो दिन में लगभग एक बार होता है ) लॉग फाइलें खो जाती हैं। तो आप केवल एक दिन के दृश्य को उस एकल डिनो के लॉग में प्राप्त करते हैं।

आखिरकार, सीडर स्टैक पर heroku console चला रहा heroku console या यहां तक ​​कि heroku run bash भी आपको वर्तमान में चल रहे डायनो से कनेक्ट नहीं करता है। यह विशेष रूप से bash कमांड के लिए एक नया स्पॉन्स बनाता है। इसे एक-ऑफ प्रक्रिया कहा जाता है। इस प्रकार, आपको अपने अन्य डायनोस के लिए लॉग फाइल नहीं मिलेंगी जो कि उसके HTTP heroku run लिए उत्पन्न वास्तविक http प्रक्रियाओं को heroku run

Logging , और सामान्य रूप से दृश्यता, हेरोकू पर प्रथम श्रेणी के नागरिक हैं और इन मुद्दों को हल करने वाले कई टूल हैं। सबसे पहले, सभी 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 ...

यह अभी आपके आवेदन के व्यवहार को देखने के लिए बहुत अच्छा काम करता है। यदि आप लंबे समय तक लॉग स्टोर करना चाहते हैं तो आप लॉग रिटेंशन, अलर्टिंग और ट्रिगर्स प्रदान करने वाले कई लॉगिंग ऐड-ऑन का उपयोग कर सकते हैं।

अंत में, यदि आप लॉग फाइलों को स्वयं स्टोर करना चाहते हैं तो आप हेरोोकू और पोस्ट-प्रोसेस / स्वयं विश्लेषण करने से ईवेंट की स्ट्रीम प्राप्त करने के लिए अपना स्वयं का devcenter.heroku.com/articles/logging#syslog_drains सेट कर सकते हैं।

सारांश: स्थैतिक लॉग फ़ाइलों को देखने के लिए heroku console या heroku run bash का उपयोग न करें। Heroku heroku logs या लॉगिंग ऐड-ऑन का उपयोग करके अपने ऐप के लिए heroku logs की लॉग इवेंट की स्ट्रीम में पाइप करें।


Heroku में लॉगिंग में काफी सुधार हुआ है!

$ heroku logs -n 500

बेहतर!

$ heroku logs --tail

संदर्भ: http://devcenter.heroku.com/articles/logging

UPDATED

ये अब एड-ऑन नहीं हैं, लेकिन डिफ़ॉल्ट कार्यक्षमता का हिस्सा :)


मैं एक एडन का उपयोग करने का सुझाव देता हूं, मैं लॉगेंट्रीज़ का उपयोग करता हूं। इसका उपयोग करने के लिए, अपनी कमांड लाइन में चलाएं:

heroku addons:create logentries:le_tryit

(वह आदेश एक मुक्त खाते के लिए एडन बनाता है लेकिन स्पष्ट रूप से आप अपग्रेड कर सकते हैं यदि आप चाहते हैं)

लॉगेंट्री आपको प्रति माह 5 जीबी लॉग वॉल्यूम तक सहेजने की अनुमति देता है। वह जानकारी पिछले 7 दिनों के भीतर उनकी कमांड खोज द्वारा खोजने योग्य है और इसमें रीयल-टाइम अलर्ट हैं।

तो अपने प्रश्न का उत्तर देने के लिए, इस एडन का उपयोग करके आप सुनिश्चित करते हैं कि जब आप 1500 लाइनों तक पहुंच जाएंगे तो हेरोोक डिफ़ॉल्ट रूप से सहेजता है तो आपके लॉग अब खो नहीं जाते हैं। उम्मीद है की यह मदद करेगा! आपका दिन अच्छा रहे!


क्या आपने यह कोशिश की है?

git log --pretty=oneline --abbrev-commit

समस्या यह है कि आप पहली पंक्ति के बाद एक खाली रेखा खो रहे हैं। उपरोक्त आदेश आमतौर पर मेरे लिए काम करता है, लेकिन मैंने खाली दूसरी पंक्ति के बिना एक प्रतिबद्धता पर परीक्षण किया। मुझे आपके जैसा ही परिणाम मिला: एक पंक्ति पर पूरा संदेश।

खाली दूसरी पंक्ति गिट प्रतिबद्ध संदेशों में एक मानक है। जो व्यवहार आप देखते हैं वह शायद उद्देश्य पर लागू किया गया था।

एक प्रतिबद्ध संदेश की पहली पंक्ति एक संक्षिप्त वर्णन के लिए है। यदि आप इसे एक पंक्ति में नहीं बना सकते हैं तो आप कई का उपयोग कर सकते हैं, लेकिन गिट पहली खाली रेखा से पहले "संक्षिप्त वर्णन" होने से पहले सब कुछ मानता है। oneline पूरे संक्षिप्त विवरण प्रिंट करता है, इसलिए आपकी सभी 3 पंक्तियां।





heroku logging