Saya mencoba memasukkan beberapa log pengumpulan sampah ke dalam Splunk. Namun, ketika java memulai pengumpulan sampah, ia mulai entri log, kemudian ketika selesai menempatkan di akhir entri. Splunk memperlakukan ini sebagai entri terpisah, jadi saya mencoba menggunakan cron untuk memberi makan log ke file terpisah, dan minta Splunk memonitor file itu.
Saya telah menemukan bahwa entri log yang tidak lengkap tidak memiliki karakter umpan baris, jadi saya telah mencoba menggunakan grep, sed, atau perl satu liner untuk menyaringnya.
Saya sudah mencoba ini
cat <log file> | egrep "\n"
cat <log file> | sed '/\n/p'
perl -pe '/(?:\n|\r)+$/gm' <log file>
Tapi, setiap kali saya mendapatkan kembali baris yang tidak lengkap (Anda dapat melihat prompt saya di akhir baris ketiga):
2013-10-11T13:21:43.952-0500: 56511.609: [GC 56511.609: [ParNew: 2457856K->271659K(2765056K), 0.5481470 secs] 5897437K->3711241K(11981056K), 0.5485080 secs] [Times: user=1.21 sys=0.00, real=0.55 secs]
2013-10-11T13:53:17.001-0500: 58404.658: [GC 58404.658: [ParNew: 2729515K->180830K(2765056K), 0.4755270 secs] 6169097K->3747097K(11981056K), 0.4758900 secs] [Times: user=1.29 sys=0.01, real=0.48 secs]
2013-10-11T14:02:56.084-0500: 58983.741: [Full GC (System) 58983.741: [CMS: 3566266K->3504629K(9216000K), 12.7932340 secs] 4444704K->3504629K(11981056K), [CMS Perm : 2082967K->2081438K(3393452K)], 12.7937180 secs][user@host ~]$
Metode apa yang harus saya gunakan untuk hanya mencocokkan garis yang diakhiri dengan karakter linefeed (\ n)? Atau adakah cara lain untuk melakukan ini?