mirror of
https://github.com/elastic/logstash.git
synced 2025-04-25 07:07:54 -04:00
- make the plain codec line-terminator aware
This commit is contained in:
parent
2f3c6ec4fa
commit
ed95a7a532
2 changed files with 19 additions and 10 deletions
|
@ -16,15 +16,23 @@ class LogStash::Codecs::Plain < LogStash::Codecs::Base
|
||||||
#
|
#
|
||||||
# This only affects "plain" format logs since json is UTF-8 already.
|
# This only affects "plain" format logs since json is UTF-8 already.
|
||||||
config :charset, :validate => ::Encoding.name_list, :default => "UTF-8"
|
config :charset, :validate => ::Encoding.name_list, :default => "UTF-8"
|
||||||
|
|
||||||
|
public
|
||||||
|
def register
|
||||||
|
require "logstash/util/buftok"
|
||||||
|
@buffer = FileWatch::BufferedTokenizer.new
|
||||||
|
end
|
||||||
|
|
||||||
public
|
public
|
||||||
def decode(data)
|
def decode(data)
|
||||||
data.force_encoding(@charset)
|
@buffer.extract(data).each do |line|
|
||||||
if @charset != "UTF-8"
|
line.force_encoding(@charset)
|
||||||
# Convert to UTF-8 if not in that character set.
|
if @charset != "UTF-8"
|
||||||
data = data.encode("UTF-8", :invalid => :replace, :undef => :replace)
|
# Convert to UTF-8 if not in that character set.
|
||||||
|
line = line.encode("UTF-8", :invalid => :replace, :undef => :replace)
|
||||||
|
end
|
||||||
|
yield LogStash::Event.new({"message" => line})
|
||||||
end
|
end
|
||||||
yield LogStash::Event.new({"message" => data})
|
|
||||||
end # def decode
|
end # def decode
|
||||||
|
|
||||||
public
|
public
|
||||||
|
|
|
@ -16,18 +16,19 @@ class LogStash::Inputs::Stdin < LogStash::Inputs::Base
|
||||||
end # def register
|
end # def register
|
||||||
|
|
||||||
def run(queue)
|
def run(queue)
|
||||||
require "ap"
|
|
||||||
while true
|
while true
|
||||||
begin
|
begin
|
||||||
line = $stdin.readline.chomp
|
# Based on some testing, there is no way to interrupt an IO.sysread nor
|
||||||
@codec.decode(line) do |event|
|
# IO.select call in JRuby. Bummer :(
|
||||||
|
data = $stdin.sysread(16384)
|
||||||
|
@codec.decode(data) do |event|
|
||||||
event["source"] = @host
|
event["source"] = @host
|
||||||
event["type"] = @type if @type
|
event["type"] = @type if @type
|
||||||
@tags && @tags.each { |t| event.tag(t) }
|
@tags && @tags.each { |t| event.tag(t) }
|
||||||
queue << event
|
queue << event
|
||||||
end
|
end
|
||||||
rescue EOFError => ex
|
rescue EOFError, LogStash::ShutdownSignal
|
||||||
# stdin closed, finish
|
# stdin closed or a requested shutdown
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end # while true
|
end # while true
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue