logging 0.5.3 → 0.6.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 +7 -0
- data/Manifest.txt +12 -7
- data/Rakefile +4 -1
- data/data/logging.yaml +1 -1
- data/lib/logging.rb +4 -17
- data/lib/logging/appender.rb +23 -16
- data/lib/logging/appenders/console.rb +3 -5
- data/lib/logging/appenders/email.rb +127 -0
- data/lib/logging/appenders/file.rb +27 -15
- data/lib/logging/appenders/growl.rb +33 -56
- data/lib/logging/appenders/io.rb +16 -11
- data/lib/logging/appenders/rolling_file.rb +94 -31
- data/lib/logging/appenders/syslog.rb +32 -46
- data/lib/logging/layout.rb +5 -3
- data/lib/logging/layouts/pattern.rb +6 -6
- data/lib/logging/utils.rb +44 -0
- data/{tasks → rakelib}/doc.rake +2 -2
- data/{tasks → rakelib}/gem.rake +3 -3
- data/{tasks → rakelib}/manifest.rake +0 -0
- data/{tasks → rakelib}/rubyforge.rake +0 -0
- data/{tasks → rakelib}/setup.rb +1 -4
- data/{tasks → rakelib}/test.rake +0 -0
- data/{tasks → rakelib}/website.rake +0 -0
- data/test/appenders/test_email.rb +165 -0
- data/test/appenders/test_file.rb +13 -14
- data/test/appenders/test_growl.rb +115 -0
- data/test/appenders/test_io.rb +5 -3
- data/test/appenders/test_rolling_file.rb +3 -9
- data/test/appenders/test_syslog.rb +4 -8
- data/test/config/test_yaml_configurator.rb +1 -5
- data/test/setup.rb +14 -2
- data/test/test_appender.rb +14 -4
- data/test/test_logging.rb +2 -15
- data/test/test_utils.rb +49 -0
- metadata +86 -53
data/History.txt
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
== 0.6.0 / 2007-12-26
|
2
|
+
|
3
|
+
* Using the new 'getopt' method for handling option hashes
|
4
|
+
* Rolling file appender is safe for multiple processes
|
5
|
+
* Added an e-mail appender from Jeremy Hinegardner
|
6
|
+
* Updated tests for the appenders
|
7
|
+
|
1
8
|
== 0.5.3 / 2007-12-08
|
2
9
|
|
3
10
|
* Fixed the quoting for messages sent to the growl appender
|
data/Manifest.txt
CHANGED
@@ -6,6 +6,7 @@ data/logging.yaml
|
|
6
6
|
lib/logging.rb
|
7
7
|
lib/logging/appender.rb
|
8
8
|
lib/logging/appenders/console.rb
|
9
|
+
lib/logging/appenders/email.rb
|
9
10
|
lib/logging/appenders/file.rb
|
10
11
|
lib/logging/appenders/growl.rb
|
11
12
|
lib/logging/appenders/io.rb
|
@@ -20,15 +21,18 @@ lib/logging/log_event.rb
|
|
20
21
|
lib/logging/logger.rb
|
21
22
|
lib/logging/repository.rb
|
22
23
|
lib/logging/root_logger.rb
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
lib/logging/utils.rb
|
25
|
+
rakelib/doc.rake
|
26
|
+
rakelib/gem.rake
|
27
|
+
rakelib/manifest.rake
|
28
|
+
rakelib/rubyforge.rake
|
29
|
+
rakelib/setup.rb
|
30
|
+
rakelib/test.rake
|
31
|
+
rakelib/website.rake
|
30
32
|
test/appenders/test_console.rb
|
33
|
+
test/appenders/test_email.rb
|
31
34
|
test/appenders/test_file.rb
|
35
|
+
test/appenders/test_growl.rb
|
32
36
|
test/appenders/test_io.rb
|
33
37
|
test/appenders/test_rolling_file.rb
|
34
38
|
test/appenders/test_syslog.rb
|
@@ -44,3 +48,4 @@ test/test_logger.rb
|
|
44
48
|
test/test_logging.rb
|
45
49
|
test/test_repository.rb
|
46
50
|
test/test_root_logger.rb
|
51
|
+
test/test_utils.rb
|
data/Rakefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# $Id$
|
2
2
|
|
3
|
-
load '
|
3
|
+
load 'rakelib/setup.rb'
|
4
4
|
ensure_in_path 'lib'
|
5
5
|
|
6
6
|
require 'logging'
|
@@ -26,4 +26,7 @@ PROJ.exclude << '^(\.\/|\/)?tags$'
|
|
26
26
|
PROJ.rdoc_exclude << '^(\.\/|\/)?data'
|
27
27
|
PROJ.rdoc_exclude << '^(\.\/|\/)?website'
|
28
28
|
|
29
|
+
depend_on 'flexmock'
|
30
|
+
depend_on 'lockfile'
|
31
|
+
|
29
32
|
# EOF
|
data/data/logging.yaml
CHANGED
data/lib/logging.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
# $Id: logging.rb
|
1
|
+
# $Id: logging.rb 65 2007-12-23 04:48:55Z tim_pease $
|
2
2
|
|
3
|
+
require 'logging/utils'
|
3
4
|
require 'logging/repository'
|
4
5
|
|
5
6
|
# require all appenders
|
6
7
|
require 'logging/appenders/console'
|
8
|
+
require 'logging/appenders/email'
|
7
9
|
require 'logging/appenders/file'
|
8
10
|
require 'logging/appenders/growl'
|
9
11
|
require 'logging/appenders/rolling_file'
|
@@ -22,7 +24,7 @@ require 'logging/config/yaml_configurator'
|
|
22
24
|
#
|
23
25
|
module Logging
|
24
26
|
|
25
|
-
VERSION = '0.
|
27
|
+
VERSION = '0.6.0' # :nodoc:
|
26
28
|
|
27
29
|
LEVELS = {} # :nodoc:
|
28
30
|
LNAMES = {} # :nodoc:
|
@@ -242,21 +244,6 @@ module Logging
|
|
242
244
|
when 'off'; LEVELS.length
|
243
245
|
else begin; Integer(l); rescue ArgumentError; LEVELS[l] end end
|
244
246
|
end
|
245
|
-
|
246
|
-
# Helper method for retrieving options from a hash.
|
247
|
-
def options( opts = {} )
|
248
|
-
lambda do |*args|
|
249
|
-
keys, default, ignored = args
|
250
|
-
catch(:opt) do
|
251
|
-
Array(keys).each do |key|
|
252
|
-
[key, key.to_s, key.to_s.intern].each do |k|
|
253
|
-
throw :opt, opts[k] if opts.has_key?(k)
|
254
|
-
end
|
255
|
-
end
|
256
|
-
default
|
257
|
-
end
|
258
|
-
end
|
259
|
-
end
|
260
247
|
# :startdoc:
|
261
248
|
end
|
262
249
|
|
data/lib/logging/appender.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: appender.rb
|
1
|
+
# $Id: appender.rb 67 2007-12-26 16:27:06Z tim_pease $
|
2
2
|
|
3
3
|
require 'thread'
|
4
4
|
require 'logging'
|
@@ -38,14 +38,12 @@ module Logging
|
|
38
38
|
@name = name.to_s
|
39
39
|
@closed = false
|
40
40
|
|
41
|
-
layout = opts
|
42
|
-
self.
|
43
|
-
@layout ||= ::Logging::Layouts::Basic.new
|
44
|
-
|
45
|
-
self.level = opts[:level] || opts['level']
|
41
|
+
self.layout = opts.getopt(:layout, ::Logging::Layouts::Basic.new)
|
42
|
+
self.level = opts.getopt(:level)
|
46
43
|
|
47
44
|
@mutex = Mutex.new
|
48
|
-
|
45
|
+
header = @layout.header
|
46
|
+
sync {write(header, false)} unless header.nil? || header.empty?
|
49
47
|
|
50
48
|
::Logging::Appender[@name] = self
|
51
49
|
end
|
@@ -62,7 +60,7 @@ module Logging
|
|
62
60
|
"appender '<#{self.class.name}: #{@name}>' is closed"
|
63
61
|
end
|
64
62
|
|
65
|
-
sync {write(
|
63
|
+
sync {write(event, true)} unless @level > event.level
|
66
64
|
self
|
67
65
|
end
|
68
66
|
|
@@ -78,7 +76,7 @@ module Logging
|
|
78
76
|
"appender '<#{self.class.name}: #{@name}>' is closed"
|
79
77
|
end
|
80
78
|
|
81
|
-
sync {write(str)}
|
79
|
+
sync {write(str, false)} unless @level >= ::Logging::LEVELS.length
|
82
80
|
self
|
83
81
|
end
|
84
82
|
|
@@ -148,7 +146,7 @@ module Logging
|
|
148
146
|
def close( footer = true )
|
149
147
|
return self if @closed
|
150
148
|
@closed = true
|
151
|
-
sync {write(@layout.footer)} if footer
|
149
|
+
sync {write(@layout.footer, false)} if footer
|
152
150
|
self
|
153
151
|
end
|
154
152
|
|
@@ -159,7 +157,9 @@ module Logging
|
|
159
157
|
# otherwise. When an appender is closed, no more log events can be
|
160
158
|
# written to the logging destination.
|
161
159
|
#
|
162
|
-
def closed?
|
160
|
+
def closed?
|
161
|
+
@closed
|
162
|
+
end
|
163
163
|
|
164
164
|
# call-seq:
|
165
165
|
# flush
|
@@ -167,18 +167,25 @@ module Logging
|
|
167
167
|
# Call +flush+ to force an appender to write out any buffered log events.
|
168
168
|
# Similar to IO#flush, so use in a similar fashion.
|
169
169
|
#
|
170
|
-
def flush
|
170
|
+
def flush
|
171
|
+
self
|
172
|
+
end
|
171
173
|
|
172
174
|
|
173
175
|
private
|
174
176
|
|
175
177
|
# call-seq:
|
176
|
-
# write(
|
178
|
+
# write( event, do_layout = true )
|
177
179
|
#
|
178
|
-
# Writes the given
|
179
|
-
# provide an implementation of this method.
|
180
|
+
# Writes the given _event_ to the logging destination. Subclasses should
|
181
|
+
# provide an implementation of this method. If the _do_layout_ flag is
|
182
|
+
# set to +true+, then the event will be formatted using the configured
|
183
|
+
# layout object. If set to false, then the event will be stringiied and
|
184
|
+
# appended to the logging destination.
|
180
185
|
#
|
181
|
-
def write(
|
186
|
+
def write( event, do_layout = true )
|
187
|
+
nil
|
188
|
+
end
|
182
189
|
|
183
190
|
# call-seq:
|
184
191
|
# sync { block }
|
@@ -1,9 +1,8 @@
|
|
1
|
-
# $Id: console.rb
|
1
|
+
# $Id: console.rb 65 2007-12-23 04:48:55Z tim_pease $
|
2
2
|
|
3
3
|
require 'logging/appenders/io'
|
4
4
|
|
5
|
-
module Logging
|
6
|
-
module Appenders
|
5
|
+
module Logging::Appenders
|
7
6
|
|
8
7
|
# This class provides an Appender that can write to STDOUT.
|
9
8
|
#
|
@@ -39,7 +38,6 @@ module Appenders
|
|
39
38
|
end
|
40
39
|
end # class Stderr
|
41
40
|
|
42
|
-
end # module Appenders
|
43
|
-
end # module Logging
|
41
|
+
end # module Logging::Appenders
|
44
42
|
|
45
43
|
# EOF
|
@@ -0,0 +1,127 @@
|
|
1
|
+
# $Id: email.rb 68 2007-12-26 18:45:34Z tim_pease $
|
2
|
+
|
3
|
+
require 'net/smtp'
|
4
|
+
require 'time' # get rfc822 time format
|
5
|
+
|
6
|
+
# a replacement EmailOutputter. This is essentially the default EmailOutptter from Log4r but with the following
|
7
|
+
# changes:
|
8
|
+
# 1) if there is data to send in an email, then do not send anything
|
9
|
+
# 2) connect to the smtp server at the last minute, do not connect at startup and then send later on.
|
10
|
+
# 3) Fix the To: field so that it looks alright.
|
11
|
+
module Logging::Appenders
|
12
|
+
|
13
|
+
class Email < ::Logging::Appender
|
14
|
+
|
15
|
+
attr_reader :server, :port, :domain, :acct, :authtype, :subject
|
16
|
+
|
17
|
+
def initialize( name, opts = {} )
|
18
|
+
super(name, opts)
|
19
|
+
|
20
|
+
@buff = []
|
21
|
+
@buffsize = opts.getopt :buffsize, 100, :as => Integer
|
22
|
+
|
23
|
+
# get the immediate levels -- no buffering occurs at these levels, and
|
24
|
+
# an e-mail is sent as soon as possible
|
25
|
+
@immediate = []
|
26
|
+
opts.getopt(:immediate_at, '').split(',').each do |lvl|
|
27
|
+
num = ::Logging.level_num(lvl.strip)
|
28
|
+
next if num.nil?
|
29
|
+
@immediate[num] = true
|
30
|
+
end
|
31
|
+
|
32
|
+
# get the SMTP parameters
|
33
|
+
@from = opts.getopt(:from)
|
34
|
+
raise ArgumentError, 'Must specify from address' if @from.nil?
|
35
|
+
|
36
|
+
@to = opts.getopt(:to, '').split(',')
|
37
|
+
raise ArgumentError, 'Must specify recipients' if @to.empty?
|
38
|
+
|
39
|
+
@server = opts.getopt :server, 'localhost'
|
40
|
+
@port = opts.getopt :port, 25, :as => Integer
|
41
|
+
@domain = opts.getopt :domain, ENV['HOSTNAME']
|
42
|
+
@acct = opts.getopt :acct
|
43
|
+
@passwd = opts.getopt :passwd
|
44
|
+
@authtype = opts.getopt :authtype, :cram_md5, :as => Symbol
|
45
|
+
@subject = opts.getopt :subject, "Message of #{$0}"
|
46
|
+
@params = [@server, @port, @domain, @acct, @passwd, @authtype]
|
47
|
+
end
|
48
|
+
|
49
|
+
# call-seq:
|
50
|
+
# flush
|
51
|
+
#
|
52
|
+
# Create and send an email containing the current message buffer.
|
53
|
+
#
|
54
|
+
def flush
|
55
|
+
sync { send_mail }
|
56
|
+
self
|
57
|
+
end
|
58
|
+
|
59
|
+
# call-seq:
|
60
|
+
# close( footer = true )
|
61
|
+
#
|
62
|
+
# Close the e-mail appender and then flush the message buffer. This will
|
63
|
+
# ensure that a final e-mail is sent with any remaining messages.
|
64
|
+
#
|
65
|
+
def close( footer = true )
|
66
|
+
super
|
67
|
+
flush
|
68
|
+
end
|
69
|
+
|
70
|
+
# cal-seq:
|
71
|
+
# queued_messages => integer
|
72
|
+
#
|
73
|
+
# Returns the number of messages in the buffer.
|
74
|
+
#
|
75
|
+
def queued_messages
|
76
|
+
@buff.length
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
# call-seq:
|
83
|
+
# write( event, do_layout = true )
|
84
|
+
#
|
85
|
+
# Write the given _event_ to the e-mail message buffer. The log event will
|
86
|
+
# be processed through the Layout associated with this appender.
|
87
|
+
#
|
88
|
+
# If the _do_layout_ flag is set to false, the _event_ will be converted
|
89
|
+
# to a string and then written to the e-mail message buffer "as is" -- no
|
90
|
+
# layout formatting will be performed.
|
91
|
+
#
|
92
|
+
def write( event, do_layout = true )
|
93
|
+
str = do_layout ? @layout.format(event) : event.to_s
|
94
|
+
@buff << str
|
95
|
+
send_mail if @buff.length >= @buffsize ||
|
96
|
+
(do_layout && @immediate[event.level])
|
97
|
+
self
|
98
|
+
end
|
99
|
+
|
100
|
+
# Connect to the mail server and send out any buffered messages.
|
101
|
+
#
|
102
|
+
def send_mail
|
103
|
+
return if @buff.empty?
|
104
|
+
|
105
|
+
### build a mail header for RFC 822
|
106
|
+
rfc822msg = "From: #{@from}\n"
|
107
|
+
rfc822msg << "To: #{@to.join(",")}\n"
|
108
|
+
rfc822msg << "Subject: #{@subject}\n"
|
109
|
+
rfc822msg << "Date: #{Time.new.rfc822}\n"
|
110
|
+
rfc822msg << "Message-Id: <#{"%.8f" % Time.now.to_f}@#{@domain}>\n\n"
|
111
|
+
rfc822msg << @buff.join
|
112
|
+
|
113
|
+
### send email
|
114
|
+
begin
|
115
|
+
Net::SMTP.start(*@params) {|smtp| smtp.sendmail(rfc822msg, @from, @to)}
|
116
|
+
rescue Exception => e
|
117
|
+
self.level = :off
|
118
|
+
# TODO - log that e-mail notification has been turned off
|
119
|
+
ensure
|
120
|
+
@buff.clear
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
end # class Email
|
125
|
+
end # module Logging::Appenders
|
126
|
+
|
127
|
+
# EOF
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: file.rb
|
1
|
+
# $Id: file.rb 62 2007-12-22 20:37:05Z tim_pease $
|
2
2
|
|
3
3
|
require 'logging/appenders/io'
|
4
4
|
|
@@ -8,6 +8,29 @@ module Logging::Appenders
|
|
8
8
|
#
|
9
9
|
class File < ::Logging::Appenders::IO
|
10
10
|
|
11
|
+
# call-seq:
|
12
|
+
# File.assert_valid_logfile( filename ) => true
|
13
|
+
#
|
14
|
+
# Asserts that the given _filename_ can be used as a log file by ensuring
|
15
|
+
# that if the file exists it is a regular file and it is writable. If
|
16
|
+
# the file does not exist, then the directory is checked to see if it is
|
17
|
+
# writable.
|
18
|
+
#
|
19
|
+
# An +ArgumentError+ is raised if any of these assertions fail.
|
20
|
+
#
|
21
|
+
def self.assert_valid_logfile( fn )
|
22
|
+
if ::File.exist?(fn)
|
23
|
+
if not ::File.file?(fn)
|
24
|
+
raise ArgumentError, "#{fn} is not a regular file"
|
25
|
+
elsif not ::File.writable?(fn)
|
26
|
+
raise ArgumentError, "#{fn} is not writeable"
|
27
|
+
end
|
28
|
+
elsif not ::File.writable?(::File.dirname(fn))
|
29
|
+
raise ArgumentError, "#{::File.dirname(fn)} is not writable"
|
30
|
+
end
|
31
|
+
true
|
32
|
+
end
|
33
|
+
|
11
34
|
# call-seq:
|
12
35
|
# File.new( name, :filename => 'file' )
|
13
36
|
# File.new( name, :filename => 'file', :truncate => true )
|
@@ -20,21 +43,10 @@ module Logging::Appenders
|
|
20
43
|
# appened to the file.
|
21
44
|
#
|
22
45
|
def initialize( name, opts = {} )
|
23
|
-
@fn = opts.
|
46
|
+
@fn = opts.getopt(:filename, name)
|
24
47
|
raise ArgumentError, 'no filename was given' if @fn.nil?
|
25
|
-
|
26
|
-
mode = opts.
|
27
|
-
mode = mode ? 'w' : 'a'
|
28
|
-
|
29
|
-
if ::File.exist?(@fn)
|
30
|
-
if not ::File.file?(@fn)
|
31
|
-
raise ArgumentError, "#{@fn} is not a regular file"
|
32
|
-
elsif not ::File.writable?(@fn)
|
33
|
-
raise ArgumentError, "#{@fn} is not writeable"
|
34
|
-
end
|
35
|
-
elsif not ::File.writable?(::File.dirname(@fn))
|
36
|
-
raise ArgumentError, "#{::File.dirname(@fn)} is not writable"
|
37
|
-
end
|
48
|
+
self.class.assert_valid_logfile(@fn)
|
49
|
+
mode = opts.getopt(:truncate) ? 'w' : 'a'
|
38
50
|
|
39
51
|
super(name, ::File.new(@fn, mode), opts)
|
40
52
|
end
|
@@ -1,9 +1,8 @@
|
|
1
|
-
# $Id: growl.rb
|
1
|
+
# $Id: growl.rb 69 2007-12-26 20:53:33Z tim_pease $
|
2
2
|
|
3
3
|
require 'logging/appender'
|
4
4
|
|
5
|
-
module Logging
|
6
|
-
module Appenders
|
5
|
+
module Logging::Appenders
|
7
6
|
|
8
7
|
# This class provides an Appender that can send notifications to the Growl
|
9
8
|
# notification system on Mac OS X.
|
@@ -24,18 +23,22 @@ module Appenders
|
|
24
23
|
|
25
24
|
@growl = "growlnotify -w -n \"#{@name}\" -t \"%s\" -m \"%s\" -p %d &"
|
26
25
|
|
27
|
-
|
28
|
-
@
|
29
|
-
@title_sep = getopt[:separator]
|
26
|
+
@coalesce = opts.getopt(:coalesce, false)
|
27
|
+
@title_sep = opts.getopt(:separator)
|
30
28
|
|
31
29
|
# provides a mapping from the default Logging levels
|
32
30
|
# to the Growl notification levels
|
33
31
|
@map = [-2, -1, 0, 1, 2]
|
34
32
|
|
35
|
-
map = getopt
|
33
|
+
map = opts.getopt(:map)
|
36
34
|
self.map = map unless map.nil?
|
37
|
-
|
38
35
|
setup_coalescing if @coalesce
|
36
|
+
|
37
|
+
# make sure the growlnotify command can be called
|
38
|
+
unless system('growlnotify -v 2>&1 > /dev/null')
|
39
|
+
self.level = :off
|
40
|
+
# TODO - log that the growl notification is turned off
|
41
|
+
end
|
39
42
|
end
|
40
43
|
|
41
44
|
# call-seq:
|
@@ -62,50 +65,31 @@ module Appenders
|
|
62
65
|
@map = map
|
63
66
|
end
|
64
67
|
|
65
|
-
# call-seq:
|
66
|
-
# append( event )
|
67
|
-
#
|
68
|
-
# Send the given _event_ to the Growl framework. The log event will be
|
69
|
-
# processed through the Layout assciated with this appender. The message
|
70
|
-
# will be logged at the level specified by the event.
|
71
|
-
#
|
72
|
-
def append( event )
|
73
|
-
if closed?
|
74
|
-
raise RuntimeError,
|
75
|
-
"appender '<#{self.class.name}: #{@name}>' is closed"
|
76
|
-
end
|
77
|
-
|
78
|
-
sync do
|
79
|
-
title = ''
|
80
|
-
message = @layout.format(event)
|
81
|
-
priority = @map[event.level]
|
82
68
|
|
83
|
-
|
84
|
-
title, message = message.split(@title_sep)
|
85
|
-
title, message = '', title if message.nil?
|
86
|
-
title.strip!
|
87
|
-
end
|
88
|
-
|
89
|
-
growl(title, message, priority)
|
90
|
-
end unless @level > event.level
|
91
|
-
self
|
92
|
-
end
|
69
|
+
private
|
93
70
|
|
94
71
|
# call-seq:
|
95
|
-
#
|
72
|
+
# write( event, do_layout = true )
|
96
73
|
#
|
97
|
-
# Write the given
|
98
|
-
#
|
99
|
-
#
|
74
|
+
# Write the given _event_ to the growl notification facility. The log
|
75
|
+
# event will be processed through the Layout assciated with this
|
76
|
+
# appender if the _do_layout_ flag is set to +true+. The message will be
|
77
|
+
# logged at the level specified by the event.
|
100
78
|
#
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
79
|
+
# If the _do_layout_ flag is set to +false+, the _event_ will be
|
80
|
+
# converted to a string and wirtten to the growl notification facility
|
81
|
+
# "as is" -- no layout formatting will be performed. The string will be
|
82
|
+
# logged at the 0 notification level of the Growl framework.
|
83
|
+
#
|
84
|
+
def write( event, do_layout = true )
|
107
85
|
title = ''
|
108
|
-
|
86
|
+
priority = 0
|
87
|
+
message = if do_layout
|
88
|
+
priority = @map[event.level]
|
89
|
+
@layout.format(event)
|
90
|
+
else
|
91
|
+
event.to_s
|
92
|
+
end
|
109
93
|
|
110
94
|
if @title_sep
|
111
95
|
title, message = message.split(@title_sep)
|
@@ -113,13 +97,10 @@ module Appenders
|
|
113
97
|
title.strip!
|
114
98
|
end
|
115
99
|
|
116
|
-
|
100
|
+
growl(title, message, priority)
|
117
101
|
self
|
118
102
|
end
|
119
103
|
|
120
|
-
|
121
|
-
private
|
122
|
-
|
123
104
|
# call-seq:
|
124
105
|
# growl_level_num( level ) => integer
|
125
106
|
#
|
@@ -127,10 +108,7 @@ module Appenders
|
|
127
108
|
# corresponding Growl notification level number.
|
128
109
|
#
|
129
110
|
def growl_level_num( level )
|
130
|
-
level =
|
131
|
-
when Integer; level
|
132
|
-
when String; Integer(level)
|
133
|
-
else raise ArgumentError, "unkonwn level '#{level}'" end
|
111
|
+
level = Integer(level)
|
134
112
|
if level < -2 or level > 2
|
135
113
|
raise ArgumentError, "level '#{level}' is not in range -2..2"
|
136
114
|
end
|
@@ -205,7 +183,6 @@ module Appenders
|
|
205
183
|
|
206
184
|
end # class Growl
|
207
185
|
|
208
|
-
end # module Appenders
|
209
|
-
end # module Logging
|
186
|
+
end # module Logging::Appenders
|
210
187
|
|
211
188
|
# EOF
|