syslog-logger 1.6.7 → 1.6.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []