লেজ জন্য বিভিন্ন উত্স রঙ করা


19

আমি বিভিন্ন লগ দ্বারা দেখছি

tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log

আমি কীভাবে প্রতিটি লগের আউটপুট আলাদাভাবে রঙিন করতে পারি?



@ ম্যাটবিয়ানকো ধন্যবাদ, আমি multitailএই প্রশ্নের উত্তর এবং তার উত্তরগুলি দেখতে পাব
ড্যানিয়েল ডব্লিউ।

1
নীচের দুর্দান্ত উত্তরের সাথে সাথে আপনি ইউনিক্স.স্ট্যাকেক্সেঞ্জঞ্জ / প্রশ্নগুলি / ২২63৩৩ / রঙিন -ফাইন্ড-আউটপুটও দেখতে চাইতে পারেন যা আউটপুট ফাইলগুলিকে রঙিনকরণের মাধ্যমে আরও কীভাবে করা যায় তা দেখায়।
জো

উত্তর:


21

grepরঙের জন্য জিএনইউ ব্যবহার :

color() { GREP_COLOR=$1 grep --color '.*'; }

(tail -qf /var/log/syslog | color 31 &
tail -qf /var/log/fail2ban.log | color 32 &
tail -qf /var/log/nginx/error.log | color 33)

নোট করুন যে প্রথম 2 পটভূমিতে শুরু হয়েছে। তার মানে আপনি চাপ দিলে তাদের হত্যা করা হবে না Ctrl-C(অ্যাসিঙ্ক্রোনাস কাজের জন্য শেল স্পষ্টতই SIGINT উপেক্ষা করুন)।

এটি রোধ করতে, আপনি পরিবর্তে এটি করতে পারেন:

color() { GREP_COLOR=$1 grep --line-buffered --color=always '.*'; }

(tail -qf /var/log/syslog | color 31 &
tail -qf /var/log/fail2ban.log | color 32 &
tail -qf /var/log/nginx/error.log | color 33) | cat

এই ভাবে, উপরে Ctrl-C, গত tail+grepএবং cat(SIGINT এর) ডাই এবং অন্য দুটি, grep + + মুদ্রার উলটা পিঠ একটি SIGPIPE এর পরের বার যখন কিছু লিখতে মারা যাবে।

অথবা সাইন্ট হ্যান্ডলারটি পুনরুদ্ধার করুন (সমস্ত শেল দিয়ে কাজ করবে না):

color() { GREP_COLOR=$1 grep --color '.*'; }

((trap - INT; tail -qf /var/log/syslog | color 31) &
(trap - INT; tail -qf /var/log/fail2ban.log | color 32) &
tail -qf /var/log/nginx/error.log | color 33)

আপনি এটি ফাংশনেও করতে পারেন color। এটি প্রযোজ্য হবে না tail, তবে tailমারা যাওয়ার পরে পরের বার এটি লিখলে একটি সিপাইপিতে grepমারা যাবে।

color() (trap - INT; GREP_COLOR=$1 exec grep --color '.*')

(tail -qf /var/log/syslog | color 31 &
tail -qf /var/log/fail2ban.log | color 32 &
tail -qf /var/log/nginx/error.log | color 33)

বা পুরো লেজ + গ্রেপ একটি ফাংশন করুন:

tailc() (trap - INT; export GREP_COLOR="$1"; shift; tail -qf -- "$@" |
   grep --color '.*')
tailc 31 /var/log/syslog &
tailc 32 /var/log/syslog &
tailc 33 /var/log/nginx/error.log

বা পুরো জিনিস:

tailc() (
  while [ "$#" -ge 2 ]; do
    (trap - INT; tail -f -- "$2" | GREP_COLOR=$1 grep --color '.*') &
    shift 2
  done
  wait
)

tailc 31 /var/log/syslog 32 /var/log/syslog 33 /var/log/nginx/error.log

আমি যখন এটি আমার "ওয়াচ.শ" স্ক্রিপ্টে রাখি, এটি আমার কনসোলটিতে ফিরে আসে তবে বার্তা মুদ্রিত হয়ে যায়, i.imgur.com/yaiBwMo.png দেখুন
ড্যানিয়েল ডব্লিউ।

@ ড্যান, সম্পাদনাটি দেখুন
স্টাফেন চেজেলাস

এই উত্তরটি লেখার জন্য আপনার প্রচেষ্টার জন্য আপনাকে ধন্যবাদ, আমি tailcফাংশনটি দিয়ে চলেছি যা সবচেয়ে ভাল কাজ করেছে এবং স্ক্রিপ্টটিতে সবচেয়ে স্বজ্ঞাত দেখাচ্ছে।
ড্যানিয়েল ডব্লিউ।

4

এই মত কিছু আমার জন্য কাজ করেছে:

(tail -f /var/log/syslog | awk -W interactive '{printf "\033[1;31m%s\033[0m\n", $0}' & \
tail -f /var/log/auth.log | awk -W interactive '{printf "\033[1;32m%s\033[0m\n", $0}' & \
tail -f /var/log/Xorg.0.log | awk -W interactive '{printf "\033[1;34m%s\033[0m\n", $0}')

ব্যাখ্যা:

  • tail -f file: ফাইল বাড়ার সাথে সাথে ডেটা যুক্ত করুন
  • awk -W interactive: awkইন্টারেক্টিভ মোডে সেট করুন
  • '{printf "\033[1;31m%s\033[0m\n", $0}' টার্মিনালে রঙিন আকারের আউটপুট প্রিন্ট করুন।
  • \033[1;31m মানে লাল
  • \033[1;32m মানে সবুজ
  • \033[1;34m মানে নীল

-W interactivemawkস্পেসিফিক মনে হচ্ছে । ( mawkডিফল্টরূপে এর ইনপুটটিকে বাফার করার উপায়টিও অনন্য is এবং -W interactiveঅন্যান্য awkপ্রয়োগের ক্ষেত্রেও এটির প্রয়োজন হবে না )
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.