la_logger 0.0.2 → 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/README.md CHANGED
@@ -4,12 +4,13 @@ Require: ruby 1.9.x, fluent-logger (not working on JRuby without modification).
4
4
 
5
5
  ## Concepts
6
6
 
7
- - Initialize a logger object with `label` and log level:
7
+ - Initialize a logger object with `tag` (which becomings collection name for `tag_mapped`
8
+ setting in `fluent.conf`) and log level:
8
9
 
9
10
  class LoggerUser
10
11
  def logger
11
12
  # initialize tag and log level, default level is 'WARN'
12
- LaLogger.new('la.logger.tag', LaLogger::ERROR)
13
+ LaLogger.new('specific_tag', LaLogger::ERROR)
13
14
  end
14
15
 
15
16
  def logger_this
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require 'benchmark'
2
3
 
3
4
  require 'fluent-logger'
@@ -11,17 +12,17 @@ Benchmark.bm do |x|
11
12
  x.report('FluentLogger.new') do
12
13
  n.times do
13
14
  Fluent::Logger::FluentLogger.new(
14
- nil, host: 'localhost', port: 24224
15
- ).post('la.logger1', {error: 'test message'})
15
+ nil, host: 'localhost', port: 24_224
16
+ ).post('la.logger1', { error: 'test message' })
16
17
  end
17
18
  end
18
19
 
19
20
  x.report('FluentLogger preload') do
20
21
  logger = Fluent::Logger::FluentLogger.new(
21
- nil, host: 'localhost', port: 24224
22
+ nil, host: 'localhost', port: 24_224
22
23
  )
23
24
  n.times do
24
- logger.post('la.logger1', {error: 'test message'})
25
+ logger.post('la.logger1', { error: 'test message' })
25
26
  end
26
27
  end
27
28
 
data/la_logger.gemspec CHANGED
@@ -2,8 +2,8 @@ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
2
2
  require 'la_logger/version'
3
3
 
4
4
  Gem::Specification.new 'la_logger', LaLogger::VERSION do |s|
5
- s.description = 'A singleton wrapper for fluent logger object.'
6
- s.summary = 'Wrap fluent logger as a singleton object, silently fail-over to STDOUT if fluentd service not defined.'
5
+ s.description = 'A singleton wrapper for fluent logger.'
6
+ s.summary = 'Wrap fluent logger as a singleton object, silently fail-over to STDERR if fluentd service not defined.'
7
7
  s.authors = ['Huang Wei']
8
8
  s.email = 'huangw@7lime.com'
9
9
  s.homepage = 'https://github.com/7lime/la_logger-gem'
@@ -12,9 +12,9 @@ Gem::Specification.new 'la_logger', LaLogger::VERSION do |s|
12
12
  s.test_files = Dir.glob('{spec,test}/**/*.rb')
13
13
 
14
14
  s.add_dependency 'fluent-logger'
15
+ s.add_dependency 'activesupport', '~> 3.2'
15
16
  s.add_development_dependency 'rspec', '~> 2.5'
16
17
  s.add_development_dependency 'mongo'
17
18
  s.add_development_dependency 'bson_ext'
18
19
  s.add_development_dependency 'simplecov', '~> 2.5'
19
20
  end
20
-
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Define version of the module
4
4
  module LaLogger
5
- VERSION = '0.0.2'
5
+ VERSION = '0.1.0'
6
6
  end
data/lib/la_logger.rb CHANGED
@@ -4,6 +4,8 @@ require 'forwardable'
4
4
  require 'singleton'
5
5
  require 'fluent-logger'
6
6
  require 'logger'
7
+ require 'active_support/backtrace_cleaner'
8
+ require 'active_support/inflector' # :underscore
7
9
 
8
10
  # LaLogger: wraper for fluent-logger
9
11
  class LaLogger
@@ -20,8 +22,8 @@ class LaLogger
20
22
  def initialize
21
23
  if ENV['FLUENTD']
22
24
  host_, port_, tag_ = ENV['FLUENTD'].split ':'
23
- host_ = 'localhost' unless host_ and host_.size > 0
24
- port_ = 24224 unless port_ and port_.size > 0
25
+ host_ = 'localhost' unless host_ && host_.size > 0
26
+ port_ = 24_224 unless port_ && port_.size > 0
25
27
  @logger = Fluent::Logger::FluentLogger.new(
26
28
  tag_, host: host_.to_s, port: port_.to_i
27
29
  )
@@ -43,15 +45,42 @@ class LaLogger
43
45
  end
44
46
 
45
47
  # define 6 log methods
46
- [:debug, :info, :warn, :error,
47
- :fatal, :unknown].each_with_index do |met, lvl|
48
- define_method(met) do |message, tag = nil, data = {}|
49
- data[met] = message || ''
50
- tag ||= @tag
51
- logger.post(tag, data) if @level <= lvl
48
+ [:debug, :info, :warn,
49
+ :error, :fatal, :unknown].each_with_index do |met, lvl|
50
+ define_method(met) do |message, data = {}|
51
+ tag = data['tag'] || @tag
52
+ logger.post(tag, get_data(met, message, data)) if @level <= lvl
52
53
  end
53
54
  end
54
55
 
55
56
  # use LaLogger.new.post() directly.
56
57
  def_delegator :logger, :post
58
+
59
+ private
60
+
61
+ # initialize a default error message back trace cleaner
62
+ def bc
63
+ unless @bc
64
+ @bc = ActiveSupport::BacktraceCleaner.new
65
+ if ENV['APP_ROOT']
66
+ @bc.add_filter { |line| line.gsub(ENV['APP_ROOT'], '') }
67
+ end
68
+ @bc.add_silencer { |line| line =~ /ruby|gems/ }
69
+ end
70
+ @bc
71
+ end
72
+
73
+ # set up data hash to feed the fluent-logger object
74
+ def get_data(met, message, data)
75
+ # message also can be omitted:
76
+ data = message if message.is_a?(Hash) && data.keys.size == 0
77
+ data[met] = message if message.is_a?(String)
78
+ data[met] = message.class.name.underscore if message.is_a?(Exception)
79
+
80
+ # handle exception object
81
+ data['message'] ||= message.message if message.respond_to?(:message)
82
+ data['backtrace'] ||=
83
+ bc.clean(message.backtrace) if message.respond_to?(:backtrace)
84
+ data
85
+ end
57
86
  end
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require 'mongo'
2
3
  include Mongo
3
4
 
@@ -5,11 +6,11 @@ include Mongo
5
6
 
6
7
  module MongoHelper
7
8
  def db
8
- MongoClient.new('localhost', 27017).db('lalogger_test')
9
+ MongoClient.new('localhost', 27_017).db('lalogger_test')
9
10
  end
10
11
 
11
- def get_last_logs(col)
12
- db.collection(col).find({}, { limit: 5 }).sort(time: :desc).to_a
12
+ def get_last_logs(col, size = 5)
13
+ db.collection(col).find({}, { limit: size }).sort(time: :desc).to_a
13
14
  end
14
15
 
15
16
  def cleanup
@@ -1,11 +1,7 @@
1
1
  # encoding: utf-8
2
- ENV['FLUENTD'] = 'localhost'
3
2
  require 'spec_helper'
4
3
  require 'la_logger'
5
4
 
6
- #require 'helpers/io_helper'
7
- #include IOHelper
8
-
9
5
  require 'helpers/mongo_helper'
10
6
  include MongoHelper
11
7
 
@@ -39,6 +35,13 @@ class UserB
39
35
  end
40
36
  end
41
37
 
38
+ # mix-in la-logger, expose private methods
39
+ class LaLogger
40
+ def expose_data(message, data = {})
41
+ get_data('error', message, data)
42
+ end
43
+ end
44
+
42
45
  describe LaLogger do
43
46
  describe 'singleton' do
44
47
  it 'same logger globally' do
@@ -48,6 +51,29 @@ describe LaLogger do
48
51
  end
49
52
  end
50
53
 
54
+ describe 'adjust message data' do
55
+ it 'can omitt message' do
56
+ data = LaLogger.new.expose_data('message' => 'info')
57
+ data['message'].should eq('info')
58
+ end
59
+
60
+ it 'handles error object' do
61
+ class SomeExceptionClass < RuntimeError; end
62
+ begin
63
+ fail SomeExceptionClass, 'raise me!'
64
+ rescue SomeExceptionClass => e
65
+ data = LaLogger.new.expose_data(e)
66
+ data['error'].should eq('some_exception_class')
67
+ data['message'].should eq('raise me!')
68
+ end
69
+ end
70
+
71
+ it 'handle string message' do
72
+ data = LaLogger.new.expose_data('send out message')
73
+ data['error'].should eq('send out message')
74
+ end
75
+ end
76
+
51
77
  describe 'default level' do
52
78
  it 'log error messages' do
53
79
  LaLogger.new('global').error('error message from global')
@@ -71,5 +97,5 @@ describe LaLogger do
71
97
  end
72
98
  end
73
99
 
74
- after(:all) { cleanup }
100
+ after(:each) { cleanup }
75
101
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: la_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-08 00:00:00.000000000 Z
12
+ date: 2013-09-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fluent-logger
@@ -27,6 +27,22 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: activesupport
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '3.2'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '3.2'
30
46
  - !ruby/object:Gem::Dependency
31
47
  name: rspec
32
48
  requirement: !ruby/object:Gem::Requirement
@@ -91,7 +107,7 @@ dependencies:
91
107
  - - ~>
92
108
  - !ruby/object:Gem::Version
93
109
  version: '2.5'
94
- description: A singleton wrapper for fluent logger object.
110
+ description: A singleton wrapper for fluent logger.
95
111
  email: huangw@7lime.com
96
112
  executables: []
97
113
  extensions: []
@@ -107,7 +123,6 @@ files:
107
123
  - la_logger.gemspec
108
124
  - lib/la_logger.rb
109
125
  - lib/la_logger/version.rb
110
- - spec/helpers/io_helper.rb
111
126
  - spec/helpers/mongo_helper.rb
112
127
  - spec/la_logger_spec.rb
113
128
  - spec/spec_helper.rb
@@ -135,10 +150,9 @@ rubyforge_project:
135
150
  rubygems_version: 1.8.23
136
151
  signing_key:
137
152
  specification_version: 3
138
- summary: Wrap fluent logger as a singleton object, silently fail-over to STDOUT if
153
+ summary: Wrap fluent logger as a singleton object, silently fail-over to STDERR if
139
154
  fluentd service not defined.
140
155
  test_files:
141
- - spec/helpers/io_helper.rb
142
156
  - spec/helpers/mongo_helper.rb
143
157
  - spec/la_logger_spec.rb
144
158
  - spec/spec_helper.rb
@@ -1,30 +0,0 @@
1
- # encoding: utf-8
2
-
3
- # record stdout and stderr output as strings for testing against expectation
4
- module IOHelper
5
- def capture_stdout(&block)
6
- original_stdout = $stdout
7
- $stdout = fake = StringIO.new
8
- begin
9
- yield
10
- rescue SystemExit
11
- $stdout = original_stdout # fake rubocop
12
- ensure
13
- $stdout = original_stdout
14
- end
15
- fake.string
16
- end
17
-
18
- def capture_stderr(&block)
19
- original_stdout = $stderr
20
- $stderr = fake = StringIO.new
21
- begin
22
- yield
23
- rescue SystemExit
24
- $stdout = original_stdout # fake rubocop
25
- ensure
26
- $stderr = original_stdout
27
- end
28
- fake.string
29
- end
30
- end