Saya memiliki skrip yang terus berjalan yang saya hasilkan ke file log:
script.sh >> /var/log/logfile
Saya ingin menambahkan cap waktu sebelum setiap baris yang ditambahkan ke log. Suka:
Sat Sep 10 21:33:06 UTC 2011 The server has booted up. Hmmph.
Apakah ada jujitsu yang bisa saya gunakan?
Jawaban:
Anda dapat menyalurkan output skrip melalui loop yang mengawali tanggal dan waktu saat ini:
Jika Anda akan sering menggunakan ini, mudah untuk membuat fungsi bash untuk menangani loop:
sumber
read
pemangkasan spasi putih di awal dan dan dari garis. Ini menetapkan IFS (Pemisah Bidang Internal bash, pada dasarnya daftar karakter spasi) untuk mengosongkan untukread
perintah.echo
menafsirkan urutan melarikan diri. Jika Anda benar - benar ingin itu tidak mengacaukan konten (selain menambahkan tanggal), gantiecho
perintah denganprintf "%s %s\n" "$(date)" "$line"
date -u +"%Y-%m-%dT%H:%M:%SZ"
atau mungkin lebih cantikdate +"%Y-%m-%d %T"
.date
) untuk setiap baris log, yang dapat menjadi kelemahan besar tergantung pada mesin Anda dan jumlah log. Saya lebih suka menyarankan untuk menggunakants
jika tersedia, lihat jawaban dari @willemLihat
ts
darimoreutils
paket Ubuntu :Atau, jika
$command
buffering otomatis (memerlukanexpect-dev
paket):sumber
The tanggal perintah akan memberikan informasi yang
jadi kamu bisa
itukah yang kamu inginkan?
sumber
Anda bisa mengumandangkan output perintah ke file log. yaitu,
Ini benar-benar bekerja :)
Contoh:
sumber
Buat
config.sh
fileKetika Anda perlu mengirim untuk menggunakan file log
File log akan terlihat seperti
Jadi akan mudah untuk mengurutkan berdasarkan tanggal
sumber
Maksud Anda seperti:
sumber
script.sh
. OP membutuhkan cap waktu per baris.Coba ini
Sebut fungsi cap waktu ini di setiap perintah gema:
sumber
Jawaban yang diterima https://serverfault.com/a/310104 bisa agak lambat, jika banyak baris harus diproses, dengan overhead memulai
date
proses yang memungkinkan sekitar 50 baris per detik di Ubuntu, dan hanya sekitar 10 -20 di Cygwin.Ketika
bash
dapat diasumsikan alternatif yang lebih cepat adalahprintf
builtin dengan penentu%(...)T
formatnya. Membandingkansumber
Anda mungkin memperhatikan bahwa awk berjalan cepat,
Tapi, sed berjalan lebih cepat,
Namun, pada pemeriksaan lebih dekat, mengatur sepertinya tidak mengubah waktu,
sumber
"s/^/$(date -R) /"
dan menjalankan tanggal sekali sebelum sed. Sed melewati string statis.yes | head -5000000 | while read line; do echo $((SECONDS)); done | uniq -c
yang jauh lebih lambat daripada melongo.ts
utilitas memiliki kinerja yang mirip dengan bash loop.yes |head -5000000 |perl -ne 'print localtime."\t".$_' |uniq -c
yang sedikit lebih lambat dari awk.Di bawah ini adalah isi file log saya
beberapa konten shell saya adalah seperti di bawah ini
sumber
Script ini mencetak output dalam terminal dan juga menyimpan dalam file log.
Output sampel:
sumber
Pilihan lain adalah mengatur fungsi untuk memanggil setiap kali Anda ingin menampilkan data dalam kode Anda:
Kemudian setiap kali dalam kode Anda, Anda ingin mengirimnya ke panggilan file log
Peasy mudah ....
sumber
Pipa "sed":
sumber