Module: Log
- Defined in:
- lib/tracer_client/log.rb
Constant Summary collapse
- SEVERITIES =
error - ошибки crit - исключения emerg - неперехваченные исключения
i(debug info notice warn error crit alert emerg)
- FACILITIES =
i(request lib auth user product order line_item delivery odkl email direct_mail page exception)
- ROBOT_UA_FRAGMENTS =
/AhrefsBot|bingbot|DotBot|Googlebot|Mail.RU_Bot|MJ12bot|msnbot|SputnikBot|updown_tester|Web-Monitoring|WebMasterAid|YaDirectFetcher|Yahoo! Slurp|YandexBot/
Class Method Summary collapse
-
.debug(subject = '', tags = '', data = {}) ⇒ Object
Можно вызывать в сокращённой форме: Log.debug(‘Сообщение’) Log.debug(2, b: 5) Log.debug(any_object).
- .enabled_severity?(message_severity, configured_severity) ⇒ Boolean
- .end_request ⇒ Object
- .exception(exception, subject, tags = '', data = {}) ⇒ Object
- .exception_message(exception, severity, subject, tags, data, backtrace) ⇒ Object
- .exception_with_alert(exception, subject, tags = '', data = {}) ⇒ Object
- .get_backtrace(backtrace) ⇒ Object
- .log?(severity) ⇒ Boolean
- .message(severity, subject, tags, data, backtrace) ⇒ Object
- .on_raise(exception, backtrace) ⇒ Object
- .start_request(current_user, request, params, session, do_log_request) ⇒ Object
- .unhandled(exception) ⇒ Object
Class Method Details
.debug(subject = '', tags = '', data = {}) ⇒ Object
Можно вызывать в сокращённой форме: Log.debug(‘Сообщение’) Log.debug(2, b: 5) Log.debug(any_object)
33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/tracer_client/log.rb', line 33 def self.debug(subject = '', = '', data = {}) if Hash === subject # передан только хэш с данными (:debug, subject.inspect[0...40], '', subject, caller) elsif String === subject # передан только subject (:debug, subject, , data, caller) else # переданы некие другие данные (:debug, subject.inspect[0...40], '', {debug: subject}, caller) end end |
.enabled_severity?(message_severity, configured_severity) ⇒ Boolean
138 139 140 141 142 |
# File 'lib/tracer_client/log.rb', line 138 def self.enabled_severity?(, configured_severity) = SEVERITIES.index() configured_index = SEVERITIES.index(configured_severity.to_sym) .nil? || configured_index.nil? || >= configured_index end |
.end_request ⇒ Object
23 24 25 26 |
# File 'lib/tracer_client/log.rb', line 23 def self.end_request Thread.current[:request_tags] = nil Tracer::Client.end_request end |
.exception(exception, subject, tags = '', data = {}) ⇒ Object
60 61 62 63 64 65 66 67 |
# File 'lib/tracer_client/log.rb', line 60 def self.exception(exception, subject, = '', data = {}) if Rails.env.development? raise exception else (exception, :crit, subject, , data, exception.backtrace) exception end end |
.exception_message(exception, severity, subject, tags, data, backtrace) ⇒ Object
121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/tracer_client/log.rb', line 121 def self.(exception, severity, subject, , data, backtrace) = ( + ' ' + exception.).strip if exception.respond_to?(:tags) data.merge!(exception.data.except(:with_alert)) if exception.respond_to?(:data) data.merge!(exception: { class: exception.class.name, message: exception. }) (severity, subject, , data, backtrace) exception.mark_logged end |
.exception_with_alert(exception, subject, tags = '', data = {}) ⇒ Object
70 71 72 |
# File 'lib/tracer_client/log.rb', line 70 def self.exception_with_alert(exception, subject, = '', data = {}) exception(exception, subject, , data.merge(with_alert: true)) end |
.get_backtrace(backtrace) ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/tracer_client/log.rb', line 144 def self.get_backtrace(backtrace) locations = Rails.backtrace_cleaner.clean(backtrace || []) locations.map do |location| if location =~ /\A(.*):(\d+):\s*(?:in `(.*)')\z/ { file: $~[1], line: $~[2], function: $~[3], } end end.compact end |
.log?(severity) ⇒ Boolean
134 135 136 |
# File 'lib/tracer_client/log.rb', line 134 def self.log?(severity) Settings.log.severity_level.nil? || enabled_severity?(severity, Settings.log.severity_level) end |
.message(severity, subject, tags, data, backtrace) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/tracer_client/log.rb', line 92 def self.(severity, subject, , data, backtrace) return unless log?(severity) = (Thread.current[:request_tags] || []) + .split(' ') data = {data: data} unless Hash === data return if data.key?(:exception) && data[:exception][:class] == 'ActiveRecord::RecordNotFound' && == %w(robot) error_hash = { severity: severity, tags: , message: subject, backtrace: get_backtrace(backtrace).first(10) } if data.key?(:exception) error_hash[:exception_message] = data[:exception][:message].strip error_hash[:type] = data[:exception][:class] end Tracer::Client.log( errors: [error_hash], data: data.except(:exception, :with_alert), with_alert: data[:with_alert], ) end |
.on_raise(exception, backtrace) ⇒ Object
75 76 77 78 79 |
# File 'lib/tracer_client/log.rb', line 75 def self.on_raise(exception, backtrace) if exception.with_log? (exception, :warn, '', 'raise', {with_alert: exception.with_alert?}, backtrace) end end |
.start_request(current_user, request, params, session, do_log_request) ⇒ Object
15 16 17 18 19 20 21 |
# File 'lib/tracer_client/log.rb', line 15 def self.start_request(current_user, request, params, session, do_log_request) Tracer::Client.start_request(current_user, request, params, session) info('HTTP запрос', 'http_request') if do_log_request Thread.current[:request_tags] = %w(robot) if request.headers['User-Agent'] =~ ROBOT_UA_FRAGMENTS end |
.unhandled(exception) ⇒ Object
82 83 84 85 86 |
# File 'lib/tracer_client/log.rb', line 82 def self.unhandled(exception) if exception.with_log? && !exception.logged? (exception, :emerg, '', 'unhandled', {with_alert: exception.with_alert?}, exception.backtrace) end end |