xlog 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: fd95d2da4868dd8be558341be8c5e8fb6506f1d6e7fb353d22fbc58d1db84c4c
4
+ data.tar.gz: 334ff24b034fe2c92ed2915b7be4aefae461d9f4d65fa8422a88e005bf83fa86
5
+ SHA512:
6
+ metadata.gz: 229ac2f213663efeab5e08303df6530c6023c37b9b628d3cb4ec6d9aba452b0833dedba73179e64fae1c20efea10d471447740eebb7fcfbd9c1125755d3da007
7
+ data.tar.gz: b87ccd85daeab222e3ecdf5d6cee9b279c9995fcf2661a213ae553b6be5d21a01d8df653f2488ba3f4c60fb3716c3e7c0a766a6511a2314494fd3944fffa5b85
data/README.md ADDED
@@ -0,0 +1,92 @@
1
+ # Xlog v0.0.1
2
+
3
+ Xlog - awesome logger for your Rails app. Logs everything you need in well-formatted view with timestamp, caller path and tags.
4
+
5
+ ## Usage
6
+ Log any info with `.info` method
7
+ ```ruby
8
+ Xlog.info('Some info text') # [2019-04-30 12:29:13 UTC] [ArtilesController.show] [info] Message: Some info text
9
+ ```
10
+ Log important info with `.warn` method
11
+ ```ruby
12
+ Xlog.warn('Validation failed') # [2019-04-30 12:29:13 UTC] [ArticlesController.update] [warn] Message: Validation failed
13
+ ```
14
+
15
+ Xlog has awesome `.error` and `.and_raise_error` methods
16
+ ```ruby
17
+ def index
18
+ 10 / 0
19
+ @orders = Order.all
20
+ rescue StandardError => e
21
+ Xlog.and_raise_error(e, data: { params: params }, message: 'Some message text here')
22
+ end
23
+ ```
24
+ ...and the output
25
+ ```
26
+ [2019-04-30 11:48:33 UTC] [Admin::OrdersController.index] [error] ZeroDivisionError: divided by 0.
27
+ | Message: Some message text here
28
+ | Data: {:params=><ActionController::Parameters {"controller"=>"admin/orders", "action"=>"index"} permitted: false>}
29
+ | Error backtrace:
30
+ | /home/me/test_app/app/controllers/admin/orders_controller.rb:7:in `/'
31
+ | /home/me/test_app/app/controllers/admin/orders_controller.rb:7:in `index'
32
+ ```
33
+ The only difference between `Xlog.error` and `Xlog.and_raise_error` is that second one raises error after logging.
34
+
35
+ Xlog automatically defines Rails application name and environment.
36
+ It writes logs into `log/xlog_[environement].log`
37
+
38
+ ## Configuration
39
+ 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.
40
+
41
+ ```ruby
42
+ Xlog.configure do |config|
43
+ config.custom_logger = Logger.new(STDOUT) # or Logger.new('foo.log', 10, 1024000) or any other
44
+ end
45
+ ```
46
+ It's possible to set third-party logger like Logentries(r7rapid)
47
+ ```ruby
48
+ require 'le'
49
+
50
+ Xlog.configure do |config|
51
+ config.custom_logger = Le.new(logentries_key, 'eu', tag: true)
52
+ end
53
+ ```
54
+
55
+ Look [here](https://ruby-doc.org/stdlib-2.4.0/libdoc/logger/rdoc/Logger.html) to know more about `Logger` configuration.
56
+
57
+ ## Installation
58
+
59
+ Add this line to your application's Gemfile:
60
+
61
+ ```ruby
62
+ gem 'xlog'
63
+ ```
64
+
65
+ And then execute:
66
+
67
+ $ bundle
68
+
69
+ Or install it yourself as:
70
+
71
+ $ gem install xlog
72
+
73
+ ## Development
74
+
75
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
76
+
77
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
78
+
79
+ ## Contributing
80
+
81
+ Bug reports and pull requests are welcome on GitHub at https://github.com/OrestF/xlog. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
82
+
83
+ ## License
84
+
85
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
86
+
87
+ ## Code of Conduct
88
+
89
+ Everyone interacting in the Xlog project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/OrestF/xlog/blob/master/CODE_OF_CONDUCT.md).
90
+
91
+ ## Idea
92
+ Initially designed and created by [Orest Falchuk (OrestF)](https://github.com/OrestF)
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Xlog
4
+ VERSION = '0.1.0'
5
+ end
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Xlog
4
+ class Xlogger
5
+ include Singleton
6
+
7
+ attr_accessor :app_name, :app_root, :base_logger
8
+ def initialize
9
+ @base_logger = ActiveSupport::TaggedLogging.new(Logger.new("log/xlog_#{Rails.env}.log"))
10
+
11
+ @app_name = Rails.application.class.to_s.split('::')[0].underscore
12
+ @app_root = Rails.root.to_s
13
+ @folder_names_to_remove = Dir.glob('app/*').map { |f| f.gsub('app/', '') }
14
+ end
15
+
16
+ def tag_logger(*tags)
17
+ @tags = tags
18
+ end
19
+
20
+ def log(type, text)
21
+ tags = [time_stamp, called_from(type), type] + Array.wrap(@tags)
22
+ @base_logger.tagged(tags.compact) { @base_logger.send(type, text) }
23
+ end
24
+
25
+ def info(message, data)
26
+ log(:info, compose_log(message, data))
27
+ end
28
+
29
+ def warn(message, data)
30
+ log(:warn, compose_log(message, data))
31
+ end
32
+
33
+ # do NOT refactor error and and_raise_error
34
+ def error(e, message, data)
35
+ # they MUST BE NOT DRY in order to log correct backtrace
36
+ log(:error, "#{e.class}: #{e.try(:message)}. \n #{compose_log(message, data)} \n Error backtrace: \n#{backtrace(e)}")
37
+ end
38
+
39
+ def and_raise_error(e, message, data)
40
+ log(:error, "#{e.class}: #{e.try(:message)}. #{newline} #{compose_log(message, data)} #{newline} Error backtrace: #{newline} #{backtrace(e)}")
41
+ message.present? ? raise(e, message) : raise(e)
42
+ end
43
+
44
+ def custom_logger=(logger)
45
+ @base_logger = ActiveSupport::TaggedLogging.new(logger)
46
+ end
47
+
48
+ private
49
+
50
+ def newline
51
+ "\n |"
52
+ end
53
+
54
+ def time_stamp
55
+ Time.zone&.now || Time.current
56
+ end
57
+
58
+ def compose_log(message, data)
59
+ message = "Message: #{message}"
60
+ message += "#{newline} Data: #{data.try(:inspect)}" if data.present?
61
+ message
62
+ end
63
+
64
+ def backtrace(e)
65
+ backtrace_cleaner.clean(e.try(:backtrace)).try(:join, "#{newline} ")
66
+ end
67
+
68
+ def backtrace_cleaner
69
+ return @backtrace_cleaner if @backtrace_cleaner.present?
70
+
71
+ bc = ActiveSupport::BacktraceCleaner.new
72
+ bc.add_filter { |line| line.gsub(app_root, '') }
73
+ bc.add_silencer { |line| line =~ /puma|rubygems|gems/ }
74
+ @backtrace_cleaner = bc
75
+ end
76
+
77
+ def called_from(type)
78
+ caller_position = type == :error ? 5 : 4
79
+ caller(caller_position..caller_position)[0]
80
+ .split("/#{app_name}/*")[-1]
81
+ .split('.rb')[0]
82
+ .remove(*@folder_names_to_remove)
83
+ .split('//')[-1]
84
+ .camelize
85
+ .concat(".#{caller_locations(caller_position, caller_position + 1)[0].label}")
86
+ end
87
+ end
88
+ end
data/lib/xlog.rb ADDED
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails'
4
+ require 'xlog/xlogger'
5
+ require 'xlog/version'
6
+
7
+ module Xlog
8
+ class << self
9
+ attr_accessor :config, :app_name, :app_root, :base_logger, :xlogger
10
+
11
+ def tag_logger(*tags)
12
+ config.xlogger.tag_logger(tags)
13
+ end
14
+
15
+ def info(message, data: nil)
16
+ config.xlogger.info(message, data)
17
+ end
18
+
19
+ def warn(message, data: nil)
20
+ config.xlogger.warn(message, data)
21
+ end
22
+
23
+ def error(e, message: nil, data: nil)
24
+ config.xlogger.error(e, message, data)
25
+ end
26
+
27
+ def and_raise_error(e, message: nil, data: nil)
28
+ config.xlogger.and_raise_error(e, message, data)
29
+ end
30
+ end
31
+
32
+ def self.configure
33
+ self.config ||= Config.new
34
+ yield(config)
35
+ end
36
+
37
+ class Config
38
+ attr_accessor :xlogger
39
+
40
+ def initialize
41
+ @xlogger = Xlogger.instance
42
+ end
43
+
44
+ def custom_logger=(logger)
45
+ xlogger.custom_logger = logger
46
+ end
47
+ end
48
+
49
+ configure {}
50
+ end
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: xlog
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - OrestF
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-04-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.17'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.17'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: faker
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Xlog is just awesome logger
70
+ email:
71
+ - falchuko@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - README.md
77
+ - lib/xlog.rb
78
+ - lib/xlog/version.rb
79
+ - lib/xlog/xlogger.rb
80
+ homepage: https://github.com/OrestF/xlog
81
+ licenses:
82
+ - MIT
83
+ metadata: {}
84
+ post_install_message:
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubygems_version: 3.0.1
100
+ signing_key:
101
+ specification_version: 4
102
+ summary: Xlog is just awesome logger
103
+ test_files: []