ssherman-sysloglogger 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.
- data/History.txt +12 -0
- data/Manifest.txt +7 -0
- data/README.txt +17 -0
- data/Rakefile +12 -0
- data/VERSION +1 -0
- data/lib/analyzer_tools/syslog_logger.rb +1 -0
- data/lib/syslog/logger.rb +194 -0
- data/lib/sysloglogger.rb +1 -0
- data/test/test_syslog_logger.rb +521 -0
- metadata +56 -0
data/History.txt
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
== 2.0 / Unreleased
|
2
|
+
|
3
|
+
* SyslogLogger is now Syslog::Logger
|
4
|
+
* Syslog::Logger has a formatter like Logger
|
5
|
+
|
6
|
+
== 1.4.0 / 2007-05-08
|
7
|
+
|
8
|
+
* Split from rails_analyzer_tools.
|
9
|
+
* Added eh methods for compatibility with Logger.
|
10
|
+
* Added syslog-ng instructions. Patch by Tom Lianza.
|
11
|
+
* Fixed require in documentation. Reported by Gianni Jacklone.
|
12
|
+
|
data/Manifest.txt
ADDED
data/README.txt
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
= SyslogLogger
|
2
|
+
|
3
|
+
* http://github.com/seattlerb/sysloglogger
|
4
|
+
|
5
|
+
== Description
|
6
|
+
|
7
|
+
SyslogLogger is a Logger replacement that logs to syslog. It is almost
|
8
|
+
drop-in with a few caveats.
|
9
|
+
|
10
|
+
== About
|
11
|
+
|
12
|
+
See SyslogLogger
|
13
|
+
|
14
|
+
== Install
|
15
|
+
|
16
|
+
sudo gem install SyslogLogger
|
17
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'jeweler'
|
2
|
+
Jeweler::Tasks.new do |gem|
|
3
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
4
|
+
gem.name = "ssherman-sysloglogger"
|
5
|
+
gem.homepage = "http://github.com/ssherman/sysloglogger"
|
6
|
+
gem.summary = %Q{wrapper around syslog that's rails friendly}
|
7
|
+
gem.description = %Q{wrapper around syslog that's rails friendly. Forked and added ability to set options}
|
8
|
+
gem.email = "shane.sherman@gmail.com"
|
9
|
+
gem.authors = ["Erik Hodel", "Shane Sherman"]
|
10
|
+
# dependencies defined in Gemfile
|
11
|
+
end
|
12
|
+
Jeweler::RubygemsDotOrgTasks.new
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'syslog_logger' # for compatibility
|
@@ -0,0 +1,194 @@
|
|
1
|
+
require 'syslog'
|
2
|
+
require 'logger'
|
3
|
+
|
4
|
+
##
|
5
|
+
# Syslog::Logger is a Logger work-alike that logs via syslog instead of to a
|
6
|
+
# file. You can use Syslog::Logger to aggregate logs between multiple
|
7
|
+
# machines.
|
8
|
+
#
|
9
|
+
# By default, Syslog::Logger uses the program name 'ruby', but this can be
|
10
|
+
# changed via the first argument to Syslog::Logger.new.
|
11
|
+
#
|
12
|
+
# NOTE! You can only set the Syslog::Logger program name when you initialize
|
13
|
+
# Syslog::Logger for the first time. This is a limitation of the way
|
14
|
+
# Syslog::Logger uses syslog (and in some ways, a limitation of the way
|
15
|
+
# syslog(3) works). Attempts to change Syslog::Logger's program name after
|
16
|
+
# the first initialization will be ignored.
|
17
|
+
#
|
18
|
+
# === Example
|
19
|
+
#
|
20
|
+
# The following will log to syslogd on your local machine:
|
21
|
+
#
|
22
|
+
# require 'syslog/logger'
|
23
|
+
#
|
24
|
+
# log = Syslog::Logger.new 'my_program'
|
25
|
+
# log.info 'this line will be logged via syslog(3)'
|
26
|
+
#
|
27
|
+
# You may need to perform some syslog.conf setup first. For a BSD machine add
|
28
|
+
# the following lines to /etc/syslog.conf:
|
29
|
+
#
|
30
|
+
# !my_program
|
31
|
+
# *.* /var/log/my_program.log
|
32
|
+
#
|
33
|
+
# Then touch /var/log/my_program.log and signal syslogd with a HUP
|
34
|
+
# (killall -HUP syslogd, on FreeBSD).
|
35
|
+
#
|
36
|
+
# If you wish to have logs automatically roll over and archive, see the
|
37
|
+
# newsyslog.conf(5) and newsyslog(8) man pages.
|
38
|
+
|
39
|
+
class Syslog::Logger
|
40
|
+
# Default formatter for log messages.
|
41
|
+
class Formatter
|
42
|
+
def call severity, time, progname, msg
|
43
|
+
clean msg
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
##
|
49
|
+
# Clean up messages so they're nice and pretty.
|
50
|
+
|
51
|
+
def clean message
|
52
|
+
message = message.to_s.strip
|
53
|
+
message.gsub!(/\e\[[0-9;]*m/, '') # remove useless ansi color codes
|
54
|
+
return message
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
##
|
59
|
+
# The version of Syslog::Logger you are using.
|
60
|
+
|
61
|
+
VERSION = '2.0'
|
62
|
+
|
63
|
+
##
|
64
|
+
# Maps Logger warning types to syslog(3) warning types.
|
65
|
+
#
|
66
|
+
# Messages from ruby applications are not considered as critical as messages
|
67
|
+
# from other system daemons using syslog(3), so most messages are reduced by
|
68
|
+
# one level. For example, a fatal message for ruby's Logger is considered
|
69
|
+
# an error for syslog(3).
|
70
|
+
|
71
|
+
LEVEL_MAP = {
|
72
|
+
::Logger::UNKNOWN => Syslog::LOG_ALERT,
|
73
|
+
::Logger::FATAL => Syslog::LOG_ERR,
|
74
|
+
::Logger::ERROR => Syslog::LOG_WARNING,
|
75
|
+
::Logger::WARN => Syslog::LOG_NOTICE,
|
76
|
+
::Logger::INFO => Syslog::LOG_INFO,
|
77
|
+
::Logger::DEBUG => Syslog::LOG_DEBUG,
|
78
|
+
}
|
79
|
+
|
80
|
+
##
|
81
|
+
# Returns the internal Syslog object that is initialized when the
|
82
|
+
# first instance is created.
|
83
|
+
|
84
|
+
def self.syslog
|
85
|
+
@@syslog
|
86
|
+
end
|
87
|
+
|
88
|
+
##
|
89
|
+
# Specifies the internal Syslog object to be used.
|
90
|
+
|
91
|
+
def self.syslog= syslog
|
92
|
+
@@syslog = syslog
|
93
|
+
end
|
94
|
+
|
95
|
+
##
|
96
|
+
# Builds a methods for level +meth+.
|
97
|
+
|
98
|
+
def self.make_methods meth
|
99
|
+
level = ::Logger.const_get(meth.upcase)
|
100
|
+
eval <<-EOM, nil, __FILE__, __LINE__ + 1
|
101
|
+
def #{meth}(message = nil, &block)
|
102
|
+
add(#{level}, message, &block)
|
103
|
+
end
|
104
|
+
|
105
|
+
def #{meth}?
|
106
|
+
@level <= #{level}
|
107
|
+
end
|
108
|
+
EOM
|
109
|
+
end
|
110
|
+
|
111
|
+
##
|
112
|
+
# :method: unknown
|
113
|
+
#
|
114
|
+
# Logs a +message+ at the unknown (syslog alert) log level, or logs the
|
115
|
+
# message returned from the block.
|
116
|
+
|
117
|
+
##
|
118
|
+
# :method: fatal
|
119
|
+
#
|
120
|
+
# Logs a +message+ at the fatal (syslog err) log level, or logs the message
|
121
|
+
# returned from the block.
|
122
|
+
|
123
|
+
##
|
124
|
+
# :method: error
|
125
|
+
#
|
126
|
+
# Logs a +message+ at the error (syslog warning) log level, or logs the
|
127
|
+
# message returned from the block.
|
128
|
+
|
129
|
+
##
|
130
|
+
# :method: warn
|
131
|
+
#
|
132
|
+
# Logs a +message+ at the warn (syslog notice) log level, or logs the
|
133
|
+
# message returned from the block.
|
134
|
+
|
135
|
+
##
|
136
|
+
# :method: info
|
137
|
+
#
|
138
|
+
# Logs a +message+ at the info (syslog info) log level, or logs the message
|
139
|
+
# returned from the block.
|
140
|
+
|
141
|
+
##
|
142
|
+
# :method: debug
|
143
|
+
#
|
144
|
+
# Logs a +message+ at the debug (syslog debug) log level, or logs the
|
145
|
+
# message returned from the block.
|
146
|
+
|
147
|
+
Logger::Severity::constants.each do |severity|
|
148
|
+
make_methods severity.downcase
|
149
|
+
end
|
150
|
+
|
151
|
+
##
|
152
|
+
# Log level for Logger compatibility.
|
153
|
+
|
154
|
+
attr_accessor :level
|
155
|
+
|
156
|
+
# Logging formatter, as a +Proc+ that will take four arguments and
|
157
|
+
# return the formatted message. The arguments are:
|
158
|
+
#
|
159
|
+
# +severity+:: The Severity of the log message.
|
160
|
+
# +time+:: A Time instance representing when the message was logged.
|
161
|
+
# +progname+:: The #progname configured, or passed to the logger method.
|
162
|
+
# +msg+:: The _Object_ the user passed to the log message; not necessarily a
|
163
|
+
# String.
|
164
|
+
#
|
165
|
+
# The block should return an Object that can be written to the logging
|
166
|
+
# device via +write+. The default formatter is used when no formatter is
|
167
|
+
# set.
|
168
|
+
attr_accessor :formatter
|
169
|
+
|
170
|
+
##
|
171
|
+
# Fills in variables for Logger compatibility. If this is the first
|
172
|
+
# instance of Syslog::Logger, +program_name+ may be set to change the logged
|
173
|
+
# program name.
|
174
|
+
#
|
175
|
+
# Due to the way syslog works, only one program name may be chosen.
|
176
|
+
|
177
|
+
def initialize(program_name = 'ruby', options = nil, facility = nil)
|
178
|
+
@level = ::Logger::DEBUG
|
179
|
+
@formatter = Formatter.new
|
180
|
+
|
181
|
+
@@syslog ||= Syslog.open(program_name, options, facility)
|
182
|
+
end
|
183
|
+
|
184
|
+
##
|
185
|
+
# Almost duplicates Logger#add. +progname+ is ignored.
|
186
|
+
|
187
|
+
def add severity, message = nil, progname = nil, &block
|
188
|
+
severity ||= ::Logger::UNKNOWN
|
189
|
+
@level <= severity and
|
190
|
+
@@syslog.log LEVEL_MAP[severity], '%s', formatter.call(severity, Time.now, progname, (message || block.call))
|
191
|
+
true
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
data/lib/sysloglogger.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'syslog/logger'
|
@@ -0,0 +1,521 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'tempfile'
|
3
|
+
begin
|
4
|
+
require 'syslog/logger'
|
5
|
+
rescue LoadError
|
6
|
+
# skip. see the bottom of this file.
|
7
|
+
end
|
8
|
+
|
9
|
+
# These tests ensure Syslog::Logger works like Logger
|
10
|
+
|
11
|
+
class TestSyslogRootLogger < Test::Unit::TestCase
|
12
|
+
|
13
|
+
module MockSyslog
|
14
|
+
LEVEL_LABEL_MAP = {}
|
15
|
+
|
16
|
+
class << self
|
17
|
+
|
18
|
+
@line = nil
|
19
|
+
|
20
|
+
%w[ALERT ERR WARNING NOTICE INFO DEBUG].each do |name|
|
21
|
+
level = Syslog.const_get("LOG_#{name}")
|
22
|
+
LEVEL_LABEL_MAP[level] = name
|
23
|
+
|
24
|
+
eval <<-EOM
|
25
|
+
def #{name.downcase}(format, *args)
|
26
|
+
log(#{level}, format, *args)
|
27
|
+
end
|
28
|
+
EOM
|
29
|
+
end
|
30
|
+
|
31
|
+
def log(level, format, *args)
|
32
|
+
@line = "#{LEVEL_LABEL_MAP[level]} - #{format % args}"
|
33
|
+
end
|
34
|
+
|
35
|
+
attr_reader :line
|
36
|
+
attr_reader :program_name
|
37
|
+
|
38
|
+
def open(program_name)
|
39
|
+
@program_name = program_name
|
40
|
+
end
|
41
|
+
|
42
|
+
def reset
|
43
|
+
@line = ''
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
Syslog::Logger.syslog = MockSyslog
|
50
|
+
|
51
|
+
LEVEL_LABEL_MAP = {
|
52
|
+
Logger::DEBUG => 'DEBUG',
|
53
|
+
Logger::INFO => 'INFO',
|
54
|
+
Logger::WARN => 'WARN',
|
55
|
+
Logger::ERROR => 'ERROR',
|
56
|
+
Logger::FATAL => 'FATAL',
|
57
|
+
Logger::UNKNOWN => 'ANY',
|
58
|
+
}
|
59
|
+
|
60
|
+
def setup
|
61
|
+
@logger = Logger.new(nil)
|
62
|
+
end
|
63
|
+
|
64
|
+
class Log
|
65
|
+
attr_reader :line, :label, :datetime, :pid, :severity, :progname, :msg
|
66
|
+
def initialize(line)
|
67
|
+
@line = line
|
68
|
+
/\A(\w+), \[([^#]*)#(\d+)\]\s+(\w+) -- (\w*): ([\x0-\xff]*)/ =~ @line
|
69
|
+
@label, @datetime, @pid, @severity, @progname, @msg = $1, $2, $3, $4, $5, $6
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def log_add(severity, msg, progname = nil, &block)
|
74
|
+
log(:add, severity, msg, progname, &block)
|
75
|
+
end
|
76
|
+
|
77
|
+
def log(msg_id, *arg, &block)
|
78
|
+
Log.new(log_raw(msg_id, *arg, &block))
|
79
|
+
end
|
80
|
+
|
81
|
+
def log_raw(msg_id, *arg, &block)
|
82
|
+
logdev = Tempfile.new(File.basename(__FILE__) + '.log')
|
83
|
+
@logger.instance_eval { @logdev = Logger::LogDevice.new(logdev) }
|
84
|
+
assert_equal true, @logger.__send__(msg_id, *arg, &block)
|
85
|
+
logdev.open
|
86
|
+
msg = logdev.read
|
87
|
+
logdev.close
|
88
|
+
msg
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_initialize
|
92
|
+
assert_equal Logger::DEBUG, @logger.level
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_custom_formatter
|
96
|
+
@logger.formatter = Class.new {
|
97
|
+
def call severity, time, progname, msg
|
98
|
+
"hi mom!"
|
99
|
+
end
|
100
|
+
}.new
|
101
|
+
|
102
|
+
assert_match(/hi mom!/, log_raw(:fatal, 'fatal level message'))
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_add
|
106
|
+
msg = log_add nil, 'unknown level message' # nil == unknown
|
107
|
+
assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
|
108
|
+
|
109
|
+
msg = log_add Logger::FATAL, 'fatal level message'
|
110
|
+
assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
|
111
|
+
|
112
|
+
msg = log_add Logger::ERROR, 'error level message'
|
113
|
+
assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
|
114
|
+
|
115
|
+
msg = log_add Logger::WARN, 'warn level message'
|
116
|
+
assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
|
117
|
+
|
118
|
+
msg = log_add Logger::INFO, 'info level message'
|
119
|
+
assert_equal LEVEL_LABEL_MAP[Logger::INFO], msg.severity
|
120
|
+
|
121
|
+
msg = log_add Logger::DEBUG, 'debug level message'
|
122
|
+
assert_equal LEVEL_LABEL_MAP[Logger::DEBUG], msg.severity
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_add_level_unknown
|
126
|
+
@logger.level = Logger::UNKNOWN
|
127
|
+
|
128
|
+
msg = log_add nil, 'unknown level message' # nil == unknown
|
129
|
+
assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
|
130
|
+
|
131
|
+
msg = log_add Logger::FATAL, 'fatal level message'
|
132
|
+
assert_equal '', msg.line
|
133
|
+
|
134
|
+
msg = log_add Logger::ERROR, 'error level message'
|
135
|
+
assert_equal '', msg.line
|
136
|
+
|
137
|
+
msg = log_add Logger::WARN, 'warn level message'
|
138
|
+
assert_equal '', msg.line
|
139
|
+
|
140
|
+
msg = log_add Logger::INFO, 'info level message'
|
141
|
+
assert_equal '', msg.line
|
142
|
+
|
143
|
+
msg = log_add Logger::DEBUG, 'debug level message'
|
144
|
+
assert_equal '', msg.line
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_add_level_fatal
|
148
|
+
@logger.level = Logger::FATAL
|
149
|
+
|
150
|
+
msg = log_add nil, 'unknown level message' # nil == unknown
|
151
|
+
assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
|
152
|
+
|
153
|
+
msg = log_add Logger::FATAL, 'fatal level message'
|
154
|
+
assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
|
155
|
+
|
156
|
+
msg = log_add Logger::ERROR, 'error level message'
|
157
|
+
assert_equal '', msg.line
|
158
|
+
|
159
|
+
msg = log_add Logger::WARN, 'warn level message'
|
160
|
+
assert_equal '', msg.line
|
161
|
+
|
162
|
+
msg = log_add Logger::INFO, 'info level message'
|
163
|
+
assert_equal '', msg.line
|
164
|
+
|
165
|
+
msg = log_add Logger::DEBUG, 'debug level message'
|
166
|
+
assert_equal '', msg.line
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_add_level_error
|
170
|
+
@logger.level = Logger::ERROR
|
171
|
+
|
172
|
+
msg = log_add nil, 'unknown level message' # nil == unknown
|
173
|
+
assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
|
174
|
+
|
175
|
+
msg = log_add Logger::FATAL, 'fatal level message'
|
176
|
+
assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
|
177
|
+
|
178
|
+
msg = log_add Logger::ERROR, 'error level message'
|
179
|
+
assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
|
180
|
+
|
181
|
+
msg = log_add Logger::WARN, 'warn level message'
|
182
|
+
assert_equal '', msg.line
|
183
|
+
|
184
|
+
msg = log_add Logger::INFO, 'info level message'
|
185
|
+
assert_equal '', msg.line
|
186
|
+
|
187
|
+
msg = log_add Logger::DEBUG, 'debug level message'
|
188
|
+
assert_equal '', msg.line
|
189
|
+
end
|
190
|
+
|
191
|
+
def test_add_level_warn
|
192
|
+
@logger.level = Logger::WARN
|
193
|
+
|
194
|
+
msg = log_add nil, 'unknown level message' # nil == unknown
|
195
|
+
assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
|
196
|
+
|
197
|
+
msg = log_add Logger::FATAL, 'fatal level message'
|
198
|
+
assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
|
199
|
+
|
200
|
+
msg = log_add Logger::ERROR, 'error level message'
|
201
|
+
assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
|
202
|
+
|
203
|
+
msg = log_add Logger::WARN, 'warn level message'
|
204
|
+
assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
|
205
|
+
|
206
|
+
msg = log_add Logger::INFO, 'info level message'
|
207
|
+
assert_equal '', msg.line
|
208
|
+
|
209
|
+
msg = log_add Logger::DEBUG, 'debug level message'
|
210
|
+
assert_equal '', msg.line
|
211
|
+
end
|
212
|
+
|
213
|
+
def test_add_level_info
|
214
|
+
@logger.level = Logger::INFO
|
215
|
+
|
216
|
+
msg = log_add nil, 'unknown level message' # nil == unknown
|
217
|
+
assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
|
218
|
+
|
219
|
+
msg = log_add Logger::FATAL, 'fatal level message'
|
220
|
+
assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
|
221
|
+
|
222
|
+
msg = log_add Logger::ERROR, 'error level message'
|
223
|
+
assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
|
224
|
+
|
225
|
+
msg = log_add Logger::WARN, 'warn level message'
|
226
|
+
assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
|
227
|
+
|
228
|
+
msg = log_add Logger::INFO, 'info level message'
|
229
|
+
assert_equal LEVEL_LABEL_MAP[Logger::INFO], msg.severity
|
230
|
+
|
231
|
+
msg = log_add Logger::DEBUG, 'debug level message'
|
232
|
+
assert_equal '', msg.line
|
233
|
+
end
|
234
|
+
|
235
|
+
def test_add_level_debug
|
236
|
+
@logger.level = Logger::DEBUG
|
237
|
+
|
238
|
+
msg = log_add nil, 'unknown level message' # nil == unknown
|
239
|
+
assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
|
240
|
+
|
241
|
+
msg = log_add Logger::FATAL, 'fatal level message'
|
242
|
+
assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
|
243
|
+
|
244
|
+
msg = log_add Logger::ERROR, 'error level message'
|
245
|
+
assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
|
246
|
+
|
247
|
+
msg = log_add Logger::WARN, 'warn level message'
|
248
|
+
assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
|
249
|
+
|
250
|
+
msg = log_add Logger::INFO, 'info level message'
|
251
|
+
assert_equal LEVEL_LABEL_MAP[Logger::INFO], msg.severity
|
252
|
+
|
253
|
+
msg = log_add Logger::DEBUG, 'debug level message'
|
254
|
+
assert_equal LEVEL_LABEL_MAP[Logger::DEBUG], msg.severity
|
255
|
+
end
|
256
|
+
|
257
|
+
def test_unknown
|
258
|
+
msg = log :unknown, 'unknown level message'
|
259
|
+
assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
|
260
|
+
|
261
|
+
@logger.level = Logger::UNKNOWN
|
262
|
+
msg = log :unknown, 'unknown level message'
|
263
|
+
assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
|
264
|
+
|
265
|
+
@logger.level = Logger::FATAL
|
266
|
+
msg = log :unknown, 'unknown level message'
|
267
|
+
assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
|
268
|
+
|
269
|
+
@logger.level = Logger::ERROR
|
270
|
+
msg = log :unknown, 'unknown level message'
|
271
|
+
assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
|
272
|
+
|
273
|
+
@logger.level = Logger::WARN
|
274
|
+
msg = log :unknown, 'unknown level message'
|
275
|
+
assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
|
276
|
+
|
277
|
+
@logger.level = Logger::INFO
|
278
|
+
msg = log :unknown, 'unknown level message'
|
279
|
+
assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
|
280
|
+
|
281
|
+
@logger.level = Logger::DEBUG
|
282
|
+
msg = log :unknown, 'unknown level message'
|
283
|
+
assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_fatal
|
287
|
+
msg = log :fatal, 'fatal level message'
|
288
|
+
assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
|
289
|
+
|
290
|
+
@logger.level = Logger::UNKNOWN
|
291
|
+
msg = log :fatal, 'fatal level message'
|
292
|
+
assert_equal '', msg.line
|
293
|
+
|
294
|
+
@logger.level = Logger::FATAL
|
295
|
+
msg = log :fatal, 'fatal level message'
|
296
|
+
assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
|
297
|
+
|
298
|
+
@logger.level = Logger::ERROR
|
299
|
+
msg = log :fatal, 'fatal level message'
|
300
|
+
assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
|
301
|
+
|
302
|
+
@logger.level = Logger::WARN
|
303
|
+
msg = log :fatal, 'fatal level message'
|
304
|
+
assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
|
305
|
+
|
306
|
+
@logger.level = Logger::INFO
|
307
|
+
msg = log :fatal, 'fatal level message'
|
308
|
+
assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
|
309
|
+
|
310
|
+
@logger.level = Logger::DEBUG
|
311
|
+
msg = log :fatal, 'fatal level message'
|
312
|
+
assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
|
313
|
+
end
|
314
|
+
|
315
|
+
def test_fatal_eh
|
316
|
+
@logger.level = Logger::FATAL
|
317
|
+
assert_equal true, @logger.fatal?
|
318
|
+
|
319
|
+
@logger.level = Logger::UNKNOWN
|
320
|
+
assert_equal false, @logger.fatal?
|
321
|
+
end
|
322
|
+
|
323
|
+
def test_error
|
324
|
+
msg = log :error, 'error level message'
|
325
|
+
assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
|
326
|
+
|
327
|
+
@logger.level = Logger::UNKNOWN
|
328
|
+
msg = log :error, 'error level message'
|
329
|
+
assert_equal '', msg.line
|
330
|
+
|
331
|
+
@logger.level = Logger::FATAL
|
332
|
+
msg = log :error, 'error level message'
|
333
|
+
assert_equal '', msg.line
|
334
|
+
|
335
|
+
@logger.level = Logger::ERROR
|
336
|
+
msg = log :error, 'error level message'
|
337
|
+
assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
|
338
|
+
|
339
|
+
@logger.level = Logger::WARN
|
340
|
+
msg = log :error, 'error level message'
|
341
|
+
assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
|
342
|
+
|
343
|
+
@logger.level = Logger::INFO
|
344
|
+
msg = log :error, 'error level message'
|
345
|
+
assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
|
346
|
+
|
347
|
+
@logger.level = Logger::DEBUG
|
348
|
+
msg = log :error, 'error level message'
|
349
|
+
assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
|
350
|
+
end
|
351
|
+
|
352
|
+
def test_error_eh
|
353
|
+
@logger.level = Logger::ERROR
|
354
|
+
assert_equal true, @logger.error?
|
355
|
+
|
356
|
+
@logger.level = Logger::FATAL
|
357
|
+
assert_equal false, @logger.error?
|
358
|
+
end
|
359
|
+
|
360
|
+
def test_warn
|
361
|
+
msg = log :warn, 'warn level message'
|
362
|
+
assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
|
363
|
+
|
364
|
+
@logger.level = Logger::UNKNOWN
|
365
|
+
msg = log :warn, 'warn level message'
|
366
|
+
assert_equal '', msg.line
|
367
|
+
|
368
|
+
@logger.level = Logger::FATAL
|
369
|
+
msg = log :warn, 'warn level message'
|
370
|
+
assert_equal '', msg.line
|
371
|
+
|
372
|
+
@logger.level = Logger::ERROR
|
373
|
+
msg = log :warn, 'warn level message'
|
374
|
+
assert_equal '', msg.line
|
375
|
+
|
376
|
+
@logger.level = Logger::WARN
|
377
|
+
msg = log :warn, 'warn level message'
|
378
|
+
assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
|
379
|
+
|
380
|
+
@logger.level = Logger::INFO
|
381
|
+
msg = log :warn, 'warn level message'
|
382
|
+
assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
|
383
|
+
|
384
|
+
@logger.level = Logger::DEBUG
|
385
|
+
msg = log :warn, 'warn level message'
|
386
|
+
assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
|
387
|
+
end
|
388
|
+
|
389
|
+
def test_warn_eh
|
390
|
+
@logger.level = Logger::WARN
|
391
|
+
assert_equal true, @logger.warn?
|
392
|
+
|
393
|
+
@logger.level = Logger::ERROR
|
394
|
+
assert_equal false, @logger.warn?
|
395
|
+
end
|
396
|
+
|
397
|
+
def test_info
|
398
|
+
msg = log :info, 'info level message'
|
399
|
+
assert_equal LEVEL_LABEL_MAP[Logger::INFO], msg.severity
|
400
|
+
|
401
|
+
@logger.level = Logger::UNKNOWN
|
402
|
+
msg = log :info, 'info level message'
|
403
|
+
assert_equal '', msg.line
|
404
|
+
|
405
|
+
@logger.level = Logger::FATAL
|
406
|
+
msg = log :info, 'info level message'
|
407
|
+
assert_equal '', msg.line
|
408
|
+
|
409
|
+
@logger.level = Logger::ERROR
|
410
|
+
msg = log :info, 'info level message'
|
411
|
+
assert_equal '', msg.line
|
412
|
+
|
413
|
+
@logger.level = Logger::WARN
|
414
|
+
msg = log :info, 'info level message'
|
415
|
+
assert_equal '', msg.line
|
416
|
+
|
417
|
+
@logger.level = Logger::INFO
|
418
|
+
msg = log :info, 'info level message'
|
419
|
+
assert_equal LEVEL_LABEL_MAP[Logger::INFO], msg.severity
|
420
|
+
|
421
|
+
@logger.level = Logger::DEBUG
|
422
|
+
msg = log :info, 'info level message'
|
423
|
+
assert_equal LEVEL_LABEL_MAP[Logger::INFO], msg.severity
|
424
|
+
end
|
425
|
+
|
426
|
+
def test_info_eh
|
427
|
+
@logger.level = Logger::INFO
|
428
|
+
assert_equal true, @logger.info?
|
429
|
+
|
430
|
+
@logger.level = Logger::WARN
|
431
|
+
assert_equal false, @logger.info?
|
432
|
+
end
|
433
|
+
|
434
|
+
def test_debug
|
435
|
+
msg = log :debug, 'debug level message'
|
436
|
+
assert_equal LEVEL_LABEL_MAP[Logger::DEBUG], msg.severity
|
437
|
+
|
438
|
+
@logger.level = Logger::UNKNOWN
|
439
|
+
msg = log :debug, 'debug level message'
|
440
|
+
assert_equal '', msg.line
|
441
|
+
|
442
|
+
@logger.level = Logger::FATAL
|
443
|
+
msg = log :debug, 'debug level message'
|
444
|
+
assert_equal '', msg.line
|
445
|
+
|
446
|
+
@logger.level = Logger::ERROR
|
447
|
+
msg = log :debug, 'debug level message'
|
448
|
+
assert_equal '', msg.line
|
449
|
+
|
450
|
+
@logger.level = Logger::WARN
|
451
|
+
msg = log :debug, 'debug level message'
|
452
|
+
assert_equal '', msg.line
|
453
|
+
|
454
|
+
@logger.level = Logger::INFO
|
455
|
+
msg = log :debug, 'debug level message'
|
456
|
+
assert_equal '', msg.line
|
457
|
+
|
458
|
+
@logger.level = Logger::DEBUG
|
459
|
+
msg = log :debug, 'debug level message'
|
460
|
+
assert_equal LEVEL_LABEL_MAP[Logger::DEBUG], msg.severity
|
461
|
+
end
|
462
|
+
|
463
|
+
def test_debug_eh
|
464
|
+
@logger.level = Logger::DEBUG
|
465
|
+
assert_equal true, @logger.debug?
|
466
|
+
|
467
|
+
@logger.level = Logger::INFO
|
468
|
+
assert_equal false, @logger.debug?
|
469
|
+
end
|
470
|
+
|
471
|
+
end if defined?(Syslog)
|
472
|
+
|
473
|
+
class TestSyslogLogger < TestSyslogRootLogger
|
474
|
+
|
475
|
+
def setup
|
476
|
+
super
|
477
|
+
@logger = Syslog::Logger.new
|
478
|
+
end
|
479
|
+
|
480
|
+
SEVERITY_MAP = {}.tap { |map|
|
481
|
+
level2severity = Syslog::Logger::LEVEL_MAP.invert
|
482
|
+
|
483
|
+
MockSyslog::LEVEL_LABEL_MAP.each { |level, name|
|
484
|
+
map[name] = TestSyslogRootLogger::LEVEL_LABEL_MAP[level2severity[level]]
|
485
|
+
}
|
486
|
+
}
|
487
|
+
|
488
|
+
class Log
|
489
|
+
attr_reader :line, :label, :datetime, :pid, :severity, :progname, :msg
|
490
|
+
def initialize(line)
|
491
|
+
@line = line
|
492
|
+
return unless /\A(\w+) - (.*)\Z/ =~ @line
|
493
|
+
severity, @msg = $1, $2
|
494
|
+
@severity = SEVERITY_MAP[severity]
|
495
|
+
end
|
496
|
+
end
|
497
|
+
|
498
|
+
def log_add(severity, msg, progname = nil, &block)
|
499
|
+
log(:add, severity, msg, progname, &block)
|
500
|
+
end
|
501
|
+
|
502
|
+
def log(msg_id, *arg, &block)
|
503
|
+
Log.new(log_raw(msg_id, *arg, &block))
|
504
|
+
end
|
505
|
+
|
506
|
+
def log_raw(msg_id, *arg, &block)
|
507
|
+
assert_equal true, @logger.__send__(msg_id, *arg, &block)
|
508
|
+
msg = MockSyslog.line
|
509
|
+
MockSyslog.reset
|
510
|
+
return msg
|
511
|
+
end
|
512
|
+
|
513
|
+
def test_unknown_eh
|
514
|
+
@logger.level = Logger::UNKNOWN
|
515
|
+
assert_equal true, @logger.unknown?
|
516
|
+
|
517
|
+
@logger.level = Logger::UNKNOWN + 1
|
518
|
+
assert_equal false, @logger.unknown?
|
519
|
+
end
|
520
|
+
|
521
|
+
end if defined?(Syslog)
|
metadata
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ssherman-sysloglogger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Erik Hodel
|
9
|
+
- Shane Sherman
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2012-12-07 00:00:00.000000000 Z
|
14
|
+
dependencies: []
|
15
|
+
description: wrapper around syslog that's rails friendly. Forked and added ability
|
16
|
+
to set options
|
17
|
+
email: shane.sherman@gmail.com
|
18
|
+
executables: []
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files:
|
21
|
+
- README.txt
|
22
|
+
files:
|
23
|
+
- History.txt
|
24
|
+
- Manifest.txt
|
25
|
+
- README.txt
|
26
|
+
- Rakefile
|
27
|
+
- VERSION
|
28
|
+
- lib/analyzer_tools/syslog_logger.rb
|
29
|
+
- lib/syslog/logger.rb
|
30
|
+
- lib/sysloglogger.rb
|
31
|
+
- test/test_syslog_logger.rb
|
32
|
+
homepage: http://github.com/ssherman/sysloglogger
|
33
|
+
licenses: []
|
34
|
+
post_install_message:
|
35
|
+
rdoc_options: []
|
36
|
+
require_paths:
|
37
|
+
- lib
|
38
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
45
|
+
none: false
|
46
|
+
requirements:
|
47
|
+
- - ! '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
requirements: []
|
51
|
+
rubyforge_project:
|
52
|
+
rubygems_version: 1.8.24
|
53
|
+
signing_key:
|
54
|
+
specification_version: 3
|
55
|
+
summary: wrapper around syslog that's rails friendly
|
56
|
+
test_files: []
|