syslogger5424 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|