syslog-logger 1.6.7 → 1.6.8

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.
@@ -0,0 +1,40 @@
1
+ # Adds some default information to syslog messages.
2
+ # Log format:
3
+ # [Time.mSec] [SeverityLabel]: message
4
+
5
+ class Logger::SyslogFormatter < Logger::Formatter
6
+ Format = "[%s] [%5s]: %s\n"
7
+
8
+ attr_accessor :datetime_format
9
+
10
+ def initialize
11
+ @datetime_format = nil
12
+ end
13
+
14
+ def call(severity, time, progname, msg)
15
+ Format % [format_datetime(time), severity, msg2str(msg)]
16
+ end
17
+
18
+ protected
19
+
20
+ def format_datetime(time)
21
+ if @datetime_format.nil?
22
+ time.strftime("%H:%M:%S.") << "%06d " % time.usec
23
+ else
24
+ time.strftime(@datetime_format)
25
+ end
26
+ end
27
+
28
+ def msg2str(msg)
29
+ case msg
30
+ when ::String
31
+ msg
32
+ when ::Exception
33
+ "#{ msg.message } (#{ msg.class })\n" <<
34
+ (msg.backtrace || []).join("\n")
35
+ else
36
+ msg.inspect
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,161 @@
1
+ require 'syslog'
2
+ require 'logger'
3
+ require 'syslog-formatter'
4
+
5
+ class Logger::Syslog
6
+ include Logger::Severity
7
+
8
+ # The version of Logger::Syslog you are using.
9
+ VERSION = '1.6.8'
10
+
11
+ # From 'man syslog.h':
12
+ # LOG_EMERG A panic condition was reported to all processes.
13
+ # LOG_ALERT A condition that should be corrected immediately.
14
+ # LOG_CRIT A critical condition.
15
+ # LOG_ERR An error message.
16
+ # LOG_WARNING A warning message.
17
+ # LOG_NOTICE A condition requiring special handling.
18
+ # LOG_INFO A general information message.
19
+ # LOG_DEBUG A message useful for debugging programs.
20
+
21
+ # From logger rdoc:
22
+ # FATAL: an unhandleable error that results in a program crash
23
+ # ERROR: a handleable error condition
24
+ # WARN: a warning
25
+ # INFO: generic (useful) information about system operation
26
+ # DEBUG: low-level information for developers
27
+
28
+ # Maps Logger warning types to syslog(3) warning types.
29
+ LOGGER_MAP = {
30
+ :unknown => :alert,
31
+ :fatal => :crit,
32
+ :error => :err,
33
+ :warn => :warning,
34
+ :info => :info,
35
+ :debug => :debug
36
+ }
37
+
38
+ # Maps Logger log levels to their values so we can silence.
39
+ LOGGER_LEVEL_MAP = {}
40
+
41
+ LOGGER_MAP.each_key do |key|
42
+ LOGGER_LEVEL_MAP[key] = Logger.const_get key.to_s.upcase
43
+ end
44
+
45
+ # Maps Logger log level values to syslog log levels.
46
+ LEVEL_LOGGER_MAP = {}
47
+
48
+ LOGGER_LEVEL_MAP.invert.each do |level, severity|
49
+ LEVEL_LOGGER_MAP[level] = LOGGER_MAP[severity]
50
+ end
51
+
52
+ # Builds a methods for level +meth+.
53
+ for severity in Logger::Severity.constants
54
+ class_eval <<-EOT, __FILE__, __LINE__
55
+ def #{severity.downcase}(message = nil, progname = nil, &block) # def debug(message = nil, progname = nil, &block)
56
+ add(#{severity}, message, progname, &block) # add(DEBUG, message, progname, &block)
57
+ end # end
58
+ #
59
+ def #{severity.downcase}? # def debug?
60
+ @level <= #{severity} # @level <= DEBUG
61
+ end # end
62
+ EOT
63
+ end
64
+
65
+ # Log level for Logger compatibility.
66
+ attr_accessor :level
67
+
68
+ # Logging program name.
69
+ attr_accessor :progname
70
+
71
+ # Logging date-time format (string passed to +strftime+).
72
+ def datetime_format=(datetime_format)
73
+ @default_formatter.datetime_format = datetime_format
74
+ end
75
+
76
+ def datetime_format
77
+ @default_formatter.datetime_format
78
+ end
79
+
80
+ # Logging formatter. formatter#call is invoked with 4 arguments; severity,
81
+ # time, progname and msg for each log. Bear in mind that time is a Time and
82
+ # msg is an Object that user passed and it could not be a String. It is
83
+ # expected to return a logdev#write-able Object. Default formatter is used
84
+ # when no formatter is set.
85
+ attr_accessor :formatter
86
+
87
+ alias sev_threshold level
88
+ alias sev_threshold= level=
89
+
90
+ # Fills in variables for Logger compatibility. If this is the first
91
+ # instance of Logger::Syslog, +program_name+ may be set to change the logged
92
+ # program name and +facility+ may be set to specify a custom facility
93
+ # with your syslog daemon.
94
+ #
95
+ # Due to the way syslog works, only one program name may be chosen.
96
+ def initialize(program_name = 'rails', facility = Syslog::LOG_USER, logopts=nil)
97
+ @default_formatter = Logger::SyslogFormatter.new
98
+ @formatter = nil
99
+ @progname = nil
100
+ @level = Logger::DEBUG
101
+
102
+ return if defined? SYSLOG
103
+ self.class.const_set :SYSLOG, Syslog.open(program_name, logopts, facility)
104
+ end
105
+
106
+ # Almost duplicates Logger#add. +progname+ is ignored.
107
+ def add(severity, message = nil, progname = nil, &block)
108
+ severity ||= Logger::UNKNOWN
109
+ if severity < @level
110
+ return true
111
+ end
112
+ if message.nil?
113
+ if block_given?
114
+ message = yield
115
+ else
116
+ message = progname
117
+ progname = @progname
118
+ end
119
+ end
120
+ SYSLOG.send(LEVEL_LOGGER_MAP[severity], format_message(format_severity(severity), Time.now, progname, clean(message)))
121
+ true
122
+ end
123
+
124
+ # Allows messages of a particular log level to be ignored temporarily.
125
+ def silence(temporary_level = Logger::ERROR)
126
+ old_logger_level = @level
127
+ @level = temporary_level
128
+ yield
129
+ ensure
130
+ @level = old_logger_level
131
+ end
132
+
133
+ # In Logger, this dumps the raw message; the closest equivalent
134
+ # would be Logger::UNKNOWN
135
+ def <<(message)
136
+ add(Logger::UNKNOWN, message)
137
+ end
138
+
139
+ private
140
+
141
+ # Severity label for logging. (max 5 char)
142
+ SEV_LABEL = %w(DEBUG INFO WARN ERROR FATAL ANY)
143
+
144
+ def format_severity(severity)
145
+ SEV_LABEL[severity] || 'ANY'
146
+ end
147
+
148
+ def format_message(severity, datetime, progname, msg)
149
+ (@formatter || @default_formatter).call(severity, datetime, progname, msg)
150
+ end
151
+
152
+ # Clean up messages so they're nice and pretty.
153
+ def clean(message)
154
+ message = message.to_s.dup
155
+ message.strip!
156
+ message.gsub!(/%/, '%%') # syslog(3) freaks on % (printf)
157
+ message.gsub!(/\e\[[^m]*m/, '') # remove useless ansi color codes
158
+ return message
159
+ end
160
+
161
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 6
8
- - 7
9
- version: 1.6.7
8
+ - 8
9
+ version: 1.6.8
10
10
  platform: ruby
11
11
  authors:
12
12
  - Eric Hodel; Chris Powell; Matthew Boeh; Ian Lesperance; Dana Danger; Brian Smith; Ashley Martens
@@ -28,6 +28,8 @@ extra_rdoc_files:
28
28
  - README.rdoc
29
29
  files:
30
30
  - README.rdoc
31
+ - lib/syslog-formatter.rb
32
+ - lib/syslog-logger.rb
31
33
  has_rdoc: true
32
34
  homepage: http://github.com/ngmoco/syslog_logger
33
35
  licenses: []