xlog 0.1.4 → 0.1.7

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
  SHA256:
3
- metadata.gz: 5175ddef67a168d0ba5a200ddeb9efdc88dcdd98ccedd615ad26b2bedd2c3ef3
4
- data.tar.gz: e150396dd1caaced0ddefc4e34c48cb5e2868985bb615b1671718a4dc6fe4600
3
+ metadata.gz: 6af875c3e62c116fa408033a00632ba9f553fed05aa6c522cc112aad2662fbde
4
+ data.tar.gz: 496dfa7445a3df263fb059d002202f45908829fdec2c7c3c0b240f89379d6006
5
5
  SHA512:
6
- metadata.gz: f5ee9f1686a38080d1f9b20c51013032ac4d3fc1c46e6e0b9a8c1dcd3ee20279fa3dda20ba7c1f5365f4e62f9b33fa03913ac50440e91f55e84ea6e7684629e3
7
- data.tar.gz: bbb8f13f909d632a78377a6618c93984549a48c75526bbf73293ebcb49bf5af90c52e1183109ab4ba3ca70282fc579d2fc895286e6750e830e4c325fb551a737
6
+ metadata.gz: 646d30f81b48f8acb2a530e28951e288efc07f25e5ee8badf66fd8be6d5f8138fc2ce7f1b1b777981915516c1a39f499b0cfb056e16af8b5ef1b296a872eb10d
7
+ data.tar.gz: 7e165c158b79ab69284055ee30b40ead52971b42e78d175c90b406d2d8980bd354fa0c5b4e72d4de74b1fe175fa6b3e7764471c4205718f353cc3ab68fd1e7c7
data/README.md CHANGED
@@ -1,19 +1,30 @@
1
- # Xlog v0.1.4
1
+ # Xlog v0.1.7
2
2
 
3
3
  Xlog - awesome logger for your Rails app. Logs everything you need in well-formatted view with timestamp, caller path and tags.
4
4
 
5
5
  ## Usage
6
- ##### Standard
6
+
7
+ ### `.info`
8
+
7
9
  Log any info with `.info` method
10
+
8
11
  ```ruby
9
12
  Xlog.info('Some info text') # [2019-04-30 12:29:13 UTC] [ArtilesController.show] [info] Message: Some info text
10
13
  ```
14
+
15
+
16
+ ### `.warn`
17
+
11
18
  Log important info with `.warn` method
19
+
12
20
  ```ruby
13
21
  Xlog.warn('Validation failed') # [2019-04-30 12:29:13 UTC] [ArticlesController.update] [warn] Message: Validation failed
14
22
  ```
15
23
 
24
+ ### `.error` and `.and_raise_error`
25
+
16
26
  Xlog has awesome `.error` and `.and_raise_error` methods
27
+
17
28
  ```ruby
18
29
  def index
19
30
  10 / 0
@@ -22,7 +33,9 @@ def index
22
33
  Xlog.and_raise_error(e, data: { params: params }, message: 'Some message text here')
23
34
  end
24
35
  ```
36
+
25
37
  ...and the output
38
+
26
39
  ```
27
40
  [2019-04-30 11:48:33 UTC] [Admin::OrdersController.index] [error] ZeroDivisionError: divided by 0.
28
41
  | Message: Some message text here
@@ -31,23 +44,56 @@ end
31
44
  | /home/me/test_app/app/controllers/admin/orders_controller.rb:7:in `/'
32
45
  | /home/me/test_app/app/controllers/admin/orders_controller.rb:7:in `index'
33
46
  ```
47
+
34
48
  The only difference between `Xlog.error` and `Xlog.and_raise_error` is that second one raises error after logging.
35
49
 
50
+ Log any info with `.info` method
51
+
36
52
  Xlog automatically defines Rails application name and environment.
37
53
  It writes logs into `log/xlog_[environement].log`
38
54
 
39
- Xlog also supports custom tags
55
+ ### Data
56
+
57
+ Any log method (`.info`, `.warn`, `.error`, `.and_raise_error`) supports `data: ` - named argument. Put any object as `data: my_object`
58
+ and it will be logged as "inspected" object.
59
+
60
+
61
+ ```ruby
62
+ Xlog.info('test info', data: { my: 'hash' })
63
+ # [2020-10-01 15:41:45 +0300] [(irb):4:in `irbBinding'.irb_binding] [info] Message: test info
64
+ # | Data: {:my=>"hash"}
65
+
66
+ ```
67
+
68
+ ### Tags
69
+
70
+ As far as `.tag_logger` is deprecated as it's not thread-safe, the new tags mechanism is presented.
71
+ Any log method (`.info`, `.warn`, `.error`, `.and_raise_error`) supports `tag: ` - named argument
72
+
73
+ ```ruby
74
+ Xlog.info('Some info text', tags: 'my_custom_tag') # [2019-04-30 12:29:13 UTC] [ArtilesController.show] [info] [my_custom_tag] Message: Some info text
75
+ Xlog.warn('Validation failed', tags: %w[validation input_error]) # [2019-04-30 12:29:13 UTC] [ArticlesController.update] [warn] [validation] [input_error] Message: Validation failed
76
+ Xlog.warn(error, tags: %w[fatal]) # [2019-04-30 12:29:13 UTC] [ArticlesController.update] [error] [fatal] Message: Zero division error
77
+ ```
78
+
79
+
80
+ ### `.tag_logger` [DEPRECATED]
81
+
40
82
  ```ruby
41
83
  Xlog.tag_logger('custom_tag')
42
84
  Xlog.info('Some text') # [2019-04-30 12:29:13 UTC] [ArtilesController.show] [info] [custom_tag] Message: Some info text
43
85
  ```
44
86
 
45
- Clear tags with:
87
+ Clear tags with: [DEPRECATED]
88
+
46
89
  ```ruby
47
90
  Xlog.clear_tags
48
91
  ```
49
- ##### Middleware
92
+
93
+ ## Middleware
94
+
50
95
  From version 0.1.4 Xlog could be used as Rails middleware. It catches `StandardError` using `Xlog.and_raise_error`.
96
+
51
97
  ```ruby
52
98
  # /config/application.rb
53
99
  module MyApp
@@ -60,6 +106,7 @@ From version 0.1.4 Xlog could be used as Rails middleware. It catches `StandardE
60
106
  ```
61
107
 
62
108
  ## Configuration
109
+
63
110
  Xlog is ready to use right out of the box, but it's possible to reconfigure default logger. Default logger is simple `Logger.new`. Add this code to `config/initializers/xlog.rb` and set any custom logger you want.
64
111
 
65
112
  ```ruby
@@ -67,7 +114,9 @@ Xlog.configure do |config|
67
114
  config.custom_logger = Logger.new(STDOUT) # or Logger.new('foo.log', 10, 1024000) or any other
68
115
  end
69
116
  ```
117
+
70
118
  It's possible to set third-party logger like Logentries(r7rapid)
119
+
71
120
  ```ruby
72
121
  require 'le'
73
122
 
@@ -9,7 +9,7 @@ module Xlog
9
9
  def call(env)
10
10
  @status, @headers, @response = @app.call(env)
11
11
  rescue StandardError => e
12
- Xlog.and_raise_error(e, data: { request_params: Rack::Request.new(env).params, status: @status, headers: @headers, response: @response })
12
+ Xlog.and_raise_error(e, data: { request_params: Rack::Request.new(env).params, status: @status, headers: @headers })
13
13
  end
14
14
  end
15
15
  end
data/lib/xlog/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Xlog
4
- VERSION = '0.1.4'.freeze
4
+ VERSION = '0.1.7'
5
5
  end
data/lib/xlog/xlogger.rb CHANGED
@@ -5,43 +5,36 @@ module Xlog
5
5
  include Singleton
6
6
 
7
7
  attr_accessor :app_name, :app_root, :base_logger
8
+
8
9
  def initialize
9
- @base_logger = ActiveSupport::TaggedLogging.new(Logger.new("log/xlog_#{Rails.env}.log"))
10
+ @base_logger = ActiveSupport::TaggedLogging.new(Logger.new("log/xlog_#{Rails.env}.log", 'weekly'))
10
11
 
11
12
  @app_name = Rails.application.class.to_s.split('::')[0].underscore
12
13
  @app_root = Rails.root.to_s
13
14
  @folder_names_to_remove = Dir.glob('app/*').map { |f| f.gsub('app/', '') }
14
15
  end
15
16
 
16
- def tag_logger(*tags)
17
- @tags = tags
18
- end
19
-
20
- def clear_tags
21
- @tags = nil
22
- end
23
-
24
- def log(type, text)
25
- tags = [time_stamp, called_from(type), type] + Array.wrap(@tags)
17
+ def log(type, text, tags)
18
+ tags = [time_stamp, called_from(type), type] + Array.wrap(tags)
26
19
  @base_logger.tagged(tags.compact) { @base_logger.send(type, text) }
27
20
  end
28
21
 
29
- def info(message, data)
30
- log(:info, compose_log(message, data))
22
+ def info(message, data, tags)
23
+ log(:info, compose_log(message, data), tags)
31
24
  end
32
25
 
33
- def warn(message, data)
34
- log(:warn, compose_log(message, data))
26
+ def warn(message, data, tags)
27
+ log(:warn, compose_log(message, data), tags)
35
28
  end
36
29
 
37
30
  # do NOT refactor error and and_raise_error
38
- def error(e, message, data)
31
+ def error(e, message, data, tags)
39
32
  # they MUST BE NOT DRY in order to log correct backtrace
40
- log(:error, "#{e.class}: #{e.try(:message)}. \n #{compose_log(message, data)} \n Error backtrace: \n#{backtrace(e)}")
33
+ log(:error, "#{e.class}: #{e.try(:message)}. \n #{compose_log(message, data)} \n Error backtrace: \n#{backtrace(e)}", tags)
41
34
  end
42
35
 
43
- def and_raise_error(e, message, data)
44
- log(:error, "#{e.class}: #{e.try(:message)}. #{newline} #{compose_log(message, data)} #{newline} Error backtrace: #{newline} #{backtrace(e)}")
36
+ def and_raise_error(e, message, data, tags)
37
+ log(:error, "#{e.class}: #{e.try(:message)}. #{newline} #{compose_log(message, data)} #{newline} Error backtrace: #{newline} #{backtrace(e)}", tags)
45
38
  message.present? ? raise(e, message) : raise(e)
46
39
  end
47
40
 
@@ -56,7 +49,7 @@ module Xlog
56
49
  end
57
50
 
58
51
  def time_stamp
59
- Time.zone&.now || Time.current
52
+ Time.current
60
53
  end
61
54
 
62
55
  def compose_log(message, data)
data/lib/xlog.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rails'
4
+ require 'active_support/core_ext/time/zones'
5
+ require 'active_support/core_ext/time/calculations'
4
6
  require_relative 'xlog/xlogger'
5
7
  require_relative 'xlog/version'
6
8
  require_relative 'xlog/middleware'
@@ -9,28 +11,30 @@ module Xlog
9
11
  class << self
10
12
  attr_accessor :config, :app_name, :app_root, :base_logger, :xlogger
11
13
 
12
- def tag_logger(*tags)
13
- config.xlogger.tag_logger(tags)
14
+ # rubocop:disable Layout/LineLength
15
+ def tag_logger(*_tags)
16
+ puts "\e[33mWARING: 'tag_logger' is no longer supported as it's not thread safe. Use 'tags: ' named argument instead for 'info', 'warn', 'error', 'and_raise_error'.\e[0m"
14
17
  end
18
+ # rubocop:enable Layout/LineLength
15
19
 
16
20
  def clear_tags
17
- config.xlogger.clear_tags
21
+ puts "\e[33mWARING: 'clear_tags' is no longer supported as it's not thread safe\e[0m"
18
22
  end
19
23
 
20
- def info(message, data: nil)
21
- config.xlogger.info(message, data)
24
+ def info(message, data: nil, tags: [])
25
+ config.xlogger.info(message, data, tags)
22
26
  end
23
27
 
24
- def warn(message, data: nil)
25
- config.xlogger.warn(message, data)
28
+ def warn(message, data: nil, tags: [])
29
+ config.xlogger.warn(message, data, tags)
26
30
  end
27
31
 
28
- def error(e, message: nil, data: nil)
29
- config.xlogger.error(e, message, data)
32
+ def error(e, message: nil, data: nil, tags: [])
33
+ config.xlogger.error(e, message, data, tags)
30
34
  end
31
35
 
32
- def and_raise_error(e, message: nil, data: nil)
33
- config.xlogger.and_raise_error(e, message, data)
36
+ def and_raise_error(e, message: nil, data: nil, tags: [])
37
+ config.xlogger.and_raise_error(e, message, data, tags)
34
38
  end
35
39
  end
36
40
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xlog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - OrestF
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-15 00:00:00.000000000 Z
11
+ date: 2022-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.17'
19
+ version: '2.3'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.3.8
20
23
  type: :development
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: '1.17'
29
+ version: '2.3'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.3.8
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rake
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +72,34 @@ dependencies:
66
72
  - - ">="
67
73
  - !ruby/object:Gem::Version
68
74
  version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rails
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: byebug
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
69
103
  description: Xlog - awesome logger for your Rails app. Logs everything you need in
70
104
  well-formatted view with timestamp, caller path and tags.
71
105
  email:
@@ -83,7 +117,7 @@ homepage: https://github.com/coaxsoft/xlog
83
117
  licenses:
84
118
  - MIT
85
119
  metadata: {}
86
- post_install_message:
120
+ post_install_message:
87
121
  rdoc_options: []
88
122
  require_paths:
89
123
  - lib
@@ -98,8 +132,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
132
  - !ruby/object:Gem::Version
99
133
  version: '0'
100
134
  requirements: []
101
- rubygems_version: 3.0.1
102
- signing_key:
135
+ rubygems_version: 3.1.6
136
+ signing_key:
103
137
  specification_version: 4
104
138
  summary: Xlog - awesome logger for your Rails app. Logs everything you need in well-formatted
105
139
  view with timestamp, caller path and tags.