कल्पना कीजिए कि इस तरह के कुछ लॉग हैं
Jun2012|16:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized|
Jun2012|17:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized|
Jun2013|16:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized|
Jun2012|18:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized|
Jun2012|19:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized|
..... मैं एक संपादक में लाइन नंबर देख सकता हूं लेकिन मैं प्रत्येक लाइन की लाइन नंबर की गणना करना चाहता हूं और इसका क्षेत्र बनाना चाहता हूं।
{...,"line_num" : 23, ...}
मैं इसे कैसे बना सकता हूँ? क्या कोई उदाहरण दे सकता है?
4 जवाब
मैंने उस मुद्दे को हल कर लिया है, अपना खुद का इनपुट कोडेक प्लगइन बनाने के साथ आप घटनाओं पर पुनरावृत्ति के माध्यम से लाइन नंबरों की गणना कर सकते हैं
लॉगस्टैश को किसी फ़ाइल में ईवेंट की लाइन संख्या के बारे में कोई जानकारी नहीं है, और यह केवल बाइट ऑफ़सेट को ट्रैक करता है जब आप file
इनपुट का उपयोग करते हैं।
यदि आप अपने लॉग को लॉगस्टैश में भेजने के लिए फाइलबीट का उपयोग कर रहे हैं तो आपके पास बाइट ऑफ़सेट के बारे में भी जानकारी है, लेकिन वास्तविक लाइन नंबर की कोई ट्रैकिंग नहीं है।
यदि आप केवल अपने ईवेंट ऑर्डर करना चाहते हैं तो आप इस ऑफ़सेट का उपयोग कर सकते हैं, यदि आपको वास्तविक लाइन नंबर की आवश्यकता है तो आपको लॉगस्टैश पर भेजने से पहले इस जानकारी को अपने ईवेंट में जोड़ने का एक तरीका लागू करना होगा।
नीचे दिए गए readlines
और with_index
के साथ प्रयास करें
result = []
File.readlines('test.log').each.with_index(1) do |line, index|
result << { content: line, line_num: index }
end
आउटपुट:
2.6.3 :042 > pp result
[{:content=>
"Jun2012|16:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized|\n",
:line_num=>1},
{:content=>
"Jun2012|17:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized|\n",
:line_num=>2},
{:content=>
"Jun2013|16:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized|\n",
:line_num=>3},
{:content=>
"Jun2012|18:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized|\n",
:line_num=>4},
{:content=>
"Jun2012|19:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized|",
:line_num=>5}]
रूबी का एक विशेष चर $.
है जिसमें लाइन नंबर होता है।
File.foreach(logfile).each do |line|
puts "#{$.}: #{line}"
end