-
Notifications
You must be signed in to change notification settings - Fork 176
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
246 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
class TestModel < ActiveRecord::Base | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
9 changes: 9 additions & 0 deletions
9
example/rails-42/db/migrate/20171009132509_create_test_models.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
class CreateTestModels < ActiveRecord::Migration | ||
def change | ||
create_table :test_models do |t| | ||
t.string :foo | ||
|
||
t.timestamps null: false | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
require_relative "logger" | ||
require "logging" | ||
|
||
module Bugsnag::Breadcrumbs | ||
class Appender < Logging::Appender | ||
def initialize(level = Logger::INFO) | ||
super "Bugsnag", { :level => level } | ||
end | ||
|
||
def <<(message) | ||
return if closed? | ||
Bugsnag::Breadcrumbs::Logger.log_breadcrumb(message) | ||
end | ||
|
||
def append(event) | ||
return if closed? || !allow(event) | ||
|
||
message = event.data.to_s | ||
metadata = { | ||
:method => event.method.to_s, | ||
:file => event.file.to_s, | ||
:line => event.line.to_s | ||
}.delete_if {|k,v| v == ""} | ||
|
||
severity = Bugsnag::Breadcrumbs::Logger.get_severity_name(event.level) | ||
Bugsnag::Breadcrumbs::Logger.log_breadcrumb(message, metadata, severity) | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
require "logger" | ||
require "bugsnag" | ||
|
||
module Bugsnag::Breadcrumbs | ||
class Logger < Logger | ||
SEVERITIES = [ | ||
"debug", | ||
"info", | ||
"warn", | ||
"error", | ||
"fatal", | ||
"unknown" | ||
] | ||
|
||
def self.get_severity_name(severity) | ||
if (0..5).cover? severity | ||
SEVERITIES[severity] | ||
else | ||
severity | ||
end | ||
end | ||
|
||
def self.log_breadcrumb(message, data = nil, severity = "unknown") | ||
metadata = { | ||
:severity => severity, | ||
:message => message | ||
} | ||
if data.is_a? Hash | ||
metadata.merge!(data) | ||
elsif !data.nil? | ||
metadata[:data] = data.to_s | ||
end | ||
|
||
Bugsnag.leave_breadcrumb("Log output", metadata, Bugsnag::Breadcrumbs::LOG_TYPE) | ||
end | ||
|
||
def initialize(level = Logger::INFO) | ||
@open = true | ||
super nil, level | ||
end | ||
|
||
def add(severity, message = nil, progname = nil) | ||
return unless @open | ||
|
||
if block_given? | ||
message = yield message | ||
elsif message.nil? | ||
message = progname | ||
end | ||
|
||
Bugsnag::Breadcrumbs::Logger.log_breadcrumb(message, { :progname => progname }, Bugsnag::Breadcrumbs::Logger.get_severity_name(severity)) if severity >= level | ||
end | ||
alias log add | ||
|
||
def <<(message) | ||
return unless @open | ||
Bugsnag::Breadcrumbs::Logger.log_breadcrumb(message) | ||
end | ||
|
||
def close | ||
@open = false | ||
true | ||
end | ||
|
||
def reopen | ||
@open = true | ||
true | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
# encoding: utf-8 | ||
|
||
# Necessary to avoid monkey patching thread methods | ||
ENV["LOGGING_INHERIT_CONTEXT"] = "false" | ||
|
||
require 'spec_helper' | ||
require 'logger' | ||
require 'logging' | ||
require 'bugsnag/breadcrumbs/appender' | ||
|
||
describe Bugsnag::Breadcrumbs::Appender do | ||
|
||
before do | ||
@appender = Bugsnag::Breadcrumbs::Appender.new | ||
end | ||
|
||
it "writes breadcrumbs" do | ||
expect(Bugsnag).to receive(:leave_breadcrumb).with( | ||
"Log output", | ||
{ | ||
:severity => "unknown", | ||
:message => "message" | ||
}, | ||
"log" | ||
) | ||
@appender << "message" | ||
end | ||
|
||
it "write breadcrumbs from a logevent" do | ||
expect(Bugsnag).to receive(:leave_breadcrumb).with( | ||
"Log output", | ||
{ | ||
:message => ["message1", "message2"].to_s, | ||
:severity => "info", | ||
}, | ||
"log" | ||
) | ||
logevent = Logging::LogEvent.new("testLogger", Logger::INFO, ["message1", "message2"], false) | ||
@appender.append logevent | ||
end | ||
|
||
it "adds trace metadata if available" do | ||
expect(Bugsnag).to receive(:leave_breadcrumb) do |name, metadata, severity| | ||
expect(name).to eq("Log output") | ||
expect(metadata).to include(:message, :severity, :method, :file, :line) | ||
expect(metadata).to include(:message => ["message1", "message2"].to_s, :severity => "info") | ||
expect(severity).to eq("log") | ||
end | ||
logevent = Logging::LogEvent.new("testLogger", Logger::INFO, ["message1", "message2"], true) | ||
@appender.append logevent | ||
end | ||
|
||
it "doesn't write if closed" do | ||
expect(Bugsnag).to_not receive(:leave_breadcrumb) | ||
@appender.close | ||
@appender << "message" | ||
logevent = Logging::LogEvent.new("testLogger", Logger::INFO, ["message1", "message2"], false) | ||
@appender.append logevent | ||
end | ||
|
||
it "is an appender and a bugsnag appender" do | ||
expect(@appender.class.ancestors).to include(Bugsnag::Breadcrumbs::Appender, Logging::Appender) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
# encoding: utf-8 | ||
|
||
require 'spec_helper' | ||
require 'logger' | ||
require 'bugsnag/breadcrumbs/logger' | ||
|
||
describe Bugsnag::Breadcrumbs::Logger do | ||
|
||
before do | ||
@logger = Bugsnag::Breadcrumbs::Logger.new | ||
end | ||
|
||
it "writes by default" do | ||
expect(Bugsnag).to receive(:leave_breadcrumb).with( | ||
"Log output", | ||
{ | ||
:severity => "unknown", | ||
:message => "message" | ||
}, | ||
"log" | ||
) | ||
@logger << "message" | ||
end | ||
|
||
it "doesn't write when closed" do | ||
expect(Bugsnag).to_not receive(:leave_breadcrumb) | ||
@logger.close | ||
@logger << "message" | ||
end | ||
|
||
it "writes after being re-opened" do | ||
expect(Bugsnag).to receive(:leave_breadcrumb).with( | ||
"Log output", | ||
{ | ||
:severity => "unknown", | ||
:message => "message" | ||
}, | ||
"log" | ||
) | ||
@logger.close | ||
@logger.reopen | ||
@logger << "message" | ||
end | ||
|
||
it "allows a progname and severity" do | ||
expect(Bugsnag).to receive(:leave_breadcrumb).with( | ||
"Log output", | ||
{ | ||
:progname => "logTests", | ||
:severity => "info", | ||
:message => "message" | ||
}, | ||
"log" | ||
) | ||
@logger.info("logTests") { "message" } | ||
end | ||
|
||
it "is a logger and a bugsnag logger" do | ||
expect(@logger.class.ancestors).to include(Bugsnag::Breadcrumbs::Logger, Logger) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters