Skip to content

Commit

Permalink
feature(logging): Ensure logged messages are formatted correctly
Browse files Browse the repository at this point in the history
- Removed 'format_message' method
- Re-added formatter utilising progname for Bugsnag stamp
- Added PROG_NAME const for logging program name
  • Loading branch information
Cawllec committed Mar 28, 2018
1 parent ab0d522 commit a5e2060
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 29 deletions.
17 changes: 7 additions & 10 deletions lib/bugsnag/configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class Configuration
THREAD_LOCAL_NAME = "bugsnag_req_data"
DEFAULT_ENDPOINT = "https://notify.bugsnag.com"
DEFAULT_SESSION_ENDPOINT = "https://sessions.bugsnag.com"
PROG_NAME = "[BUGSNAG]"

DEFAULT_META_DATA_FILTERS = [
/authorization/i,
Expand Down Expand Up @@ -88,6 +89,9 @@ def initialize
# Set up logging
self.logger = Logger.new(STDOUT)
self.logger.level = Logger::INFO
self.logger.formatter = proc do |severity, datetime, progname, msg|
"** #{progname} #{datetime}: #{msg}\n"
end

# Configure the bugsnag middleware stack
self.internal_middleware = Bugsnag::MiddlewareStack.new
Expand Down Expand Up @@ -166,26 +170,19 @@ def clear_request_data
##
# Logs an info level message
def info(message)
logger.info(format_message(message))
logger.info(PROG_NAME) { message }
end

##
# Logs a warning level message
def warn(message)
logger.warn(format_message(message))
logger.warn(PROG_NAME) { message }
end

##
# Logs a debug level message
def debug(message)
logger.debug(format_message(message))
end

##
# Formats a message being logged by Bugsnag
def format_message(message)
datetime = Time.new.to_s
"** [Bugsnag] #{datetime}: #{message}\n"
logger.debug(PROG_NAME) { message }
end

private
Expand Down
43 changes: 24 additions & 19 deletions spec/configuration_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,64 +37,69 @@ def initialize
@logs = []
end

def log(level, message)
def log(level, name, &block)
message = block.call
@logs << {
:level => level,
:name => name,
:message => message
}
end

def info(msg)
log('info', msg)
def info(name, &block)
log('info', name, &block)
end

def warn(msg)
log('warning', msg)
def warn(name, &block)
log('warning', name, &block)
end

def debug(msg)
log('debug', msg)
def debug(name, &block)
log('debug', name, &block)
end
end

before do
@logger = TestLogger.new
@string_regex = /\*\* \[Bugsnag\] (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} (\+\d{4})?): (Info|Warning|Debug) message\n$/
Bugsnag.configure do |bugsnag|
bugsnag.logger = @logger
end
end

it "should format a message correctly" do
formatted_msg = /\*\* \[Bugsnag\] (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} (\+\d{4})?): message\n$/
expect(Bugsnag.configuration.format_message("message")).to match(formatted_msg)
end

it "should log info messages to the set logger" do
expect(@logger.logs.size).to eq(0)
Bugsnag.configuration.info("Info message")
expect(@logger.logs.size).to eq(1)
log = @logger.logs.first
expect(log[:level]).to eq('info')
expect(log[:message]).to match(@string_regex)
expect(log).to eq({
:level => "info",
:name => "[BUGSNAG]",
:message => "Info message"
})
end

it "should log warning messages to the set logger" do
expect(@logger.logs.size).to eq(0)
Bugsnag.configuration.warn("Warning message")
expect(@logger.logs.size).to eq(1)
log = @logger.logs.first
expect(log[:level]).to eq('warning')
expect(log[:message]).to match(@string_regex)
expect(log).to eq({
:level => "warning",
:name => "[BUGSNAG]",
:message => "Warning message"
})
end

it "should log debug messages to the set logger" do
expect(@logger.logs.size).to eq(0)
Bugsnag.configuration.debug("Debug message")
expect(@logger.logs.size).to eq(1)
log = @logger.logs.first
expect(log[:level]).to eq('debug')
expect(log[:message]).to match(@string_regex)
expect(log).to eq({
:level => "debug",
:name => "[BUGSNAG]",
:message => "Debug message"
})
end

after do
Expand Down

0 comments on commit a5e2060

Please sign in to comment.