From c93d7cc1434005bc9148ee298a697db53798c6fb Mon Sep 17 00:00:00 2001 From: bogdan Date: Wed, 6 Jan 2021 14:58:01 +0000 Subject: [PATCH 01/31] Added the gemspec file --- json_rails_logger.gemspec | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 json_rails_logger.gemspec diff --git a/json_rails_logger.gemspec b/json_rails_logger.gemspec new file mode 100644 index 0000000..f0020c6 --- /dev/null +++ b/json_rails_logger.gemspec @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +Gem::Specification.new do |s| + s.name = 'json_rails_logger' + s.version = JsonRailsLogger::VERSION + s.date = '2021-01-06' + s.summary = 'Json rails logger' + s.description = 'A custom rails logger that outputs json instead of raw text' + s.authors = ['Bogdan-Adrian Marc'] + s.email = 'bogdan.marc@epimorphics.com' + s.files = ['lib/json_rails_logger.rb'] + s.homepage = 'https://github.com/epimorphics/json-rails-logger' + s.license = 'MIT' +end From dd93f79fcea79f522cd88df6bb5f91ec47e20270 Mon Sep 17 00:00:00 2001 From: bogdan Date: Wed, 6 Jan 2021 14:58:44 +0000 Subject: [PATCH 02/31] Initial skeleton for gem added --- lib/json_rails_logger.rb | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 lib/json_rails_logger.rb diff --git a/lib/json_rails_logger.rb b/lib/json_rails_logger.rb new file mode 100644 index 0000000..53420d2 --- /dev/null +++ b/lib/json_rails_logger.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +# A custom rails logger that outputs json instead of raw text +module JsonRailsLogger + def self.setup(app); end + + def self.enabled?(app); end +end From cf2d3bfd45f360f49eb8064896fd3f0c71394dfb Mon Sep 17 00:00:00 2001 From: bogdan Date: Wed, 6 Jan 2021 15:02:54 +0000 Subject: [PATCH 03/31] Added logger setup error class --- lib/json_rails_logger/error.rb | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 lib/json_rails_logger/error.rb diff --git a/lib/json_rails_logger/error.rb b/lib/json_rails_logger/error.rb new file mode 100644 index 0000000..331344a --- /dev/null +++ b/lib/json_rails_logger/error.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +module JsonRailsLogger + class LoggerSetupError < StandardError + end +end From 4485e25a572649ba594bdfe40b93facf55fdd674 Mon Sep 17 00:00:00 2001 From: bogdan Date: Wed, 6 Jan 2021 15:06:32 +0000 Subject: [PATCH 04/31] Version constant added --- lib/json_rails_logger/version.rb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 lib/json_rails_logger/version.rb diff --git a/lib/json_rails_logger/version.rb b/lib/json_rails_logger/version.rb new file mode 100644 index 0000000..73c9213 --- /dev/null +++ b/lib/json_rails_logger/version.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +module JsonRailsLogger + VERSION = '1.0.0' +end From d65ff9314e60c53ccaa02b03173e95ed30dc9ebf Mon Sep 17 00:00:00 2001 From: bogdan Date: Mon, 11 Jan 2021 16:34:30 +0000 Subject: [PATCH 05/31] Gemspec wording changes --- json_rails_logger.gemspec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/json_rails_logger.gemspec b/json_rails_logger.gemspec index f0020c6..bdac781 100644 --- a/json_rails_logger.gemspec +++ b/json_rails_logger.gemspec @@ -4,8 +4,8 @@ Gem::Specification.new do |s| s.name = 'json_rails_logger' s.version = JsonRailsLogger::VERSION s.date = '2021-01-06' - s.summary = 'Json rails logger' - s.description = 'A custom rails logger that outputs json instead of raw text' + s.summary = 'JSON Rails Logger' + s.description = 'A custom rails logger that outputs JSON instead of raw text' s.authors = ['Bogdan-Adrian Marc'] s.email = 'bogdan.marc@epimorphics.com' s.files = ['lib/json_rails_logger.rb'] From 2c00dd1bc8cd8672e90fde2af309036d158d60f5 Mon Sep 17 00:00:00 2001 From: bogdan Date: Mon, 11 Jan 2021 16:36:20 +0000 Subject: [PATCH 06/31] Changed version number and format --- lib/json_rails_logger/version.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/json_rails_logger/version.rb b/lib/json_rails_logger/version.rb index 73c9213..ffd0cc1 100644 --- a/lib/json_rails_logger/version.rb +++ b/lib/json_rails_logger/version.rb @@ -1,5 +1,8 @@ # frozen_string_literal: true module JsonRailsLogger - VERSION = '1.0.0' + MAJOR = 0 + MINOR = 1 + FIX = 0 + VERSION = "#{MAJOR}.#{MINOR}.#{FIX}" end From 3b6114f6cfb94de35e7a9de416b641206065edee Mon Sep 17 00:00:00 2001 From: bogdan Date: Tue, 12 Jan 2021 14:41:29 +0000 Subject: [PATCH 07/31] Included missing files in gemspec --- json_rails_logger.gemspec | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/json_rails_logger.gemspec b/json_rails_logger.gemspec index bdac781..860f0c1 100644 --- a/json_rails_logger.gemspec +++ b/json_rails_logger.gemspec @@ -1,5 +1,7 @@ # frozen_string_literal: true +require './lib/json_rails_logger/version' + Gem::Specification.new do |s| s.name = 'json_rails_logger' s.version = JsonRailsLogger::VERSION @@ -8,7 +10,7 @@ Gem::Specification.new do |s| s.description = 'A custom rails logger that outputs JSON instead of raw text' s.authors = ['Bogdan-Adrian Marc'] s.email = 'bogdan.marc@epimorphics.com' - s.files = ['lib/json_rails_logger.rb'] + s.files = ['./lib/json_rails_logger.rb'] s.homepage = 'https://github.com/epimorphics/json-rails-logger' s.license = 'MIT' end From 1ff010a8ac7e872d4ee676bd59d37141c89c75a6 Mon Sep 17 00:00:00 2001 From: bogdan Date: Tue, 12 Jan 2021 14:42:18 +0000 Subject: [PATCH 08/31] Added gem dependencies --- json_rails_logger.gemspec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/json_rails_logger.gemspec b/json_rails_logger.gemspec index 860f0c1..5bdfd33 100644 --- a/json_rails_logger.gemspec +++ b/json_rails_logger.gemspec @@ -13,4 +13,8 @@ Gem::Specification.new do |s| s.files = ['./lib/json_rails_logger.rb'] s.homepage = 'https://github.com/epimorphics/json-rails-logger' s.license = 'MIT' + + s.add_runtime_dependency 'json' + s.add_runtime_dependency 'lograge' + s.add_runtime_dependency 'railties' end From c09399d2623deb245f7ea424774b0536eb7c7660 Mon Sep 17 00:00:00 2001 From: bogdan Date: Tue, 12 Jan 2021 14:44:22 +0000 Subject: [PATCH 09/31] Required files and dependencies added to main file --- lib/json_rails_logger.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/json_rails_logger.rb b/lib/json_rails_logger.rb index 53420d2..7fc8dd3 100644 --- a/lib/json_rails_logger.rb +++ b/lib/json_rails_logger.rb @@ -1,5 +1,14 @@ # frozen_string_literal: true +require 'lograge' +require 'json_rails_logger/railtie' if defined?(Rails) + +require 'json_rails_logger/error.rb' +require 'json_rails_logger/logger.rb' +require 'json_rails_logger/version.rb' + +require 'json_rails_logger/formatter/json.rb' + # A custom rails logger that outputs json instead of raw text module JsonRailsLogger def self.setup(app); end From 9c58e9a1c70d2b8b6a89101774ed8503bce81a85 Mon Sep 17 00:00:00 2001 From: bogdan Date: Tue, 12 Jan 2021 14:46:22 +0000 Subject: [PATCH 10/31] Methods for setting up the gem added --- lib/json_rails_logger.rb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/json_rails_logger.rb b/lib/json_rails_logger.rb index 7fc8dd3..5614e02 100644 --- a/lib/json_rails_logger.rb +++ b/lib/json_rails_logger.rb @@ -11,7 +11,15 @@ # A custom rails logger that outputs json instead of raw text module JsonRailsLogger - def self.setup(app); end + def self.setup(app) + unless enabled?(app) + raise JsonRailsLogger::LoggerSetupError, + 'Please configure rails logger to use JsonRailsLogger' + end + end - def self.enabled?(app); end + def self.enabled?(app) + !app.config.logger.nil? && + app.config.logger.class == JsonRailsLogger::Logger + end end From 0a6f1455e231eaa0367004099e507fdbb568d68f Mon Sep 17 00:00:00 2001 From: bogdan Date: Tue, 12 Jan 2021 14:52:33 +0000 Subject: [PATCH 11/31] Added railtie used mainly for the lograge config --- lib/json_rails_logger/railtie.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 lib/json_rails_logger/railtie.rb diff --git a/lib/json_rails_logger/railtie.rb b/lib/json_rails_logger/railtie.rb new file mode 100644 index 0000000..a79439b --- /dev/null +++ b/lib/json_rails_logger/railtie.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module JsonRailsLogger + # This class is used to configure and setup lograge, as well as our gem + class Railtie < Rails::Railtie + config.lograge.formatter = Lograge::Formatters::Json.new + config.lograge.custom_options = lambda do |event| + { + exception: event.payload[:exception], + exception_object: event.payload[:exception_object] + } + end + + config.after_initialize do |app| + JsonRailsLogger.setup(app) if JsonRailsLogger.enabled?(app) + Lograge.setup(app) if JsonRailsLogger.enabled?(app) + end + end +end From 89c462be6730ea9671ad858351e9a6bb90ac0316 Mon Sep 17 00:00:00 2001 From: bogdan Date: Tue, 12 Jan 2021 14:55:07 +0000 Subject: [PATCH 12/31] Custom logger added This essentially sets up the logger so that it uses our JSON formatter; the support to switch between other formatters is also there --- lib/json_rails_logger/logger.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 lib/json_rails_logger/logger.rb diff --git a/lib/json_rails_logger/logger.rb b/lib/json_rails_logger/logger.rb new file mode 100644 index 0000000..bf4509a --- /dev/null +++ b/lib/json_rails_logger/logger.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module JsonRailsLogger + # The custom logger class that sets up our formatter + class Logger < ::Logger + def initialize(logdev, shift_age = 0, shift_size = 1_048_576, level: DEBUG, + progname: nil, formatter: nil, datetime_format: nil, + binmode: false, shift_period_suffix: '%Y%m%d') + @formatter = JsonRailsLogger::Formatter::Json.new + @formatter.datetime_format = datetime_format + super(logdev, shift_age, shift_size, level: level, + progname: progname, + formatter: @formatter, + datetime_format: datetime_format, + binmode: binmode, + shift_period_suffix: shift_period_suffix) + end + end +end From fb368cc0ae7b8e52d16e4ec1fb158f38bb0dfdcf Mon Sep 17 00:00:00 2001 From: bogdan Date: Tue, 12 Jan 2021 14:56:05 +0000 Subject: [PATCH 13/31] Added the JSON formatter --- lib/json_rails_logger/formatter/json.rb | 27 +++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 lib/json_rails_logger/formatter/json.rb diff --git a/lib/json_rails_logger/formatter/json.rb b/lib/json_rails_logger/formatter/json.rb new file mode 100644 index 0000000..b594c69 --- /dev/null +++ b/lib/json_rails_logger/formatter/json.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module JsonRailsLogger + module Formatter + # This class is the json formatter for our logger + class Json < ::Logger::Formatter + def call(severity, timestamp, _progname, raw_msg) + msg = normalize_message(raw_msg) + payload = { level: severity, timestamp: format_datetime(timestamp), environment: ::Rails.env } + + payload.merge!(message: msg) + + payload.to_json << "\n" + end + + private + + def normalize_message(raw_msg) + return raw_msg unless raw_msg.is_a?(String) + + JSON.parse(raw_msg) + rescue JSON::ParserError + raw_msg + end + end + end +end From 8504ebe103cd372c6277bda176275a31e5f1a1af Mon Sep 17 00:00:00 2001 From: bogdan Date: Wed, 13 Jan 2021 16:25:09 +0000 Subject: [PATCH 14/31] Formatter refactoring --- lib/json_rails_logger/formatter/json.rb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/json_rails_logger/formatter/json.rb b/lib/json_rails_logger/formatter/json.rb index b594c69..bc5176c 100644 --- a/lib/json_rails_logger/formatter/json.rb +++ b/lib/json_rails_logger/formatter/json.rb @@ -6,11 +6,15 @@ module Formatter class Json < ::Logger::Formatter def call(severity, timestamp, _progname, raw_msg) msg = normalize_message(raw_msg) - payload = { level: severity, timestamp: format_datetime(timestamp), environment: ::Rails.env } - payload.merge!(message: msg) + payload = { + level: severity, + timestamp: format_datetime(timestamp), + environment: ::Rails.env, + message: msg + } - payload.to_json << "\n" + "#{payload.to_json}\n" end private From 28d13f903b680eafbdd9d1890d8daf1b4b87bdb5 Mon Sep 17 00:00:00 2001 From: bogdan Date: Wed, 13 Jan 2021 16:26:45 +0000 Subject: [PATCH 15/31] Used the splat operator for logger args instead --- lib/json_rails_logger/logger.rb | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/json_rails_logger/logger.rb b/lib/json_rails_logger/logger.rb index bf4509a..f688d52 100644 --- a/lib/json_rails_logger/logger.rb +++ b/lib/json_rails_logger/logger.rb @@ -3,17 +3,15 @@ module JsonRailsLogger # The custom logger class that sets up our formatter class Logger < ::Logger - def initialize(logdev, shift_age = 0, shift_size = 1_048_576, level: DEBUG, - progname: nil, formatter: nil, datetime_format: nil, - binmode: false, shift_period_suffix: '%Y%m%d') + # List of all the arguments with their default values: + # logdev, shift_age = 0, shift_size = 1_048_576, level: DEBUG, + # progname: nil, formatter: nil, datetime_format: nil, + # binmode: false, shift_period_suffix: '%Y%m%d' + def initialize(*args) @formatter = JsonRailsLogger::Formatter::Json.new - @formatter.datetime_format = datetime_format - super(logdev, shift_age, shift_size, level: level, - progname: progname, - formatter: @formatter, - datetime_format: datetime_format, - binmode: binmode, - shift_period_suffix: shift_period_suffix) + @formatter.datetime_format = '%Y-%m-%d %H:%M:%S' + + super(*args, formatter: @formatter) end end end From cd0c68b935f11d776d2c8690f8efcd0c2acddfee Mon Sep 17 00:00:00 2001 From: bogdan Date: Fri, 15 Jan 2021 15:12:46 +0000 Subject: [PATCH 16/31] Added method for processing arguments --- lib/json_rails_logger/formatter/json.rb | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/json_rails_logger/formatter/json.rb b/lib/json_rails_logger/formatter/json.rb index bc5176c..a3f7533 100644 --- a/lib/json_rails_logger/formatter/json.rb +++ b/lib/json_rails_logger/formatter/json.rb @@ -4,14 +4,14 @@ module JsonRailsLogger module Formatter # This class is the json formatter for our logger class Json < ::Logger::Formatter - def call(severity, timestamp, _progname, raw_msg) - msg = normalize_message(raw_msg) + def call(severity, timestamp, progname, raw_msg) + args = process_arguments(severity, timestamp, progname, raw_msg) payload = { - level: severity, - timestamp: format_datetime(timestamp), + level: args[:severity], + timestamp: args[:timestamp], environment: ::Rails.env, - message: msg + message: args[:msg] } "#{payload.to_json}\n" @@ -19,6 +19,18 @@ def call(severity, timestamp, _progname, raw_msg) private + def process_arguments(severity, timestamp, progname, raw_msg) + sev = process_severity(severity) + timestp = process_timestamp(timestamp) + new_msg = process_message(raw_msg) + + { + severity: sev, + timestamp: timestp, + progname: progname, + msg: new_msg + } + end def normalize_message(raw_msg) return raw_msg unless raw_msg.is_a?(String) From 570a389255420252319f967980297ed895adf56b Mon Sep 17 00:00:00 2001 From: bogdan Date: Fri, 15 Jan 2021 15:14:25 +0000 Subject: [PATCH 17/31] Helper methods for arguments processing added --- lib/json_rails_logger/formatter/json.rb | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lib/json_rails_logger/formatter/json.rb b/lib/json_rails_logger/formatter/json.rb index a3f7533..151fd42 100644 --- a/lib/json_rails_logger/formatter/json.rb +++ b/lib/json_rails_logger/formatter/json.rb @@ -31,6 +31,26 @@ def process_arguments(severity, timestamp, progname, raw_msg) msg: new_msg } end + + def process_severity(severity) + severity.is_a?(String) && severity.match('FATAL') ? 'ERROR' : severity + end + + def process_timestamp(timestamp) + format_datetime(timestamp) + end + + def process_message(raw_msg) + msg = normalize_message(raw_msg) + + return msg unless msg.is_a?(String) + + status_message(msg) || + get_message(msg) || + user_agent_message(msg) || + msg + end + def normalize_message(raw_msg) return raw_msg unless raw_msg.is_a?(String) From 285e3cdf97d82dfe89467f49c74e22bab68929ed Mon Sep 17 00:00:00 2001 From: bogdan Date: Fri, 15 Jan 2021 15:15:08 +0000 Subject: [PATCH 18/31] Added methods for processing the message --- lib/json_rails_logger/formatter/json.rb | 30 +++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/lib/json_rails_logger/formatter/json.rb b/lib/json_rails_logger/formatter/json.rb index 151fd42..21e26a1 100644 --- a/lib/json_rails_logger/formatter/json.rb +++ b/lib/json_rails_logger/formatter/json.rb @@ -58,6 +58,36 @@ def normalize_message(raw_msg) rescue JSON::ParserError raw_msg end + + def status_message(msg) + status = msg.split(' ')[1] + { status: status } if msg.match(/Status [0-9]+/) + end + + def get_message(msg) + splitted_msg = msg.split(' ') + method = splitted_msg[0] + path = splitted_msg[1] + + unless msg.split(' ').length == 2 && msg.split(' ')[0]&.match('GET') + return nil + end + + { method: method, path: path } + end + + def user_agent_message(msg) + splitted_msg = msg.split("\n") + user_agent = splitted_msg[0]&.split('"')&.at(1) + accept = splitted_msg[1]&.split('"')&.at(1) + + unless msg.split(' ')[0]&.match('User-Agent:') && + splitted_msg[1]&.split(' ')&.at(0)&.match('Accept:') + return nil + end + + { user_agent: user_agent, accept: accept } + end end end end From 4120ba529c1bf60ff341fc368bfd3d18870f757e Mon Sep 17 00:00:00 2001 From: bogdan Date: Fri, 15 Jan 2021 15:24:00 +0000 Subject: [PATCH 19/31] Removed leading and trailing whitespace --- lib/json_rails_logger/formatter/json.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/json_rails_logger/formatter/json.rb b/lib/json_rails_logger/formatter/json.rb index 21e26a1..7d7b50e 100644 --- a/lib/json_rails_logger/formatter/json.rb +++ b/lib/json_rails_logger/formatter/json.rb @@ -48,7 +48,7 @@ def process_message(raw_msg) status_message(msg) || get_message(msg) || user_agent_message(msg) || - msg + msg.strip end def normalize_message(raw_msg) From 9b55ab5c13ffd200bc60d09323cf55cc6565e1d0 Mon Sep 17 00:00:00 2001 From: bogdan Date: Fri, 15 Jan 2021 15:34:28 +0000 Subject: [PATCH 20/31] Changed environment field to rails environment --- lib/json_rails_logger/formatter/json.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/json_rails_logger/formatter/json.rb b/lib/json_rails_logger/formatter/json.rb index 7d7b50e..18a6847 100644 --- a/lib/json_rails_logger/formatter/json.rb +++ b/lib/json_rails_logger/formatter/json.rb @@ -10,7 +10,7 @@ def call(severity, timestamp, progname, raw_msg) payload = { level: args[:severity], timestamp: args[:timestamp], - environment: ::Rails.env, + rails_environment: ::Rails.env, message: args[:msg] } From d6f40550a64efc4396f5d510a8574ada69bbefc8 Mon Sep 17 00:00:00 2001 From: bogdan Date: Thu, 21 Jan 2021 16:51:01 +0000 Subject: [PATCH 21/31] Added rake as dependency --- Gemfile | 6 +++ Gemfile.lock | 81 +++++++++++++++++++++++++++++++++++++++ json_rails_logger.gemspec | 2 + 3 files changed, 89 insertions(+) create mode 100644 Gemfile create mode 100644 Gemfile.lock diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..e967149 --- /dev/null +++ b/Gemfile @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +source 'https://rubygems.org' +git_source(:github) { |repo| "https://github.com/#{repo}.git" } + +gemspec diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..5cf6eec --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,81 @@ +PATH + remote: . + specs: + json_rails_logger (0.1.0) + json + lograge + railties + +GEM + remote: https://rubygems.org/ + specs: + actionpack (6.1.1) + actionview (= 6.1.1) + activesupport (= 6.1.1) + rack (~> 2.0, >= 2.0.9) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.2.0) + actionview (6.1.1) + activesupport (= 6.1.1) + builder (~> 3.1) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.1, >= 1.2.0) + activesupport (6.1.1) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + zeitwerk (~> 2.3) + builder (3.2.4) + concurrent-ruby (1.1.8) + crass (1.0.6) + erubi (1.10.0) + i18n (1.8.7) + concurrent-ruby (~> 1.0) + json (2.5.1) + lograge (0.11.2) + actionpack (>= 4) + activesupport (>= 4) + railties (>= 4) + request_store (~> 1.0) + loofah (2.9.0) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + method_source (1.0.0) + minitest (5.14.3) + nokogiri (1.11.1-x86_64-darwin) + racc (~> 1.4) + racc (1.5.2) + rack (2.2.3) + rack-test (1.1.0) + rack (>= 1.0, < 3) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) + rails-html-sanitizer (1.3.0) + loofah (~> 2.3) + railties (6.1.1) + actionpack (= 6.1.1) + activesupport (= 6.1.1) + method_source + rake (>= 0.8.7) + thor (~> 1.0) + rake (13.0.3) + request_store (1.5.0) + rack (>= 1.4) + thor (1.1.0) + tzinfo (2.0.4) + concurrent-ruby (~> 1.0) + zeitwerk (2.4.2) + +PLATFORMS + ruby + +DEPENDENCIES + json_rails_logger! + rake + +BUNDLED WITH + 2.1.4 diff --git a/json_rails_logger.gemspec b/json_rails_logger.gemspec index 5bdfd33..cdfacce 100644 --- a/json_rails_logger.gemspec +++ b/json_rails_logger.gemspec @@ -17,4 +17,6 @@ Gem::Specification.new do |s| s.add_runtime_dependency 'json' s.add_runtime_dependency 'lograge' s.add_runtime_dependency 'railties' + + s.add_development_dependency 'rake' end From badc4b1f39610c8306ef60f2aafebb70082bbac9 Mon Sep 17 00:00:00 2001 From: bogdan Date: Thu, 21 Jan 2021 16:51:24 +0000 Subject: [PATCH 22/31] New rake task for tests added --- Rakefile | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Rakefile diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..366066a --- /dev/null +++ b/Rakefile @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +require 'rake/testtask' + +Rake::TestTask.new(:test) do |t| + t.libs = '' + t.test_files = FileList['test/*_test.rb'] +end + +task default: :test From cd4b31b4f8d9cc24e440c890d429f9c327cd41fa Mon Sep 17 00:00:00 2001 From: bogdan Date: Thu, 21 Jan 2021 16:52:44 +0000 Subject: [PATCH 23/31] Fixing imports for testing --- lib/json_rails_logger.rb | 10 +++++----- lib/json_rails_logger/formatter/json.rb | 4 ++++ lib/json_rails_logger/logger.rb | 2 ++ lib/json_rails_logger/railtie.rb | 3 +++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/json_rails_logger.rb b/lib/json_rails_logger.rb index 5614e02..9ab4aaa 100644 --- a/lib/json_rails_logger.rb +++ b/lib/json_rails_logger.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true require 'lograge' -require 'json_rails_logger/railtie' if defined?(Rails) +require './lib/json_rails_logger/railtie' if defined?(Rails) -require 'json_rails_logger/error.rb' -require 'json_rails_logger/logger.rb' -require 'json_rails_logger/version.rb' +require './lib/json_rails_logger/error.rb' +require './lib/json_rails_logger/logger.rb' +require './lib/json_rails_logger/version.rb' -require 'json_rails_logger/formatter/json.rb' +require './lib/json_rails_logger/formatter/json.rb' # A custom rails logger that outputs json instead of raw text module JsonRailsLogger diff --git a/lib/json_rails_logger/formatter/json.rb b/lib/json_rails_logger/formatter/json.rb index bc5176c..44df84e 100644 --- a/lib/json_rails_logger/formatter/json.rb +++ b/lib/json_rails_logger/formatter/json.rb @@ -1,5 +1,9 @@ # frozen_string_literal: true +require 'logger' +require 'json' +require 'rails' + module JsonRailsLogger module Formatter # This class is the json formatter for our logger diff --git a/lib/json_rails_logger/logger.rb b/lib/json_rails_logger/logger.rb index f688d52..58b2818 100644 --- a/lib/json_rails_logger/logger.rb +++ b/lib/json_rails_logger/logger.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'logger' + module JsonRailsLogger # The custom logger class that sets up our formatter class Logger < ::Logger diff --git a/lib/json_rails_logger/railtie.rb b/lib/json_rails_logger/railtie.rb index a79439b..610c739 100644 --- a/lib/json_rails_logger/railtie.rb +++ b/lib/json_rails_logger/railtie.rb @@ -1,5 +1,8 @@ # frozen_string_literal: true +require 'rails' +require 'lograge' + module JsonRailsLogger # This class is used to configure and setup lograge, as well as our gem class Railtie < Rails::Railtie From 70eee5749ab3772c1fa4a631e7f970de647e35da Mon Sep 17 00:00:00 2001 From: bogdan Date: Thu, 21 Jan 2021 16:53:21 +0000 Subject: [PATCH 24/31] Added unit tests for formatter --- test/formatter_test.rb | 56 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 test/formatter_test.rb diff --git a/test/formatter_test.rb b/test/formatter_test.rb new file mode 100644 index 0000000..73183a5 --- /dev/null +++ b/test/formatter_test.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +require 'minitest/autorun' + +require './lib/json_rails_logger/formatter/json.rb' + +describe 'formatter' do + describe 'json' do + before do + @json_formatter = JsonRailsLogger::Formatter::Json.new + @json_formatter.datetime_format = '%Y-%m-%d %H:%M:%S' + @time = DateTime.parse('2020-12-15T20:15:21') + @progname = 'progname' + end + + it 'should replace FATAL with ERROR for severity' do + output = JSON.parse(@json_formatter.call('FATAL', @time, @progname, + '[Webpacker] Compilation error!')) + _(output['level']).must_equal('ERROR') + end + + it 'should parse status messages to json' do + output = JSON.parse(@json_formatter.call('INFO', @time, @progname, 'Status 200')) + _(output['status']).must_equal('200') + end + + it 'should parse method and path for requests' do + output = JSON.parse(@json_formatter.call('INFO', @time, @progname, 'GET http://fsa-rp-test.epimorphics.net/')) + _(output['method']).must_equal('GET') + _(output['path']).must_equal('http://fsa-rp-test.epimorphics.net/') + end + + it 'should parse user agent messages' do + output = JSON.parse(@json_formatter.call('INFO', @time, @progname, + "User-Agent: \"Faraday v1.3.0\"\nAccept: \"application/json\"")) + _(output['user_agent']).must_equal('Faraday v1.3.0') + _(output['accept']).must_equal('application/json') + end + + it 'should correctly format the timestamp' do + output = JSON.parse(@json_formatter.call('INFO', @time, @progname, + "[Webpacker] Everything's up-to-date. Nothing to do")) + _(output['timestamp']).must_equal('2020-12-15 20:15:21') + end + + it 'should move json to top level if message is json object' do + json_object = { + method: 'GET', + path: 'http://fsa-rp-test.epimorphics.net/' + } + output = JSON.parse(@json_formatter.call('INFO', @time, @progname, json_object)) + _(output['method']).must_equal('GET') + _(output['path']).must_equal('http://fsa-rp-test.epimorphics.net/') + end + end +end From de0bae59924d6bd8b77e037a3d87e51bfab3a2b5 Mon Sep 17 00:00:00 2001 From: bogdan Date: Fri, 22 Jan 2021 15:59:28 +0000 Subject: [PATCH 25/31] Moved all imports into the main file --- lib/json_rails_logger.rb | 4 ++++ lib/json_rails_logger/formatter/json.rb | 4 ---- lib/json_rails_logger/logger.rb | 2 -- lib/json_rails_logger/railtie.rb | 3 --- 4 files changed, 4 insertions(+), 9 deletions(-) diff --git a/lib/json_rails_logger.rb b/lib/json_rails_logger.rb index 9ab4aaa..9567a77 100644 --- a/lib/json_rails_logger.rb +++ b/lib/json_rails_logger.rb @@ -1,6 +1,10 @@ # frozen_string_literal: true +require 'logger' +require 'json' +require 'rails' require 'lograge' + require './lib/json_rails_logger/railtie' if defined?(Rails) require './lib/json_rails_logger/error.rb' diff --git a/lib/json_rails_logger/formatter/json.rb b/lib/json_rails_logger/formatter/json.rb index 44df84e..bc5176c 100644 --- a/lib/json_rails_logger/formatter/json.rb +++ b/lib/json_rails_logger/formatter/json.rb @@ -1,9 +1,5 @@ # frozen_string_literal: true -require 'logger' -require 'json' -require 'rails' - module JsonRailsLogger module Formatter # This class is the json formatter for our logger diff --git a/lib/json_rails_logger/logger.rb b/lib/json_rails_logger/logger.rb index 58b2818..f688d52 100644 --- a/lib/json_rails_logger/logger.rb +++ b/lib/json_rails_logger/logger.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'logger' - module JsonRailsLogger # The custom logger class that sets up our formatter class Logger < ::Logger diff --git a/lib/json_rails_logger/railtie.rb b/lib/json_rails_logger/railtie.rb index 610c739..a79439b 100644 --- a/lib/json_rails_logger/railtie.rb +++ b/lib/json_rails_logger/railtie.rb @@ -1,8 +1,5 @@ # frozen_string_literal: true -require 'rails' -require 'lograge' - module JsonRailsLogger # This class is used to configure and setup lograge, as well as our gem class Railtie < Rails::Railtie From a0d93356333572d7b26e706767f8c99f6c867395 Mon Sep 17 00:00:00 2001 From: bogdan Date: Fri, 22 Jan 2021 16:43:29 +0000 Subject: [PATCH 26/31] Renamed Json to JsonFormatter and removed Formatter module --- lib/json_rails_logger.rb | 11 ++++----- lib/json_rails_logger/formatter/json.rb | 31 ------------------------- lib/json_rails_logger/json_formatter.rb | 29 +++++++++++++++++++++++ lib/json_rails_logger/logger.rb | 2 +- test/formatter_test.rb | 4 ++-- 5 files changed, 37 insertions(+), 40 deletions(-) delete mode 100644 lib/json_rails_logger/formatter/json.rb create mode 100644 lib/json_rails_logger/json_formatter.rb diff --git a/lib/json_rails_logger.rb b/lib/json_rails_logger.rb index 9567a77..f3dd8b6 100644 --- a/lib/json_rails_logger.rb +++ b/lib/json_rails_logger.rb @@ -5,13 +5,12 @@ require 'rails' require 'lograge' -require './lib/json_rails_logger/railtie' if defined?(Rails) +require_relative 'json_rails_logger/railtie' if defined?(Rails) -require './lib/json_rails_logger/error.rb' -require './lib/json_rails_logger/logger.rb' -require './lib/json_rails_logger/version.rb' - -require './lib/json_rails_logger/formatter/json.rb' +require_relative 'json_rails_logger/json_formatter.rb' +require_relative 'json_rails_logger/error.rb' +require_relative 'json_rails_logger/logger.rb' +require_relative 'json_rails_logger/version.rb' # A custom rails logger that outputs json instead of raw text module JsonRailsLogger diff --git a/lib/json_rails_logger/formatter/json.rb b/lib/json_rails_logger/formatter/json.rb deleted file mode 100644 index bc5176c..0000000 --- a/lib/json_rails_logger/formatter/json.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -module JsonRailsLogger - module Formatter - # This class is the json formatter for our logger - class Json < ::Logger::Formatter - def call(severity, timestamp, _progname, raw_msg) - msg = normalize_message(raw_msg) - - payload = { - level: severity, - timestamp: format_datetime(timestamp), - environment: ::Rails.env, - message: msg - } - - "#{payload.to_json}\n" - end - - private - - def normalize_message(raw_msg) - return raw_msg unless raw_msg.is_a?(String) - - JSON.parse(raw_msg) - rescue JSON::ParserError - raw_msg - end - end - end -end diff --git a/lib/json_rails_logger/json_formatter.rb b/lib/json_rails_logger/json_formatter.rb new file mode 100644 index 0000000..ab7115d --- /dev/null +++ b/lib/json_rails_logger/json_formatter.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module JsonRailsLogger + # This class is the json formatter for our logger + class JsonFormatter < ::Logger::Formatter + def call(severity, timestamp, _progname, raw_msg) + msg = normalize_message(raw_msg) + + payload = { + level: severity, + timestamp: format_datetime(timestamp), + environment: ::Rails.env, + message: msg + } + + "#{payload.to_json}\n" + end + + private + + def normalize_message(raw_msg) + return raw_msg unless raw_msg.is_a?(String) + + JSON.parse(raw_msg) + rescue JSON::ParserError + raw_msg + end + end +end diff --git a/lib/json_rails_logger/logger.rb b/lib/json_rails_logger/logger.rb index f688d52..42ff580 100644 --- a/lib/json_rails_logger/logger.rb +++ b/lib/json_rails_logger/logger.rb @@ -8,7 +8,7 @@ class Logger < ::Logger # progname: nil, formatter: nil, datetime_format: nil, # binmode: false, shift_period_suffix: '%Y%m%d' def initialize(*args) - @formatter = JsonRailsLogger::Formatter::Json.new + @formatter = JsonRailsLogger::JsonFormatter.new @formatter.datetime_format = '%Y-%m-%d %H:%M:%S' super(*args, formatter: @formatter) diff --git a/test/formatter_test.rb b/test/formatter_test.rb index 73183a5..1ae22a0 100644 --- a/test/formatter_test.rb +++ b/test/formatter_test.rb @@ -2,12 +2,12 @@ require 'minitest/autorun' -require './lib/json_rails_logger/formatter/json.rb' +require './lib/json_rails_logger.rb' describe 'formatter' do describe 'json' do before do - @json_formatter = JsonRailsLogger::Formatter::Json.new + @json_formatter = JsonRailsLogger::JsonFormatter.new @json_formatter.datetime_format = '%Y-%m-%d %H:%M:%S' @time = DateTime.parse('2020-12-15T20:15:21') @progname = 'progname' From 289be6f3c9298df40a5eb154bcef4dc11130d03a Mon Sep 17 00:00:00 2001 From: bogdan Date: Fri, 22 Jan 2021 17:16:31 +0000 Subject: [PATCH 27/31] Fixed rubocop error --- lib/json_rails_logger.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/json_rails_logger.rb b/lib/json_rails_logger.rb index f3dd8b6..cfdf73a 100644 --- a/lib/json_rails_logger.rb +++ b/lib/json_rails_logger.rb @@ -15,10 +15,10 @@ # A custom rails logger that outputs json instead of raw text module JsonRailsLogger def self.setup(app) - unless enabled?(app) - raise JsonRailsLogger::LoggerSetupError, - 'Please configure rails logger to use JsonRailsLogger' - end + return if enabled?(app) + + raise JsonRailsLogger::LoggerSetupError, + 'Please configure rails logger to use JsonRailsLogger' end def self.enabled?(app) From 6afe1484be3cceb72f73717e3dd0f6a272390a5e Mon Sep 17 00:00:00 2001 From: bogdan Date: Fri, 22 Jan 2021 17:16:52 +0000 Subject: [PATCH 28/31] Refactored unit tests --- test/formatter_test.rb | 122 +++++++++++++++++++++++++---------------- 1 file changed, 74 insertions(+), 48 deletions(-) diff --git a/test/formatter_test.rb b/test/formatter_test.rb index 1ae22a0..b26ca58 100644 --- a/test/formatter_test.rb +++ b/test/formatter_test.rb @@ -4,53 +4,79 @@ require './lib/json_rails_logger.rb' -describe 'formatter' do - describe 'json' do - before do - @json_formatter = JsonRailsLogger::JsonFormatter.new - @json_formatter.datetime_format = '%Y-%m-%d %H:%M:%S' - @time = DateTime.parse('2020-12-15T20:15:21') - @progname = 'progname' - end - - it 'should replace FATAL with ERROR for severity' do - output = JSON.parse(@json_formatter.call('FATAL', @time, @progname, - '[Webpacker] Compilation error!')) - _(output['level']).must_equal('ERROR') - end - - it 'should parse status messages to json' do - output = JSON.parse(@json_formatter.call('INFO', @time, @progname, 'Status 200')) - _(output['status']).must_equal('200') - end - - it 'should parse method and path for requests' do - output = JSON.parse(@json_formatter.call('INFO', @time, @progname, 'GET http://fsa-rp-test.epimorphics.net/')) - _(output['method']).must_equal('GET') - _(output['path']).must_equal('http://fsa-rp-test.epimorphics.net/') - end - - it 'should parse user agent messages' do - output = JSON.parse(@json_formatter.call('INFO', @time, @progname, - "User-Agent: \"Faraday v1.3.0\"\nAccept: \"application/json\"")) - _(output['user_agent']).must_equal('Faraday v1.3.0') - _(output['accept']).must_equal('application/json') - end - - it 'should correctly format the timestamp' do - output = JSON.parse(@json_formatter.call('INFO', @time, @progname, - "[Webpacker] Everything's up-to-date. Nothing to do")) - _(output['timestamp']).must_equal('2020-12-15 20:15:21') - end - - it 'should move json to top level if message is json object' do - json_object = { - method: 'GET', - path: 'http://fsa-rp-test.epimorphics.net/' - } - output = JSON.parse(@json_formatter.call('INFO', @time, @progname, json_object)) - _(output['method']).must_equal('GET') - _(output['path']).must_equal('http://fsa-rp-test.epimorphics.net/') - end +describe 'JsonRailsLogger::JsonFormatter' do # rubocop:disable Metrics/BlockLength + let(:fixture) do + formatter = JsonRailsLogger::JsonFormatter.new + formatter.datetime_format = '%Y-%m-%d %H:%M:%S' + formatter + end + + let(:timestamp) { DateTime.parse('2020-12-15T20:15:21') } + let(:progname) { 'progname' } + + it 'should replace FATAL with ERROR for severity' do + message = '[Webpacker] Compilation error!' + + log_output = fixture.call('FATAL', timestamp, progname, message) + _(log_output).must_be_kind_of(String) + + json_output = JSON.parse(log_output) + _(json_output['level']).must_equal('ERROR') + end + + it 'should parse status messages to json' do + message = 'Status 200' + + log_output = fixture.call('INFO', timestamp, progname, message) + _(log_output).must_be_kind_of(String) + + json_output = JSON.parse(log_output) + _(json_output['status']).must_equal('200') + end + + it 'should parse method and path for requests' do + message = 'GET http://fsa-rp-test.epimorphics.net/' + + log_output = fixture.call('INFO', timestamp, progname, message) + _(log_output).must_be_kind_of(String) + + json_output = JSON.parse(log_output) + _(json_output['method']).must_equal('GET') + _(json_output['path']).must_equal('http://fsa-rp-test.epimorphics.net/') + end + + it 'should parse user agent messages' do + message = "User-Agent: \"Faraday v1.3.0\"\nAccept: \"application/json\"" + + log_output = fixture.call('INFO', timestamp, progname, message) + _(log_output).must_be_kind_of(String) + + json_output = JSON.parse(log_output) + _(json_output['user_agent']).must_equal('Faraday v1.3.0') + _(json_output['accept']).must_equal('application/json') + end + + it 'should correctly format the timestamp' do + message = "[Webpacker] Everything's up-to-date. Nothing to do" + + log_output = fixture.call('INFO', timestamp, progname, message) + _(log_output).must_be_kind_of(String) + + json_output = JSON.parse(log_output) + _(json_output['timestamp']).must_equal('2020-12-15 20:15:21') + end + + it 'should move json to top level if message is json object' do + json_fixture = { + method: 'GET', + path: 'http://fsa-rp-test.epimorphics.net/' + } + + log_output = fixture.call('INFO', timestamp, progname, json_fixture) + _(log_output).must_be_kind_of(String) + + json_output = JSON.parse(log_output) + _(json_output['method']).must_equal('GET') + _(json_output['path']).must_equal('http://fsa-rp-test.epimorphics.net/') end end From c4726fb348246663aecf13eb3b87dbf7132662a5 Mon Sep 17 00:00:00 2001 From: bogdan Date: Fri, 22 Jan 2021 19:08:33 +0000 Subject: [PATCH 29/31] Heavy refactoring for the formatter This commit also includes json flattening --- lib/json_rails_logger/formatter/json.rb | 64 ++++++++++++------------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/lib/json_rails_logger/formatter/json.rb b/lib/json_rails_logger/formatter/json.rb index 18a6847..6b80223 100644 --- a/lib/json_rails_logger/formatter/json.rb +++ b/lib/json_rails_logger/formatter/json.rb @@ -4,34 +4,24 @@ module JsonRailsLogger module Formatter # This class is the json formatter for our logger class Json < ::Logger::Formatter - def call(severity, timestamp, progname, raw_msg) - args = process_arguments(severity, timestamp, progname, raw_msg) + def call(severity, timestamp, _progname, raw_msg) + sev = process_severity(severity) + timestp = process_timestamp(timestamp) + msg = process_message(raw_msg) payload = { - level: args[:severity], - timestamp: args[:timestamp], - rails_environment: ::Rails.env, - message: args[:msg] + level: sev, + timestamp: timestp, + rails_environment: ::Rails.env } + payload.merge!(msg.is_a?(String) ? { message: msg } : msg) + "#{payload.to_json}\n" end private - def process_arguments(severity, timestamp, progname, raw_msg) - sev = process_severity(severity) - timestp = process_timestamp(timestamp) - new_msg = process_message(raw_msg) - - { - severity: sev, - timestamp: timestp, - progname: progname, - msg: new_msg - } - end - def process_severity(severity) severity.is_a?(String) && severity.match('FATAL') ? 'ERROR' : severity end @@ -45,10 +35,11 @@ def process_message(raw_msg) return msg unless msg.is_a?(String) - status_message(msg) || - get_message(msg) || - user_agent_message(msg) || - msg.strip + return status_message(msg) if status_message?(msg) + return get_message(msg) if get_message?(msg) + return user_agent_message(msg) if user_agent_message?(msg) + + msg.strip end def normalize_message(raw_msg) @@ -59,9 +50,20 @@ def normalize_message(raw_msg) raw_msg end + def status_message?(msg) + msg.is_a?(String) && + msg.match(/Status [0-9]+/) + end + def status_message(msg) status = msg.split(' ')[1] - { status: status } if msg.match(/Status [0-9]+/) + + { status: status } + end + + def get_message?(msg) + msg.is_a?(String) && + msg.match(/GET http\S+/) end def get_message(msg) @@ -69,23 +71,19 @@ def get_message(msg) method = splitted_msg[0] path = splitted_msg[1] - unless msg.split(' ').length == 2 && msg.split(' ')[0]&.match('GET') - return nil - end - { method: method, path: path } end + def user_agent_message?(msg) + msg.is_a?(String) && + msg.match(/User-Agent: .+Accept: .+/) + end + def user_agent_message(msg) splitted_msg = msg.split("\n") user_agent = splitted_msg[0]&.split('"')&.at(1) accept = splitted_msg[1]&.split('"')&.at(1) - unless msg.split(' ')[0]&.match('User-Agent:') && - splitted_msg[1]&.split(' ')&.at(0)&.match('Accept:') - return nil - end - { user_agent: user_agent, accept: accept } end end From 4062c72d07d152ae4b4ca5d37a41ef54a5385b5e Mon Sep 17 00:00:00 2001 From: bogdan Date: Mon, 25 Jan 2021 16:28:21 +0000 Subject: [PATCH 30/31] Refactoring the formatter --- lib/json_rails_logger/formatter/json.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/json_rails_logger/formatter/json.rb b/lib/json_rails_logger/formatter/json.rb index 6b80223..a6c04ff 100644 --- a/lib/json_rails_logger/formatter/json.rb +++ b/lib/json_rails_logger/formatter/json.rb @@ -15,7 +15,7 @@ def call(severity, timestamp, _progname, raw_msg) rails_environment: ::Rails.env } - payload.merge!(msg.is_a?(String) ? { message: msg } : msg) + payload.merge!(msg) "#{payload.to_json}\n" end @@ -23,7 +23,7 @@ def call(severity, timestamp, _progname, raw_msg) private def process_severity(severity) - severity.is_a?(String) && severity.match('FATAL') ? 'ERROR' : severity + { 'FATAL' => 'ERROR' }[severity] || severity end def process_timestamp(timestamp) @@ -39,7 +39,7 @@ def process_message(raw_msg) return get_message(msg) if get_message?(msg) return user_agent_message(msg) if user_agent_message?(msg) - msg.strip + { message: msg.strip } end def normalize_message(raw_msg) From a998fbe4c726d9c1c1d005e49df58ad7c7be4c41 Mon Sep 17 00:00:00 2001 From: bogdan Date: Mon, 25 Jan 2021 17:08:04 +0000 Subject: [PATCH 31/31] Fixed user-agent regex error --- lib/json_rails_logger/json_formatter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/json_rails_logger/json_formatter.rb b/lib/json_rails_logger/json_formatter.rb index f7ed761..f74ce32 100644 --- a/lib/json_rails_logger/json_formatter.rb +++ b/lib/json_rails_logger/json_formatter.rb @@ -75,7 +75,7 @@ def get_message(msg) def user_agent_message?(msg) msg.is_a?(String) && - msg.match(/User-Agent: .+Accept: .+/) + msg.match(/User-Agent: .+Accept: .+/m) end def user_agent_message(msg)