syslogger5424 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/syslogger.rb +14 -0
- data/lib/syslogger/formatter/rfc5424.rb +90 -0
- data/lib/syslogger/io.rb +43 -0
- data/lib/syslogger/logger.rb +17 -0
- data/spec/spec_helper.rb +6 -0
- data/spec/syslogger/formatter/rfc5424_spec.rb +13 -0
- data/spec/syslogger/io_spec.rb +14 -0
- data/spec/syslogger/logger_spec.rb +14 -0
- data/spec/syslogger_spec.rb +9 -0
- metadata +112 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 22ddee9851cb22ad2d3b96c3e72f5d897abdaaed
|
4
|
+
data.tar.gz: 42079138da0fd99aa6230dffdc4ce852116da9f0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dddc1c51a0ca5f5d1203380f5d72e9563955c4532736e332e5d55a15ba1b132d62aa397caf30a3681aef78dd91ed2a5e06563e0502e9b82998ce453a96451e01
|
7
|
+
data.tar.gz: c3b327028cca44584dd95fc948a72652d9e5bdaa768f82f4a3ee6aa6279c5100a91ef3dc1f21690c3bc87238c655954d8e7cc33a05f844434da05fa52225a123
|
data/lib/syslogger.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'socket'
|
2
|
+
require 'logger'
|
3
|
+
|
4
|
+
require 'syslogger/logger'
|
5
|
+
require 'syslogger/io'
|
6
|
+
require 'syslogger/formatter/rfc5424'
|
7
|
+
|
8
|
+
module SysLogger
|
9
|
+
extend self
|
10
|
+
|
11
|
+
def new(logdev = nil, shift_age = 0, shift_size = 1048576, &block)
|
12
|
+
return Logger.new(logdev, shift_age, shift_size, &block)
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module SysLogger
|
2
|
+
module Formatter
|
3
|
+
class RFC5424 < ::Logger::Formatter
|
4
|
+
attr_reader :msgid, :procid, :appname
|
5
|
+
|
6
|
+
Format = "<%s>1 %s %s %s %s %s [meta x-group=\"%s\"] %s\n"
|
7
|
+
|
8
|
+
FACILITIES = {
|
9
|
+
:kern => 0,
|
10
|
+
:user => 1,
|
11
|
+
:mail => 2,
|
12
|
+
:daemon => 3,
|
13
|
+
:auth => 4,
|
14
|
+
:syslog => 5,
|
15
|
+
:lpr => 6,
|
16
|
+
:news => 7,
|
17
|
+
:uucp => 8,
|
18
|
+
:cron => 9,
|
19
|
+
:authpriv => 10,
|
20
|
+
:ftp => 11,
|
21
|
+
:ntp => 12,
|
22
|
+
:audit => 13,
|
23
|
+
:alert => 14,
|
24
|
+
:at => 15,
|
25
|
+
:local0 => 16,
|
26
|
+
:local1 => 17,
|
27
|
+
:local2 => 18,
|
28
|
+
:local3 => 19,
|
29
|
+
:local4 => 20,
|
30
|
+
:local5 => 21,
|
31
|
+
:local6 => 22,
|
32
|
+
:local7 => 23
|
33
|
+
}
|
34
|
+
|
35
|
+
SEVERITIES = {
|
36
|
+
:emerg => 0,
|
37
|
+
:alert => 1,
|
38
|
+
:crit => 2,
|
39
|
+
:fatal => 2,
|
40
|
+
:err => 3,
|
41
|
+
:error => 3,
|
42
|
+
:warn => 4,
|
43
|
+
:notice => 5,
|
44
|
+
:info => 6,
|
45
|
+
:debug => 7
|
46
|
+
}
|
47
|
+
|
48
|
+
def initialize(appname = nil, procid = nil, msgid = nil, facility = nil)
|
49
|
+
super()
|
50
|
+
|
51
|
+
@msgid = format(msgid, 32)
|
52
|
+
@procid = format(procid, 128)
|
53
|
+
@appname = format(appname, 48)
|
54
|
+
|
55
|
+
self.facility = facility || :local7
|
56
|
+
end
|
57
|
+
|
58
|
+
def facility; @facility; end
|
59
|
+
def facility=(f)
|
60
|
+
@facility = FACILITIES[f.to_s.downcase.to_sym] || @facility
|
61
|
+
end
|
62
|
+
|
63
|
+
def call(severity, datetime, progname, message)
|
64
|
+
severity = SEVERITIES[severity.to_s.downcase.to_sym] || SEVERITIES[:info]
|
65
|
+
pri = (facility * 8) + severity
|
66
|
+
|
67
|
+
# Since we're using RFC5424 format, it makes more sense to use the
|
68
|
+
# passed in progname as the msgid rather than changing the appname when
|
69
|
+
# a block was received to generate the message.
|
70
|
+
message_id = progname.nil? ? msgid : format(progname, 32)
|
71
|
+
|
72
|
+
x_group = rand(99999999)
|
73
|
+
lines = msg2str(message).split(/\r?\n/).reject(&:empty?).map do |line|
|
74
|
+
Format % [pri, datetime.strftime("%FT%T.%6N%:z"), Socket.gethostname,
|
75
|
+
appname, procid, message_id, x_group, line]
|
76
|
+
end
|
77
|
+
|
78
|
+
lines.join
|
79
|
+
end
|
80
|
+
|
81
|
+
def format(text, max_length)
|
82
|
+
if text
|
83
|
+
text[0..max_length].gsub(/\s+/, '')
|
84
|
+
else
|
85
|
+
'-'
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/lib/syslogger/io.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
module SysLogger
|
2
|
+
class IO
|
3
|
+
def initialize(&file_creator)
|
4
|
+
@file_creator = file_creator
|
5
|
+
@file = @file_creator.call
|
6
|
+
end
|
7
|
+
|
8
|
+
def file
|
9
|
+
@file.closed? ? @file = @file_creator.call : @file
|
10
|
+
end
|
11
|
+
|
12
|
+
def write(message)
|
13
|
+
tries = 2
|
14
|
+
Array(message).each do |msg|
|
15
|
+
begin
|
16
|
+
transmit(msg)
|
17
|
+
rescue
|
18
|
+
file.close
|
19
|
+
retry unless (tries -= 1).zero?
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def transmit(message)
|
25
|
+
# UNIXSocket overwrites Object#send, so using file.respond_to?(:send)
|
26
|
+
# does not work. If send and __send__ have different signigutres call
|
27
|
+
# send. Otherwise, call write.
|
28
|
+
unless file.method(:send).hash == file.method(:__send__).hash
|
29
|
+
file.send(message)
|
30
|
+
else
|
31
|
+
file.write(message)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def flush
|
36
|
+
@file.flush
|
37
|
+
end
|
38
|
+
|
39
|
+
def close
|
40
|
+
@file.close
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module SysLogger
|
2
|
+
class Logger < ::Logger
|
3
|
+
attr_reader :logdev, :default_formatter
|
4
|
+
|
5
|
+
def initialize(logdev = nil, shift_age = 0, shift_size = 1048576, &block)
|
6
|
+
if logdev.nil? && block_given?
|
7
|
+
super(SysLogger::IO.new(&block), shift_age, shift_size)
|
8
|
+
elsif logdev.nil?
|
9
|
+
super($stdout, shift_age, shift_size)
|
10
|
+
else
|
11
|
+
super(logdev, shift_age, shift_size)
|
12
|
+
end
|
13
|
+
|
14
|
+
@default_formatter = SysLogger::Formatter::RFC5424.new
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
describe SysLogger::Formatter::RFC5424 do
|
2
|
+
its(:msgid) { is_expected.to eq "-" }
|
3
|
+
its(:procid) { is_expected.to eq "-" }
|
4
|
+
its(:appname) { is_expected.to eq "-" }
|
5
|
+
its(:facility) { is_expected.to eq 23 }
|
6
|
+
|
7
|
+
describe "#call" do
|
8
|
+
it "generates Format" do
|
9
|
+
expect(subject.call(::Logger::INFO, DateTime.now, "Prog", "Message")).
|
10
|
+
to match /<190>1.* - - Prog \[meta x-group=".*"\] Message/
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
describe SysLogger::IO do
|
2
|
+
let(:io) { StringIO.new }
|
3
|
+
|
4
|
+
subject { SysLogger::IO.new { io } }
|
5
|
+
|
6
|
+
its(:file) { is_expected.to eq io }
|
7
|
+
|
8
|
+
describe "#write" do
|
9
|
+
it "uses io" do
|
10
|
+
subject.write("foobar")
|
11
|
+
expect(io.string).to eq "foobar"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
describe SysLogger::Logger do
|
2
|
+
let(:io) { StringIO.new }
|
3
|
+
|
4
|
+
subject { SysLogger::Logger.new(io) }
|
5
|
+
|
6
|
+
its("logdev.dev") { is_expected.to be io }
|
7
|
+
its(:default_formatter) { is_expected.to be_a SysLogger::Formatter::RFC5424 }
|
8
|
+
|
9
|
+
it "logs exceptions" do
|
10
|
+
subject.error StandardError.new("foobar")
|
11
|
+
expect(io.string).to match(
|
12
|
+
/<187>1.* - - - \[meta x-group=".*"\] foobar \(StandardError\)/)
|
13
|
+
end
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: syslogger5424
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- EasyPost
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec-its
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry-nav
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description:
|
70
|
+
email: support@easypost.com
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- lib/syslogger.rb
|
76
|
+
- lib/syslogger/formatter/rfc5424.rb
|
77
|
+
- lib/syslogger/io.rb
|
78
|
+
- lib/syslogger/logger.rb
|
79
|
+
- spec/spec_helper.rb
|
80
|
+
- spec/syslogger/formatter/rfc5424_spec.rb
|
81
|
+
- spec/syslogger/io_spec.rb
|
82
|
+
- spec/syslogger/logger_spec.rb
|
83
|
+
- spec/syslogger_spec.rb
|
84
|
+
homepage: http://github.com/EasyPost/syslogger
|
85
|
+
licenses: []
|
86
|
+
metadata: {}
|
87
|
+
post_install_message:
|
88
|
+
rdoc_options: []
|
89
|
+
require_paths:
|
90
|
+
- lib
|
91
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
requirements: []
|
102
|
+
rubyforge_project:
|
103
|
+
rubygems_version: 2.2.2
|
104
|
+
signing_key:
|
105
|
+
specification_version: 4
|
106
|
+
summary: Logging via syslog
|
107
|
+
test_files:
|
108
|
+
- spec/spec_helper.rb
|
109
|
+
- spec/syslogger/formatter/rfc5424_spec.rb
|
110
|
+
- spec/syslogger/io_spec.rb
|
111
|
+
- spec/syslogger/logger_spec.rb
|
112
|
+
- spec/syslogger_spec.rb
|