formatted_rails_logger 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -2,11 +2,13 @@
2
2
 
3
3
  Monkey-patches Rails BufferedLogger (the standard Rails logger) to accept a formatter just like ruby Logger does. Provides a formatter that includes timestamp and severity in logs, while taking account of Rails habit of making space in the logfile by adding newlines to the beginning of log message.
4
4
 
5
- It's only 80 lines of verbose code. I'd think a bazillion people would have done this before, but I didn't see any other gems to do it simply and flexibly, sorry for any duplication.
5
+ It's only 80 lines of verbose code. (yes, this readme is longer than the source) I'd think a bazillion people would have done this before, but I didn't see any other gems to do it simply and flexibly, sorry for any duplication.
6
6
 
7
7
  ## How to use
8
8
 
9
- Should work for both Rails2 and Rails3.
9
+ Version 0.1.0 should work for both Rails2 and Rails 3.0.x - 3.1.x
10
+
11
+ Version 0.2.0 for Rails 3.2.0 -- will future versions of Rails 3.2.x again change internal logger implementation to break this? Who knows! Why doesn't Rails just support #formatter for us? Who knows! At least 3.2.0 made it a lot easier to patch in, with an internal stdlib Logger at the bottom of things.
10
12
 
11
13
  Include the formatted_rails_logger gem in your project as appropriate for your Rails version.
12
14
 
@@ -45,9 +47,9 @@ I did use a regexp to look for newlines at the very beginning of a log message,
45
47
 
46
48
  * Why has Rails always thought it better to exclude timestamps and severity from logfiles? Me, I need to be able to grep logfiles for "ERROR" or "FATAL" or "WARN" to see how my app's doing, and I need to be able to have timestamps to correlate human observed problems to the logs. Am I really alone here?
47
49
 
48
- * Why does Rails BufferedLogger not provide the same formatter functionality a usual ruby Logger, either by sub-classing Logger, or duck-typing the formatter functionality too?
50
+ * Why does Rails BufferedLogger not provide the same #formatter functionality as ruby Logger, either by sub-classing Logger, or duck-typing the formatter functionality too? (But, hey, it's better than Rails <=2.2, where Rails monkey patched ruby Logger to ignore it's #formatter, huh?)
49
51
 
50
- * Why does ruby 1.8.7 Time.strftime not accept an %L formatting string, even though the [documentation](http://www.ruby-doc.org/core/classes/Time.html#M000392) says it should? Did they fix this in 1.9? I don't know.
52
+ * Why does ruby 1.8.7 Time.strftime not accept an %L formatting string, even though the [documentation](http://www.ruby-doc.org/core/classes/Time.html#M000392) says it should? Did they fix this in 1.9? I don't know. For that matter, why does ruby Time give you a method to get microseconds, but a not method to get miliseconds?
51
53
 
52
54
  ## Things I didn't do
53
55
 
@@ -11,6 +11,8 @@ Gem::Specification.new do |s|
11
11
  s.summary = %q{Formatting capabilities for Rails BufferedLogger}
12
12
 
13
13
  s.rubyforge_project = "formatted_rails_logger"
14
+
15
+ s.add_dependency "rails", "~> 3.2.0"
14
16
 
15
17
  s.files = `git ls-files`.split("\n")
16
18
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -2,50 +2,29 @@
2
2
  # doing this rather than declaring Rails a dependency.
3
3
  ActiveSupport::BufferedLogger.class
4
4
 
5
+ # Rails 3.2 BufferedLogger has an internal @logger with a stdlib rails
6
+ # logger, but it doesn't expose ability to set a formatter. We've just
7
+ # got to do that, no problem.
5
8
  class ActiveSupport::BufferedLogger
6
9
  attr_accessor :formatter
7
10
  # use pure ruby class method, Rails provides ones with
8
11
  # better semantics for inheritance, but they keep changing
9
12
  # version to version, so nope.
10
13
  class << self ; attr_accessor :default_formatter ; end
11
-
12
-
13
-
14
-
15
- # Have to over-ride/replace BufferedLogger's usual #add
16
- # to use formatter
17
- def add(severity, message = nil, progname = nil, &block)
18
- return if @level > severity
19
- message = (message || (block && block.call) || progname).to_s
20
-
21
- # our custom formatting
22
- message = format_message(format_severity(severity), Time.now, progname, message)
23
-
24
- # If a newline is necessary then create a new message ending with a newline.
25
- # Ensures that the original message is not mutated.
26
- message = "#{message}\n" unless message[-1] == ?\n
27
- buffer << message
28
- auto_flush
29
- message
14
+
15
+ def initialize(*args)
16
+ super(*args)
17
+ @log.formatter = self.class.default_formatter if self.class.default_formatter
30
18
  end
31
19
 
32
- protected
33
-
34
- # why does BufferedLogger not give us a way to translate from integer
35
- # constant to actual severity lable? argh. copied from Logger
36
- # Severity label for logging. (max 5 char)
37
- SEV_LABEL = %w(DEBUG INFO WARN ERROR FATAL UNKNOWN)
38
- def format_severity(severity)
39
- SEV_LABEL[severity] || 'UNKNOWN'
20
+ def formatter=(formatter)
21
+ @log.formatter = formatter
40
22
  end
41
23
 
42
- def format_message(severity, datetime, progname, msg)
43
- if formatter = (@formatter || self.class.default_formatter)
44
- formatter.call(severity, datetime, progname, msg)
45
- else
46
- msg
47
- end
24
+ def formatter
25
+ @log.formatter
48
26
  end
27
+
49
28
 
50
29
  end
51
30
 
@@ -7,7 +7,11 @@ class FormattedRailsLogger::Formatter
7
7
  @@format_str = "[%s] %5s %s"
8
8
  @@datetime_format = nil
9
9
 
10
- def call(severity, time, progname, msg)
10
+ def call(severity, time, progname, msg)
11
+ # Rails 3.2 seems to automatically add a newline, for consistency
12
+ # we will too.
13
+ msg += "\n"
14
+
11
15
  # see no need for micro-seconds like in Logger, milis suffices.
12
16
  # No idea why documented %L and other such useful things
13
17
  # do not work in strftime.
@@ -1,3 +1,3 @@
1
1
  module FormattedRailsLogger
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,34 +1,34 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: formatted_rails_logger
3
- version: !ruby/object:Gem::Version
4
- hash: 27
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 0
10
- version: 0.1.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Jonathan Rochkind
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-08-04 00:00:00 -04:00
19
- default_executable:
20
- dependencies: []
21
-
12
+ date: 2012-01-25 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: &244305560 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *244305560
22
25
  description:
23
- email:
26
+ email:
24
27
  - jonathan@dnil.net
25
28
  executables: []
26
-
27
29
  extensions: []
28
-
29
30
  extra_rdoc_files: []
30
-
31
- files:
31
+ files:
32
32
  - .gitignore
33
33
  - Gemfile
34
34
  - README.markdown
@@ -38,39 +38,28 @@ files:
38
38
  - lib/formatted_rails_logger/buffered_logger_inject.rb
39
39
  - lib/formatted_rails_logger/formatter.rb
40
40
  - lib/formatted_rails_logger/version.rb
41
- has_rdoc: true
42
41
  homepage: https://github.com/jrochkind/formatted_rails_logger
43
42
  licenses: []
44
-
45
43
  post_install_message:
46
44
  rdoc_options: []
47
-
48
- require_paths:
45
+ require_paths:
49
46
  - lib
50
- required_ruby_version: !ruby/object:Gem::Requirement
47
+ required_ruby_version: !ruby/object:Gem::Requirement
51
48
  none: false
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- hash: 3
56
- segments:
57
- - 0
58
- version: "0"
59
- required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
54
  none: false
61
- requirements:
62
- - - ">="
63
- - !ruby/object:Gem::Version
64
- hash: 3
65
- segments:
66
- - 0
67
- version: "0"
55
+ requirements:
56
+ - - ! '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
68
59
  requirements: []
69
-
70
60
  rubyforge_project: formatted_rails_logger
71
- rubygems_version: 1.6.2
61
+ rubygems_version: 1.8.10
72
62
  signing_key:
73
63
  specification_version: 3
74
64
  summary: Formatting capabilities for Rails BufferedLogger
75
65
  test_files: []
76
-