Class: SemanticLogger::Appender::SentryRuby
- Inherits:
-
Subscriber
- Object
- Base
- Subscriber
- SemanticLogger::Appender::SentryRuby
- Defined in:
- lib/semantic_logger/appender/sentry_ruby.rb
Instance Attribute Summary
Attributes inherited from Subscriber
#application, #environment, #formatter, #host, #logger, #metrics
Attributes inherited from Base
Instance Method Summary collapse
-
#initialize(level: :error, **args, &block) ⇒ SentryRuby
constructor
Create Appender.
-
#log(log) ⇒ Object
Send an error notification to sentry.
Methods inherited from Subscriber
#close, #console_output?, #flush, #level, #should_log?
Methods inherited from Base
#backtrace, #fast_tag, #level, #level=, #measure, #named_tags, #pop_tags, #push_tags, #should_log?, #silence, #tagged, #tags
Constructor Details
#initialize(level: :error, **args, &block) ⇒ SentryRuby
Create Appender
Parameters
level: [:trace | :debug | :info | :warn | :error | :fatal]
Override the log level for this appender.
Default: :error
formatter: [Object|Proc|Symbol|Hash]
An instance of a class that implements #call, or a Proc to be used to format
the output from this appender
Default: Use the built-in formatter (See: #call)
filter: [Regexp|Proc]
RegExp: Only include log messages where the class name matches the supplied.
regular expression. All other messages will be ignored.
Proc: Only include log messages where the supplied Proc returns true
The Proc must return true or false.
host: [String]
Name of this host to appear in log messages.
Default: SemanticLogger.host
application: [String]
Name of this application to appear in log messages.
Default: SemanticLogger.application
40 41 42 43 44 45 |
# File 'lib/semantic_logger/appender/sentry_ruby.rb', line 40 def initialize(level: :error, **args, &block) # Replace the Sentry Ruby logger so that we can identify its log # messages and not forward them to Sentry ::Sentry.init { |config| config.logger = SemanticLogger[::Sentry] } unless ::Sentry.initialized? super(level: level, **args, &block) end |
Instance Method Details
#log(log) ⇒ Object
Send an error notification to sentry
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/semantic_logger/appender/sentry_ruby.rb', line 48 def log(log) # Ignore logs coming from Sentry itself return false if log.name == "Sentry" context = formatter.call(log, self) payload = context.delete(:payload) || {} = context[:named_tags] || {} transaction_name = .delete(:transaction_name) user = extract_user!(, payload) = (context) fingerprint = payload.delete(:fingerprint) ::Sentry.with_scope do |scope| scope.set_user(user) if user scope.set_level(context.delete(:level)) if context[:level] scope.set_fingerprint(fingerprint) if fingerprint scope.set_transaction_name(transaction_name) if transaction_name scope.() scope.set_extras(context) scope.set_extras(payload) if log.exception ::Sentry.capture_exception(log.exception) elsif log.backtrace ::Sentry.(context[:message], backtrace: log.backtrace) else ::Sentry.(context[:message]) end end true end |