Bring JsonLogger to CE
This backports a module that was in EE for Geo so that other modules can have structured logging support.
This commit is contained in:
parent
3873617548
commit
477f9ed78f
|
@ -0,0 +1,22 @@
|
|||
module Gitlab
|
||||
class JsonLogger < ::Gitlab::Logger
|
||||
def self.file_name_noext
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def format_message(severity, timestamp, progname, message)
|
||||
data = {}
|
||||
data[:severity] = severity
|
||||
data[:time] = timestamp.utc.iso8601(3)
|
||||
|
||||
case message
|
||||
when String
|
||||
data[:message] = message
|
||||
when Hash
|
||||
data.merge!(message)
|
||||
end
|
||||
|
||||
data.to_json + "\n"
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,29 @@
|
|||
# coding: utf-8
|
||||
require 'spec_helper'
|
||||
|
||||
describe Gitlab::JsonLogger do
|
||||
subject { described_class.new('/dev/null') }
|
||||
|
||||
let(:now) { Time.now }
|
||||
|
||||
describe '#format_message' do
|
||||
it 'formats strings' do
|
||||
output = subject.format_message('INFO', now, 'test', 'Hello world')
|
||||
data = JSON.parse(output)
|
||||
|
||||
expect(data['severity']).to eq('INFO')
|
||||
expect(data['time']).to eq(now.utc.iso8601(3))
|
||||
expect(data['message']).to eq('Hello world')
|
||||
end
|
||||
|
||||
it 'formats hashes' do
|
||||
output = subject.format_message('INFO', now, 'test', { hello: 1 })
|
||||
data = JSON.parse(output)
|
||||
|
||||
expect(data['severity']).to eq('INFO')
|
||||
expect(data['time']).to eq(now.utc.iso8601(3))
|
||||
expect(data['hello']).to eq(1)
|
||||
expect(data['message']).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue