vx-lib-logger 0.0.8 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b8c3f397ec443db13af556a19b2983f6230ce15c
4
- data.tar.gz: e0e7851762093a6f7638ceeb259c6e48de3c2e93
3
+ metadata.gz: 8f98e748e5656d369a8c12d57f0ad8c358060c06
4
+ data.tar.gz: 83b4d6156cb3ec83c2a2f8dd23fcc61f6eb51933
5
5
  SHA512:
6
- metadata.gz: c46b25e44b4bb056223f074c7e2d7d185e3d7c7a107da67f961dfac558d59bcf4c82cd1b1d8d56c7d25636122e33f5fb719e4d9c7f92a9d4932fe350dbda8b99
7
- data.tar.gz: d21d20132e2fcf000bccee39653190e7fa3b17e7dfc9e9b17bfb9ac8cf54fb95b63cd0a1669362f03f3df5c6ee46417ade20426e3805138332c619d96dd32ee8
6
+ metadata.gz: fad51d812538094eeafa610b05046d6536ce76fcc0da99864237cfdcf4d5a3cdb1ca850215239e0ed947a76b63136fe1ea4d670f262669e4d6f40470ae28aaf6
7
+ data.tar.gz: 4954cf928b9d44e2fa3035ba4a1b38c3f7f03fa8964e8c08889bedff7071e2dd33d7e9492de60062467516260d702981dfa9365ccd9ccd615d1732ca6665158b
data/Rakefile CHANGED
@@ -1,2 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
+ require 'rake/testtask'
4
+
5
+ task :spec do
6
+ $LOAD_PATH.unshift(File.expand_path("../spec", __FILE__))
7
+ Dir.glob('./spec/lib/*_spec.rb').each { |file| require file}
8
+ end
9
+
10
+ task default: :spec
data/lib/vx/lib/logger.rb CHANGED
@@ -6,12 +6,15 @@ module Vx ; module Lib
6
6
 
7
7
  autoload :Instance, File.expand_path("../logger/instance", __FILE__)
8
8
  autoload :JsonFormatter, File.expand_path("../logger/json_formatter", __FILE__)
9
- autoload :Instrumentations, File.expand_path("../logger/instrumentations", __FILE__)
10
- autoload :HandleExceptions, File.expand_path("../logger/handle_exceptions", __FILE__)
9
+ autoload :RawFormatter, File.expand_path("../logger/raw_formatter", __FILE__)
10
+
11
+ module Rack
12
+ autoload :HandleExceptions, File.expand_path("../logger/rack/handle_exceptions", __FILE__)
13
+ end
11
14
 
12
15
  @@default = Instance.new(STDOUT)
13
16
 
14
- def self.get(io, options)
17
+ def self.get(io = nil, options = {})
15
18
  Instance.new(io, options)
16
19
  end
17
20
 
@@ -10,10 +10,10 @@ module Vx ; module Lib ; module Logger
10
10
  def initialize(io, params = {})
11
11
  @params = params
12
12
  @logger = ::Logger.new(io, 7, 50_000_000)
13
- @logger.formatter = get_formatter(params[:format])
13
+ @logger.formatter = RawFormatter.new
14
14
  end
15
15
 
16
- [:fatal, :warn, :debug, :error, :info, :notice].each do |m|
16
+ [:fatal, :warn, :debug, :error, :info].each do |m|
17
17
  define_method m do |*args|
18
18
  process_message(m, *args)
19
19
  end
@@ -81,11 +81,8 @@ module Vx ; module Lib ; module Logger
81
81
  end
82
82
 
83
83
  body = {
84
- message: message.to_s,
85
84
  thread_id: ::Thread.current.object_id,
86
85
  process_id: ::Process.pid,
87
- progname: (params[:progname] || :ruby),
88
- level: level,
89
86
  }
90
87
 
91
88
  if options && options != {}
@@ -94,7 +91,11 @@ module Vx ; module Lib ; module Logger
94
91
  )
95
92
  end
96
93
 
97
- @logger.public_send level, body
94
+ @logger.public_send level, format_message(message, body)
95
+ end
96
+
97
+ def format_message(message, payload)
98
+ JsonFormatter.call(message, payload)
98
99
  end
99
100
 
100
101
  end
@@ -2,48 +2,13 @@ require 'oj'
2
2
 
3
3
  module Vx ; module Lib ; module Logger
4
4
 
5
- JsonFormatter = Struct.new(:parent) do
5
+ module JsonFormatter
6
6
 
7
- def call(_, _, _, msg)
8
- ::Oj.dump(msg, mode: :compat) + "\n"
7
+ def self.call(message, payload)
8
+ payload = ::Oj.dump(payload, mode: :compat)
9
+ "#{message} :--: #{payload}"
9
10
  end
10
11
 
11
- =begin
12
- def safe_value(value, options = {})
13
- new_value = case value.class.to_s
14
- when "String", "Fixnum", "Float"
15
- value
16
- when "Symbol", "BigDecimal"
17
- value.to_s
18
- when "Array"
19
- value = value.map(&:to_s)
20
- options[:join_arrays] ? value.join("\n") : value
21
- when 'NilClass'
22
- nil
23
- else
24
- value.inspect
25
- end
26
- if new_value.is_a?(String)
27
- new_value.encode('UTF-8', {:invalid => :replace, :undef => :replace, :replace => '?'})
28
- else
29
- new_value
30
- end
31
- end
32
-
33
- def make_safe_hash(msg, options = {})
34
- msg.inject({}) do |acc, pair|
35
- msg_key, msg_value = pair
36
-
37
- if msg_key == :fields
38
- acc[msg_key] = make_safe_hash(msg_value, join_arrays: true)
39
- else
40
- acc[msg_key] = safe_value(msg_value, options)
41
- end
42
- acc
43
- end
44
- end
45
- end
46
- =end
47
12
  end
48
13
 
49
14
  end ; end ; end
@@ -0,0 +1,10 @@
1
+ module Vx ; module Lib ; module Logger
2
+
3
+ RawFormatter = Struct.new(:parent) do
4
+
5
+ def call(severity, datetime, progname, msg)
6
+ "[#{severity}] #{msg.to_s}\n"
7
+ end
8
+ end
9
+
10
+ end ; end ; end
@@ -1,7 +1,7 @@
1
1
  module Vx
2
2
  module Lib
3
3
  module Logger
4
- VERSION = "0.0.8"
4
+ VERSION = "0.1.0"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ require 'stringio'
4
+
5
+ describe Vx::Lib::Logger::Instance do
6
+
7
+ before do
8
+ @out = StringIO.new
9
+ @log = Vx::Lib::Logger.get(@out)
10
+ assert @log
11
+ end
12
+
13
+ [:fatal, :warn, :debug, :error, :info].each do |m|
14
+ it "should write #{m} message" do
15
+ @log.public_send(m, "send #{m}")
16
+ text = "[#{m.upcase}] send #{m} :--: {\"thread_id\":#{tid},\"process_id\":#{pid}}\n"
17
+ assert_equal get_out, text
18
+ end
19
+ end
20
+
21
+ it "should write message with params" do
22
+ @log.info "text message", param: :value
23
+ text = "[INFO] text message :--: {\"thread_id\":#{tid},\"process_id\":#{pid},\"fields\":{\"param\":\"value\"}}\n"
24
+ assert_equal get_out, text
25
+ end
26
+
27
+ it "should write message with object in params" do
28
+ @log.info "text message", param: self
29
+ assert get_out
30
+ end
31
+
32
+ it "should write message with exception in params" do
33
+ @log.info "text message", exception: Exception.new("got!")
34
+ text = "[INFO] text message :--: {\"thread_id\":#{tid},\"process_id\":#{pid},\"fields\":{\"exception\":[\"Exception\",\"got!\"],\"backtrace\":\"\"}}\n"
35
+ assert_equal get_out, text
36
+ end
37
+
38
+ it "should handle block" do
39
+ @log.handle "text message" do
40
+ sleep 0.1
41
+ end
42
+ assert_match(/duration/, get_out)
43
+
44
+ begin
45
+ @log.handle "text message", key: :value do
46
+ raise 'got!'
47
+ end
48
+ rescue Exception
49
+ end
50
+
51
+ body = get_out
52
+ assert_match(/duration/, body)
53
+ assert_match(/key/, body)
54
+ assert_match(/value/, body)
55
+ assert_match(/got\!/, body)
56
+ assert_match(/backtrace/, body)
57
+ end
58
+
59
+ it "should dump invalid unicode key" do
60
+ @log.info "Le Caf\xc3\xa9 \xa9", key: "Le Caf\xc3\xa9 \xa9"
61
+ text = "[INFO] Le Café \xA9 :--: {\"thread_id\":#{tid},\"process_id\":#{pid},\"fields\":{\"key\":\"Le Café \xA9\"}}\n"
62
+ assert_equal get_out, text
63
+ end
64
+
65
+ def get_out
66
+ @out.rewind
67
+ body = @out.read
68
+ @out.rewind
69
+ body
70
+ end
71
+
72
+ def tid
73
+ Thread.current.object_id
74
+ end
75
+
76
+ def pid
77
+ Process.pid
78
+ end
79
+
80
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe Vx::Lib::Logger do
4
+ it "should get a new instance" do
5
+ inst = Vx::Lib::Logger.get
6
+ assert inst
7
+ end
8
+
9
+ it "should get default instance" do
10
+ inst = Vx::Lib::Logger.default
11
+ assert inst
12
+ end
13
+
14
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Vx::Lib::Logger::Rack::HandleExceptions do
4
+
5
+ it "should run successfuly" do
6
+ app = ->(env) { env }
7
+ handle = Vx::Lib::Logger::Rack::HandleExceptions.new(app)
8
+ re = handle.call('env')
9
+ assert_equal re, 'env'
10
+ end
11
+
12
+ it "should run with exception" do
13
+ app = ->(env) { raise 'got!' }
14
+ handle = Vx::Lib::Logger::Rack::HandleExceptions.new(app)
15
+ re = handle.call({})
16
+ assert_equal re, 'env'
17
+ end
18
+
19
+ end
@@ -0,0 +1,4 @@
1
+ require File.expand_path("../../lib/vx/lib/logger", __FILE__)
2
+
3
+ require 'minitest/spec'
4
+ require 'minitest/autorun'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vx-lib-logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Galinsky
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-16 00:00:00.000000000 Z
11
+ date: 2015-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
@@ -65,11 +65,15 @@ files:
65
65
  - README.md
66
66
  - Rakefile
67
67
  - lib/vx/lib/logger.rb
68
- - lib/vx/lib/logger/handle_exceptions.rb
69
68
  - lib/vx/lib/logger/instance.rb
70
- - lib/vx/lib/logger/instrumentations.rb
71
69
  - lib/vx/lib/logger/json_formatter.rb
70
+ - lib/vx/lib/logger/rack/handle_exceptions.rb
71
+ - lib/vx/lib/logger/raw_formatter.rb
72
72
  - lib/vx/lib/logger/version.rb
73
+ - spec/lib/instance_spec.rb
74
+ - spec/lib/logger_spec.rb
75
+ - spec/lib/rack_handle_exceptions_spec.rb
76
+ - spec/spec_helper.rb
73
77
  - vx-lib-logger.gemspec
74
78
  homepage: ''
75
79
  licenses:
@@ -95,4 +99,8 @@ rubygems_version: 2.2.2
95
99
  signing_key:
96
100
  specification_version: 4
97
101
  summary: summary
98
- test_files: []
102
+ test_files:
103
+ - spec/lib/instance_spec.rb
104
+ - spec/lib/logger_spec.rb
105
+ - spec/lib/rack_handle_exceptions_spec.rb
106
+ - spec/spec_helper.rb
@@ -1,25 +0,0 @@
1
- require 'active_support'
2
-
3
- module Vx ; module Lib ; module Logger
4
- class Instrumentations
5
-
6
- class << self
7
-
8
- def activate
9
- ActiveSupport::Notifications.subscribe(/.*/) do |event, started, finished, _, payload|
10
- case event
11
- when /\.action_controller$/
12
- process_action_controller(event, started, finished, payload)
13
- end
14
- end
15
- end
16
-
17
- private
18
-
19
- def process_action_controller(event, started, finished, payload)
20
- end
21
-
22
- end
23
-
24
- end
25
- end ; end ; end