semantic_logger 4.2.0 → 4.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -3
  3. data/Rakefile +1 -1
  4. data/lib/semantic_logger/ansi_colors.rb +11 -12
  5. data/lib/semantic_logger/appender.rb +4 -5
  6. data/lib/semantic_logger/appender/async.rb +24 -16
  7. data/lib/semantic_logger/appender/async_batch.rb +1 -4
  8. data/lib/semantic_logger/appender/bugsnag.rb +67 -63
  9. data/lib/semantic_logger/appender/elasticsearch.rb +154 -157
  10. data/lib/semantic_logger/appender/elasticsearch_http.rb +59 -55
  11. data/lib/semantic_logger/appender/file.rb +1 -3
  12. data/lib/semantic_logger/appender/graylog.rb +114 -110
  13. data/lib/semantic_logger/appender/honeybadger.rb +54 -51
  14. data/lib/semantic_logger/appender/http.rb +194 -190
  15. data/lib/semantic_logger/appender/kafka.rb +152 -149
  16. data/lib/semantic_logger/appender/mongodb.rb +3 -3
  17. data/lib/semantic_logger/appender/new_relic.rb +52 -49
  18. data/lib/semantic_logger/appender/sentry.rb +59 -54
  19. data/lib/semantic_logger/appender/splunk.rb +108 -103
  20. data/lib/semantic_logger/appender/splunk_http.rb +82 -79
  21. data/lib/semantic_logger/appender/syslog.rb +4 -5
  22. data/lib/semantic_logger/appender/tcp.rb +8 -29
  23. data/lib/semantic_logger/appender/udp.rb +2 -3
  24. data/lib/semantic_logger/appender/wrapper.rb +2 -2
  25. data/lib/semantic_logger/base.rb +18 -16
  26. data/lib/semantic_logger/concerns/compatibility.rb +0 -1
  27. data/lib/semantic_logger/core_ext/thread.rb +0 -1
  28. data/lib/semantic_logger/formatters.rb +3 -5
  29. data/lib/semantic_logger/formatters/base.rb +2 -3
  30. data/lib/semantic_logger/formatters/color.rb +29 -12
  31. data/lib/semantic_logger/formatters/default.rb +10 -10
  32. data/lib/semantic_logger/formatters/json.rb +0 -2
  33. data/lib/semantic_logger/formatters/one_line.rb +2 -2
  34. data/lib/semantic_logger/formatters/raw.rb +7 -10
  35. data/lib/semantic_logger/formatters/signalfx.rb +3 -5
  36. data/lib/semantic_logger/formatters/syslog.rb +2 -3
  37. data/lib/semantic_logger/formatters/syslog_cee.rb +2 -3
  38. data/lib/semantic_logger/jruby/garbage_collection_logger.rb +8 -5
  39. data/lib/semantic_logger/log.rb +17 -17
  40. data/lib/semantic_logger/loggable.rb +6 -9
  41. data/lib/semantic_logger/logger.rb +0 -1
  42. data/lib/semantic_logger/metric/new_relic.rb +58 -55
  43. data/lib/semantic_logger/metric/signalfx.rb +108 -106
  44. data/lib/semantic_logger/metric/statsd.rb +2 -3
  45. data/lib/semantic_logger/processor.rb +9 -9
  46. data/lib/semantic_logger/semantic_logger.rb +50 -30
  47. data/lib/semantic_logger/subscriber.rb +0 -1
  48. data/lib/semantic_logger/utils.rb +37 -37
  49. data/lib/semantic_logger/version.rb +2 -2
  50. data/test/appender/async_batch_test.rb +0 -1
  51. data/test/appender/async_test.rb +0 -1
  52. data/test/appender/bugsnag_test.rb +7 -8
  53. data/test/appender/elasticsearch_http_test.rb +5 -6
  54. data/test/appender/elasticsearch_test.rb +14 -10
  55. data/test/appender/file_test.rb +5 -6
  56. data/test/appender/graylog_test.rb +8 -8
  57. data/test/appender/honeybadger_test.rb +6 -7
  58. data/test/appender/http_test.rb +4 -5
  59. data/test/appender/kafka_test.rb +5 -6
  60. data/test/appender/mongodb_test.rb +11 -13
  61. data/test/appender/new_relic_test.rb +8 -9
  62. data/test/appender/newrelic_rpm.rb +1 -1
  63. data/test/appender/sentry_test.rb +7 -8
  64. data/test/appender/splunk_http_test.rb +4 -4
  65. data/test/appender/splunk_test.rb +1 -3
  66. data/test/appender/syslog_test.rb +3 -5
  67. data/test/appender/tcp_test.rb +4 -5
  68. data/test/appender/udp_test.rb +4 -5
  69. data/test/appender/wrapper_test.rb +2 -3
  70. data/test/concerns/compatibility_test.rb +0 -1
  71. data/test/debug_as_trace_logger_test.rb +0 -1
  72. data/test/formatters/color_test.rb +5 -6
  73. data/test/formatters/default_test.rb +16 -17
  74. data/test/formatters/one_line_test.rb +1 -2
  75. data/test/formatters/signalfx_test.rb +8 -11
  76. data/test/formatters_test.rb +3 -3
  77. data/test/in_memory_appender.rb +0 -1
  78. data/test/in_memory_appender_helper.rb +1 -1
  79. data/test/in_memory_batch_appender.rb +0 -1
  80. data/test/in_memory_metrics_appender.rb +0 -1
  81. data/test/loggable_test.rb +2 -3
  82. data/test/logger_test.rb +11 -14
  83. data/test/measure_test.rb +13 -15
  84. data/test/metric/new_relic_test.rb +2 -3
  85. data/test/metric/signalfx_test.rb +4 -5
  86. data/test/semantic_logger_test.rb +28 -3
  87. data/test/test_helper.rb +6 -7
  88. metadata +34 -34
@@ -10,65 +10,69 @@ require 'date'
10
10
  # appender: :elasticsearch_http,
11
11
  # url: 'http://localhost:9200'
12
12
  # )
13
- class SemanticLogger::Appender::ElasticsearchHttp < SemanticLogger::Appender::Http
14
- attr_accessor :index, :type
13
+ module SemanticLogger
14
+ module Appender
15
+ class ElasticsearchHttp < SemanticLogger::Appender::Http
16
+ attr_accessor :index, :type
15
17
 
16
- # Create Elasticsearch appender over persistent HTTP(S)
17
- #
18
- # Parameters:
19
- # index: [String]
20
- # Prefix of the index to store the logs in Elasticsearch.
21
- # The final index appends the date so that indexes are used per day.
22
- # I.e. The final index will look like 'semantic_logger-YYYY.MM.DD'
23
- # Default: 'semantic_logger'
24
- #
25
- # type: [String]
26
- # Document type to associate with logs when they are written.
27
- # Default: 'log'
28
- #
29
- # level: [:trace | :debug | :info | :warn | :error | :fatal]
30
- # Override the log level for this appender.
31
- # Default: SemanticLogger.default_level
32
- #
33
- # formatter: [Object|Proc|Symbol|Hash]
34
- # An instance of a class that implements #call, or a Proc to be used to format
35
- # the output from this appender
36
- # Default: Use the built-in formatter (See: #call)
37
- #
38
- # filter: [Regexp|Proc]
39
- # RegExp: Only include log messages where the class name matches the supplied.
40
- # regular expression. All other messages will be ignored.
41
- # Proc: Only include log messages where the supplied Proc returns true
42
- # The Proc must return true or false.
43
- #
44
- # host: [String]
45
- # Name of this host to appear in log messages.
46
- # Default: SemanticLogger.host
47
- #
48
- # application: [String]
49
- # Name of this application to appear in log messages.
50
- # Default: SemanticLogger.application
51
- def initialize(index: 'semantic_logger', type: 'log',
52
- url: 'http://localhost:9200', compress: false, ssl: {}, open_timeout: 2.0, read_timeout: 1.0, continue_timeout: 1.0,
53
- level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
18
+ # Create Elasticsearch appender over persistent HTTP(S)
19
+ #
20
+ # Parameters:
21
+ # index: [String]
22
+ # Prefix of the index to store the logs in Elasticsearch.
23
+ # The final index appends the date so that indexes are used per day.
24
+ # I.e. The final index will look like 'semantic_logger-YYYY.MM.DD'
25
+ # Default: 'semantic_logger'
26
+ #
27
+ # type: [String]
28
+ # Document type to associate with logs when they are written.
29
+ # Default: 'log'
30
+ #
31
+ # level: [:trace | :debug | :info | :warn | :error | :fatal]
32
+ # Override the log level for this appender.
33
+ # Default: SemanticLogger.default_level
34
+ #
35
+ # formatter: [Object|Proc|Symbol|Hash]
36
+ # An instance of a class that implements #call, or a Proc to be used to format
37
+ # the output from this appender
38
+ # Default: Use the built-in formatter (See: #call)
39
+ #
40
+ # filter: [Regexp|Proc]
41
+ # RegExp: Only include log messages where the class name matches the supplied.
42
+ # regular expression. All other messages will be ignored.
43
+ # Proc: Only include log messages where the supplied Proc returns true
44
+ # The Proc must return true or false.
45
+ #
46
+ # host: [String]
47
+ # Name of this host to appear in log messages.
48
+ # Default: SemanticLogger.host
49
+ #
50
+ # application: [String]
51
+ # Name of this application to appear in log messages.
52
+ # Default: SemanticLogger.application
53
+ def initialize(index: 'semantic_logger',
54
+ type: 'log',
55
+ url: 'http://localhost:9200',
56
+ **http_args,
57
+ &block)
54
58
 
55
- @index = index
56
- @type = type
57
- super(url: url, compress: compress, ssl: ssl, read_timeout: read_timeout, open_timeout: open_timeout, continue_timeout: continue_timeout,
58
- level: level, formatter: formatter, filter: filter, application: application, host: host, &block)
59
+ @index = index
60
+ @type = type
61
+ super(url: url, **http_args, &block)
59
62
 
60
- @request_path = "#{@path.end_with?('/') ? @path : "#{@path}/"}#{@index}-%Y.%m.%d"
61
- @logging_path = "#{@request_path}/#{type}"
62
- end
63
+ @request_path = "#{@path.end_with?('/') ? @path : "#{@path}/"}#{@index}-%Y.%m.%d"
64
+ @logging_path = "#{@request_path}/#{type}"
65
+ end
63
66
 
64
- # Log to the index for today.
65
- def log(log)
66
- post(formatter.call(log, self), log.time.strftime(@logging_path))
67
- end
67
+ # Log to the index for today.
68
+ def log(log)
69
+ post(formatter.call(log, self), log.time.strftime(@logging_path))
70
+ end
68
71
 
69
- # Deletes all log data captured for a day.
70
- def delete_all(date = Date.today)
71
- delete(date.strftime(@request_path))
72
+ # Deletes all log data captured for a day.
73
+ def delete_all(date = Date.today)
74
+ delete(date.strftime(@request_path))
75
+ end
76
+ end
72
77
  end
73
-
74
78
  end
@@ -5,7 +5,6 @@
5
5
  module SemanticLogger
6
6
  module Appender
7
7
  class File < SemanticLogger::Subscriber
8
-
9
8
  # Create a File Logger appender instance.
10
9
  #
11
10
  # Parameters
@@ -81,7 +80,7 @@ module SemanticLogger
81
80
  def reopen
82
81
  return unless @file_name
83
82
 
84
- @log = open(@file_name, (::File::WRONLY | ::File::APPEND | ::File::CREAT))
83
+ @log = ::File.open(@file_name, ::File::WRONLY | ::File::APPEND | ::File::CREAT)
85
84
  # Force all log entries to write immediately without buffering
86
85
  # Allows multiple processes to write to the same log file simultaneously
87
86
  @log.sync = true
@@ -105,7 +104,6 @@ module SemanticLogger
105
104
  def flush
106
105
  @log.flush if @log.respond_to?(:flush)
107
106
  end
108
-
109
107
  end
110
108
  end
111
109
  end
@@ -18,116 +18,120 @@ end
18
18
  #
19
19
  # In the Graylog Web UI search screen, it is recommended to include the following fields:
20
20
  # `duration`, `level`, `message`, `metric`, `name`, `tags
21
- class SemanticLogger::Appender::Graylog < SemanticLogger::Subscriber
22
- # Map Semantic Logger levels to Graylog levels
23
- class LevelMap
24
- attr_accessor :trace, :debug, :info, :warn, :error, :fatal
25
-
26
- def initialize(trace: GELF::DEBUG, debug: GELF::DEBUG, info: GELF::INFO, warn: GELF::WARN, error: GELF::ERROR, fatal: GELF::FATAL)
27
- @trace = trace
28
- @debug = debug
29
- @info = info
30
- @warn = warn
31
- @error = error
32
- @fatal = fatal
21
+ module SemanticLogger
22
+ module Appender
23
+ class Graylog < SemanticLogger::Subscriber
24
+ # Map Semantic Logger levels to Graylog levels
25
+ class LevelMap
26
+ attr_accessor :trace, :debug, :info, :warn, :error, :fatal
27
+
28
+ def initialize(trace: GELF::DEBUG, debug: GELF::DEBUG, info: GELF::INFO, warn: GELF::WARN, error: GELF::ERROR, fatal: GELF::FATAL)
29
+ @trace = trace
30
+ @debug = debug
31
+ @info = info
32
+ @warn = warn
33
+ @error = error
34
+ @fatal = fatal
35
+ end
36
+
37
+ def [](level)
38
+ public_send(level)
39
+ end
40
+ end
41
+
42
+ attr_accessor :url, :max_size, :gelf_options, :level_map
43
+ attr_reader :notifier, :server, :port, :protocol
44
+
45
+ # Create Graylog log appender.
46
+ #
47
+ # Options:
48
+ # url: [String]
49
+ # Valid URL to post to.
50
+ # Log to UDP Example:
51
+ # 'udp://localhost:12201'
52
+ # Log to TCP Example:
53
+ # 'tcp://localhost:12201'
54
+ # Default: 'udp://localhost:12201'
55
+ #
56
+ # max_size: [String]
57
+ # Max udp packet size. Ignored when protocol is :tcp
58
+ # Default: "WAN"
59
+ #
60
+ # gelf_options: [Hash]
61
+ # Custom gelf options. See Graylog documentation.
62
+ #
63
+ # level: [:trace | :debug | :info | :warn | :error | :fatal]
64
+ # Override the log level for this appender.
65
+ # Default: SemanticLogger.default_level
66
+ #
67
+ # formatter: [Object|Proc]
68
+ # An instance of a class that implements #call, or a Proc to be used to format
69
+ # the output from this appender
70
+ # Default: Use the built-in formatter (See: #call)
71
+ #
72
+ # filter: [Regexp|Proc]
73
+ # RegExp: Only include log messages where the class name matches the supplied.
74
+ # regular expression. All other messages will be ignored.
75
+ # Proc: Only include log messages where the supplied Proc returns true
76
+ # The Proc must return true or false.
77
+ #
78
+ # host: [String]
79
+ # Name of this host to appear in log messages.
80
+ # Default: SemanticLogger.host
81
+ #
82
+ # application: [String]
83
+ # Name of this application to appear in log messages.
84
+ # Default: SemanticLogger.application
85
+ def initialize(url: 'udp://localhost:12201', max_size: 'WAN', gelf_options: {}, level_map: LevelMap.new,
86
+ level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
87
+
88
+ @url = url
89
+ @max_size = max_size
90
+ @gelf_options = gelf_options
91
+ @level_map = level_map.is_a?(LevelMap) ? level_map : LevelMap.new(level_map)
92
+
93
+ super(level: level, formatter: formatter, filter: filter, application: application, host: host, &block)
94
+ reopen
95
+ end
96
+
97
+ # Re-open after process fork
98
+ def reopen
99
+ uri = URI.parse(@url)
100
+ @server = uri.host
101
+ @port = uri.port
102
+ @protocol = uri.scheme.to_sym
103
+
104
+ raise(ArgumentError, "Invalid protocol value: #{@protocol}. Must be :udp or :tcp") unless %i[udp tcp].include?(@protocol)
105
+
106
+ gelf_options[:protocol] ||= (@protocol == :tcp ? GELF::Protocol::TCP : GELF::Protocol::UDP)
107
+ gelf_options[:facility] ||= application
108
+
109
+ @notifier = GELF::Notifier.new(server, port, max_size, gelf_options)
110
+ @notifier.collect_file_and_line = false
111
+ end
112
+
113
+ # Returns [Hash] of parameters to send
114
+ def call(log, logger)
115
+ h = default_formatter.call(log, logger)
116
+
117
+ h[:short_message] = h.delete(:message) || log.exception.message
118
+ h[:level] = logger.level_map[log.level]
119
+ h[:level_str] = log.level.to_s
120
+ h[:duration_str] = h.delete(:duration)
121
+ h
122
+ end
123
+
124
+ # Forward log messages
125
+ def log(log)
126
+ notifier.notify!(formatter.call(log, self))
127
+ true
128
+ end
129
+
130
+ private
131
+
132
+ def default_formatter
133
+ SemanticLogger::Formatters::Raw.new(time_format: :seconds, time_key: :timestamp)
134
+ end
33
135
  end
34
-
35
- def [](level)
36
- public_send(level)
37
- end
38
- end
39
-
40
- attr_accessor :url, :max_size, :gelf_options, :level_map
41
- attr_reader :notifier, :server, :port, :protocol
42
-
43
- # Create Graylog log appender.
44
- #
45
- # Options:
46
- # url: [String]
47
- # Valid URL to post to.
48
- # Log to UDP Example:
49
- # 'udp://localhost:12201'
50
- # Log to TCP Example:
51
- # 'tcp://localhost:12201'
52
- # Default: 'udp://localhost:12201'
53
- #
54
- # max_size: [String]
55
- # Max udp packet size. Ignored when protocol is :tcp
56
- # Default: "WAN"
57
- #
58
- # gelf_options: [Hash]
59
- # Custom gelf options. See Graylog documentation.
60
- #
61
- # level: [:trace | :debug | :info | :warn | :error | :fatal]
62
- # Override the log level for this appender.
63
- # Default: SemanticLogger.default_level
64
- #
65
- # formatter: [Object|Proc]
66
- # An instance of a class that implements #call, or a Proc to be used to format
67
- # the output from this appender
68
- # Default: Use the built-in formatter (See: #call)
69
- #
70
- # filter: [Regexp|Proc]
71
- # RegExp: Only include log messages where the class name matches the supplied.
72
- # regular expression. All other messages will be ignored.
73
- # Proc: Only include log messages where the supplied Proc returns true
74
- # The Proc must return true or false.
75
- #
76
- # host: [String]
77
- # Name of this host to appear in log messages.
78
- # Default: SemanticLogger.host
79
- #
80
- # application: [String]
81
- # Name of this application to appear in log messages.
82
- # Default: SemanticLogger.application
83
- def initialize(url: 'udp://localhost:12201', max_size: 'WAN', gelf_options: {}, level_map: LevelMap.new,
84
- level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
85
-
86
- @url = url
87
- @max_size = max_size
88
- @gelf_options = gelf_options
89
- @level_map = level_map.is_a?(LevelMap) ? level_map : LevelMap.new(level_map)
90
-
91
- super(level: level, formatter: formatter, filter: filter, application: application, host: host, &block)
92
- reopen
93
- end
94
-
95
- # Re-open after process fork
96
- def reopen
97
- uri = URI.parse(@url)
98
- @server = uri.host
99
- @port = uri.port
100
- @protocol = uri.scheme.to_sym
101
-
102
- raise(ArgumentError, "Invalid protocol value: #{@protocol}. Must be :udp or :tcp") unless [:udp, :tcp].include?(@protocol)
103
-
104
- gelf_options[:protocol] ||= (@protocol == :tcp ? GELF::Protocol::TCP : GELF::Protocol::UDP)
105
- gelf_options[:facility] ||= application
106
-
107
- @notifier = GELF::Notifier.new(server, port, max_size, gelf_options)
108
- @notifier.collect_file_and_line = false
109
- end
110
-
111
- # Returns [Hash] of parameters to send
112
- def call(log, logger)
113
- h = default_formatter.call(log, logger)
114
-
115
- h[:short_message] = h.delete(:message) || log.exception.message
116
- h[:level] = logger.level_map[log.level]
117
- h[:level_str] = log.level.to_s
118
- h[:duration_str] = h.delete(:duration)
119
- h
120
- end
121
-
122
- # Forward log messages
123
- def log(log)
124
- notifier.notify!(formatter.call(log, self))
125
- true
126
- end
127
-
128
- private
129
-
130
- def default_formatter
131
- SemanticLogger::Formatters::Raw.new(time_format: :seconds, time_key: :timestamp)
132
136
  end
133
137
  end
@@ -9,59 +9,62 @@ end
9
9
  # Example:
10
10
  # SemanticLogger.add_appender(appender: :honeybadger)
11
11
  #
12
- class SemanticLogger::Appender::Honeybadger < SemanticLogger::Subscriber
13
- # Honeybadger Appender
14
- #
15
- # Parameters
16
- # level: [:trace | :debug | :info | :warn | :error | :fatal]
17
- # Override the log level for this appender.
18
- # Default: :error
19
- #
20
- # formatter: [Object|Proc|Symbol|Hash]
21
- # An instance of a class that implements #call, or a Proc to be used to format
22
- # the output from this appender
23
- # Default: Use the built-in formatter (See: #call)
24
- #
25
- # filter: [Regexp|Proc]
26
- # RegExp: Only include log messages where the class name matches the supplied.
27
- # regular expression. All other messages will be ignored.
28
- # Proc: Only include log messages where the supplied Proc returns true
29
- # The Proc must return true or false.
30
- #
31
- # host: [String]
32
- # Name of this host to appear in log messages.
33
- # Default: SemanticLogger.host
34
- #
35
- # application: [String]
36
- # Name of this application to appear in log messages.
37
- # Default: SemanticLogger.application
38
- def initialize(level: :error, formatter: nil, filter: nil, application: nil, host: nil, &block)
39
- super(level: level, formatter: formatter, filter: filter, application: application, host: host, &block)
40
- end
12
+ module SemanticLogger
13
+ module Appender
14
+ class Honeybadger < SemanticLogger::Subscriber
15
+ # Honeybadger Appender
16
+ #
17
+ # Parameters
18
+ # level: [:trace | :debug | :info | :warn | :error | :fatal]
19
+ # Override the log level for this appender.
20
+ # Default: :error
21
+ #
22
+ # formatter: [Object|Proc|Symbol|Hash]
23
+ # An instance of a class that implements #call, or a Proc to be used to format
24
+ # the output from this appender
25
+ # Default: Use the built-in formatter (See: #call)
26
+ #
27
+ # filter: [Regexp|Proc]
28
+ # RegExp: Only include log messages where the class name matches the supplied.
29
+ # regular expression. All other messages will be ignored.
30
+ # Proc: Only include log messages where the supplied Proc returns true
31
+ # The Proc must return true or false.
32
+ #
33
+ # host: [String]
34
+ # Name of this host to appear in log messages.
35
+ # Default: SemanticLogger.host
36
+ #
37
+ # application: [String]
38
+ # Name of this application to appear in log messages.
39
+ # Default: SemanticLogger.application
40
+ def initialize(level: :error, formatter: nil, filter: nil, application: nil, host: nil, &block)
41
+ super(level: level, formatter: formatter, filter: filter, application: application, host: host, &block)
42
+ end
41
43
 
42
- # Send an error notification to honeybadger
43
- def log(log)
44
- context = formatter.call(log, self)
45
- if log.exception
46
- context.delete(:exception)
47
- Honeybadger.notify(log.exception, context)
48
- else
49
- message = {
50
- error_class: context.delete(:name),
51
- error_message: context.delete(:message),
52
- context: context
53
- }
54
- message[:backtrace] = log.backtrace if log.backtrace
55
- Honeybadger.notify(message)
56
- end
57
- true
58
- end
44
+ # Send an error notification to honeybadger
45
+ def log(log)
46
+ context = formatter.call(log, self)
47
+ if log.exception
48
+ context.delete(:exception)
49
+ ::Honeybadger.notify(log.exception, context)
50
+ else
51
+ message = {
52
+ error_class: context.delete(:name),
53
+ error_message: context.delete(:message),
54
+ context: context
55
+ }
56
+ message[:backtrace] = log.backtrace if log.backtrace
57
+ ::Honeybadger.notify(message)
58
+ end
59
+ true
60
+ end
59
61
 
60
- private
62
+ private
61
63
 
62
- # Use Raw Formatter by default
63
- def default_formatter
64
- SemanticLogger::Formatters::Raw.new
64
+ # Use Raw Formatter by default
65
+ def default_formatter
66
+ SemanticLogger::Formatters::Raw.new
67
+ end
68
+ end
65
69
  end
66
-
67
70
  end