vx-lib-logger 0.0.8 → 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.
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