63 lines
1.6 KiB
Ruby
63 lines
1.6 KiB
Ruby
require "vagrant/util/credential_scrubber"
|
|
require "log4r/formatter/formatter"
|
|
|
|
module Vagrant
|
|
module Util
|
|
# Wrapper for logging formatting to provide
|
|
# information scrubbing prior to being written
|
|
# to output target
|
|
class LoggingFormatter < Log4r::BasicFormatter
|
|
|
|
# @return [Log4r::PatternFormatter]
|
|
attr_reader :formatter
|
|
|
|
# Creates a new formatter wrapper instance.
|
|
#
|
|
# @param [Log4r::Formatter]
|
|
def initialize(formatter)
|
|
@formatter = formatter
|
|
end
|
|
|
|
# Format event and scrub output
|
|
def format(event)
|
|
msg = formatter.format(event)
|
|
CredentialScrubber.desensitize(msg)
|
|
end
|
|
end
|
|
|
|
class HCLogFormatter < Log4r::BasicFormatter
|
|
def format(event)
|
|
message = format_object(event.data).
|
|
force_encoding('UTF-8').
|
|
scrub("?")
|
|
if message.count("\n") > 40
|
|
message = message.split("\n").each_slice(40).to_a
|
|
message = [message.shift.join("\n")] + message.map { |m|
|
|
"continued...\n" + m.join("\n") }
|
|
else
|
|
message = [message]
|
|
end
|
|
|
|
message.map do |msg|
|
|
d = {
|
|
"@timestamp" => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%6N%:z"),
|
|
"@level" => Log4r::LNAMES[event.level].downcase,
|
|
"@module" => event.fullname.gsub("::", "."),
|
|
"@message" => msg,
|
|
}
|
|
d["@caller"] = event.tracer[0] if event.tracer
|
|
d.to_json + "\n"
|
|
end
|
|
end
|
|
end
|
|
|
|
class HCLogOutputter < Log4r::StderrOutputter
|
|
def write(data)
|
|
data.each do |d|
|
|
super(d)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|