logglier 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/logglier/client.rb +8 -1
- data/lib/logglier/client/syslog.rb +14 -4
- data/lib/logglier/version.rb +1 -1
- data/spec/client/syslog_spec.rb +29 -1
- data/spec/spec_helper.rb +21 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1dcb0781ee2e961054577527a6105aa85fd6e02c
|
4
|
+
data.tar.gz: 75437a8852a4b155379c9e9b1876d26ff14e6023
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92d4f3c3eaf6d65a6670d6f8178988b615df3d838a7223affcaefe88c4c5b2c47c2837a6f3a6f68c98ffd460788468b3438a246fa8ef0fd3212e6ac8e24c4f6a
|
7
|
+
data.tar.gz: 16cced1160ddb78a516b9655ce1bff2d97aeba9c252befe390d1c3f99949bb810bc0a2bdb99f066b88961255daa24f56e6d3dad575c8e5ed90df07c3dd3634da
|
data/lib/logglier/client.rb
CHANGED
@@ -74,7 +74,14 @@ module Logglier
|
|
74
74
|
|
75
75
|
def massage_message(incoming_message, severity, processid)
|
76
76
|
outgoing_message = ""
|
77
|
-
|
77
|
+
|
78
|
+
# Append PID and severity to message, unless we're a Syslog
|
79
|
+
# client. If we're a Syslog client, that information is already
|
80
|
+
# in the Syslog packet.
|
81
|
+
unless self.is_a?(Logglier::Client::Syslog)
|
82
|
+
outgoing_message << "pid=#{processid}, severity=#{severity}, "
|
83
|
+
end
|
84
|
+
|
78
85
|
case incoming_message
|
79
86
|
when Hash
|
80
87
|
outgoing_message << masher(incoming_message)
|
@@ -9,7 +9,7 @@ module Logglier
|
|
9
9
|
class Syslog
|
10
10
|
include Logglier::Client::InstanceMethods
|
11
11
|
|
12
|
-
attr_reader :input_uri, :facility, :syslog
|
12
|
+
attr_reader :input_uri, :facility, :format, :syslog
|
13
13
|
|
14
14
|
def initialize(opts={})
|
15
15
|
setup_input_uri(opts)
|
@@ -35,6 +35,7 @@ module Logglier
|
|
35
35
|
@facility = 16
|
36
36
|
end
|
37
37
|
|
38
|
+
@format = opts[:format]
|
38
39
|
@hostname = opts[:hostname] || Socket.gethostname.split('.').first
|
39
40
|
end
|
40
41
|
|
@@ -81,12 +82,21 @@ module Logglier
|
|
81
82
|
proc do |severity, datetime, progname, msg|
|
82
83
|
processid=Process.pid
|
83
84
|
message = "<#{pri(severity)}>#{datetime.strftime(datetime_format)} #{@hostname} "
|
85
|
+
|
86
|
+
# Include process ID in progname/log tag - RFC3164 § 5.3
|
84
87
|
if progname
|
85
|
-
message << "#{progname}: "
|
88
|
+
message << "#{progname}[#{processid}]: "
|
86
89
|
else
|
87
|
-
message << "#{$0}: "
|
90
|
+
message << "#{$0}[#{processid}]: "
|
88
91
|
end
|
89
|
-
|
92
|
+
|
93
|
+
# Support logging JSON to Syslog
|
94
|
+
if @format == :json && msg.is_a?(Hash)
|
95
|
+
message << MultiJson.dump(msg)
|
96
|
+
else
|
97
|
+
message << massage_message(msg,severity,processid)
|
98
|
+
end
|
99
|
+
|
90
100
|
if @input_uri.scheme == 'tcp'
|
91
101
|
message << "\r\n"
|
92
102
|
end
|
data/lib/logglier/version.rb
CHANGED
data/spec/client/syslog_spec.rb
CHANGED
@@ -11,4 +11,32 @@ describe Logglier::Client::Syslog do
|
|
11
11
|
client.pri("WARN").should == (17 << 3) + 4
|
12
12
|
end
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
|
+
describe '#formatter' do
|
16
|
+
before do
|
17
|
+
UDPSocket.stub(:new).and_return(mock('socket').as_null_object)
|
18
|
+
TCPSocket.stub(:new).and_return(mock('Socket').as_null_object)
|
19
|
+
end
|
20
|
+
|
21
|
+
let(:client) { described_class.new(input_url: 'udp://127.0.0.1:514/17') }
|
22
|
+
let(:json_client) { described_class.new(input_url: 'udp://127.0.0.1:514/17', format: :json) }
|
23
|
+
|
24
|
+
it 'includes the PID in the progname' do
|
25
|
+
message = client.formatter.call 'INFO', Time.now, 'banana', 'test message'
|
26
|
+
|
27
|
+
message.should match(/banana\[#{Process.pid}\]: /)
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'when you pass a Hash' do
|
31
|
+
it 'formats as JSON when the format is JSON' do
|
32
|
+
message = json_client.formatter.call 'INFO', Time.now, 'banana', testing_json: true
|
33
|
+
message.should match(/: {"testing_json":true}\z/)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'formats as a massaged message when the format is not JSON' do
|
37
|
+
message = client.formatter.call 'INFO', Time.now, 'banana', testing_json: false
|
38
|
+
message.should match(/: testing_json=false\z/)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -38,21 +38,35 @@ shared_examples_for "a logglier enhanced Logger instance" do
|
|
38
38
|
context "#add" do
|
39
39
|
context "with a string" do
|
40
40
|
it "should send a message via the logdev" do
|
41
|
-
subject.logdev.dev.
|
41
|
+
if subject.logdev.dev.is_a?(Logglier::Client::Syslog)
|
42
|
+
subject.logdev.dev.should_receive(:write).with(/foo/)
|
43
|
+
else
|
44
|
+
subject.logdev.dev.should_receive(:write).with(/severity=WARN, foo/)
|
45
|
+
end
|
46
|
+
|
42
47
|
subject.add(Logger::WARN) { 'foo' }
|
43
48
|
end
|
44
49
|
end
|
45
50
|
|
46
51
|
context "with a hash" do
|
47
52
|
it "should send a message via the logdev" do
|
48
|
-
|
49
|
-
|
50
|
-
subject.logdev.dev.
|
53
|
+
# expect count is the number of times we need to
|
54
|
+
# repeat the log message to test all of the possibilities
|
55
|
+
if subject.logdev.dev.is_a?(Logglier::Client::Syslog)
|
56
|
+
expect_count = 2
|
57
|
+
else
|
58
|
+
expect_count = 3
|
59
|
+
subject.logdev.dev.should_receive(:write).with(/severity=WARN/)
|
60
|
+
end
|
61
|
+
|
62
|
+
expect(subject.logdev.dev).to receive(:write).with(/foo=bar/)
|
63
|
+
expect(subject.logdev.dev).to receive(:write).with(/man=pants/)
|
64
|
+
|
51
65
|
# The following is equiv to:
|
52
66
|
# subject.warn :foo => :bar, :man => :pants
|
53
|
-
|
54
|
-
|
55
|
-
|
67
|
+
expect_count.times do
|
68
|
+
subject.add(Logger::WARN) { {:foo => :bar, :man => :pants} }
|
69
|
+
end
|
56
70
|
end
|
57
71
|
end
|
58
72
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logglier
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Edward Muller (aka freeformz)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|