logsly 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2dfa76f82b146db11ebe7e52e8ac9bb51f0fc9c8
4
+ data.tar.gz: 9dbc80bdfe08dce4f6acacf50f29aca0b90965ea
5
+ SHA512:
6
+ metadata.gz: 1629d93cc3f4b0f8979ac796ef219ccf05aecc85750829029f20c1f5c48d8dd05117b65e27112ca7509530152dbec2a01ad04b068b127e7a41ce513667bb16c8
7
+ data.tar.gz: 0abc0262c174e4e12a31c8a81f659888379ce5ec9538bbbbffab0c2d4efd1b0b414c3b27befa7a15a7be6c9dbdfbb02075bff6d4cdeac44858511c22272d2518
data/Gemfile CHANGED
@@ -2,5 +2,5 @@ source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'rake'
6
- gem 'pry'
5
+ gem 'rake', "~> 10.4.0"
6
+ gem 'pry', "~> 0.9.0"
data/README.md CHANGED
@@ -19,7 +19,7 @@ logger = MyLogger.new(:outputs => ['my_stdout'])
19
19
  logger.info "whatever"
20
20
 
21
21
  # build another logger and use it
22
- bg_logger = MyLogger.new('bg', :level => 'debug', :outputs => ['my_logger_stdout'])
22
+ bg_logger = MyLogger.new('bg', :level => 'debug', :outputs => ['my_stdout'])
23
23
  bg_logger.debug "something"
24
24
  ```
25
25
 
data/lib/logsly.rb CHANGED
@@ -1,7 +1,8 @@
1
1
  require 'ns-options'
2
2
  require 'logging'
3
3
  require 'logsly/version'
4
- require 'logsly/settings'
4
+ require 'logsly/colors'
5
+ require 'logsly/base_output'
5
6
 
6
7
  module Logsly
7
8
 
@@ -12,6 +13,43 @@ module Logsly
12
13
  end
13
14
  end
14
15
 
16
+ module Settings
17
+ include NsOptions::Proxy
18
+
19
+ option :colors, ::Hash, :default => ::Hash.new(NullColors.new)
20
+ option :outputs, ::Hash, :default => ::Hash.new(NullOutput.new)
21
+ end
22
+
23
+ def self.reset
24
+ Settings.reset
25
+ Logging.reset
26
+ end
27
+
28
+ def self.colors(name, &block)
29
+ require 'logsly/colors'
30
+ Settings.colors[name.to_s] = Colors.new(name, &block) if !block.nil?
31
+ Settings.colors[name.to_s]
32
+ end
33
+
34
+ def self.stdout(name, &block)
35
+ require 'logsly/stdout_output'
36
+ Settings.outputs[name.to_s] = StdoutOutput.new(&block)
37
+ end
38
+
39
+ def self.file(name, &block)
40
+ require 'logsly/file_output'
41
+ Settings.outputs[name.to_s] = FileOutput.new(&block)
42
+ end
43
+
44
+ def self.syslog(name, &block)
45
+ require 'logsly/syslog_output'
46
+ Settings.outputs[name.to_s] = SyslogOutput.new(&block)
47
+ end
48
+
49
+ def self.outputs(name)
50
+ Settings.outputs[name.to_s]
51
+ end
52
+
15
53
  module LoggerMethods
16
54
 
17
55
  def initialize(log_type, opts_hash=nil)
@@ -30,6 +68,16 @@ module Logsly
30
68
  end
31
69
  end
32
70
 
71
+ def mdc(key, value)
72
+ Logging.mdc[key] = value
73
+ end
74
+
75
+ def file_path
76
+ @file_path ||= if (appender = get_file_appender)
77
+ appender.name if appender.respond_to?(:name)
78
+ end
79
+ end
80
+
33
81
  # delegate all calls to the @logger
34
82
 
35
83
  def method_missing(method, *args, &block)
@@ -65,6 +113,10 @@ module Logsly
65
113
  end
66
114
  end
67
115
 
116
+ def get_file_appender
117
+ @logger.appenders.detect{ |a| a.kind_of?(Logging::Appenders::File) }
118
+ end
119
+
68
120
  end
69
121
 
70
122
  end
data/lib/logsly/colors.rb CHANGED
@@ -8,10 +8,6 @@ require 'ns-options'
8
8
 
9
9
  module Logsly
10
10
 
11
- class NullColors < OpenStruct
12
- def to_scheme(*args); nil; end
13
- end
14
-
15
11
  class Colors
16
12
 
17
13
  attr_reader :name, :build
@@ -28,6 +24,10 @@ module Logsly
28
24
 
29
25
  end
30
26
 
27
+ class NullColors < OpenStruct
28
+ def to_scheme(*args); nil; end
29
+ end
30
+
31
31
  class ColorsData
32
32
  include NsOptions::Proxy
33
33
 
@@ -1,3 +1,3 @@
1
1
  module Logsly
2
- VERSION = "1.0.2"
2
+ VERSION = "1.1.0"
3
3
  end
data/logsly.gemspec CHANGED
@@ -11,13 +11,14 @@ Gem::Specification.new do |gem|
11
11
  gem.description = %q{Create custom loggers.}
12
12
  gem.summary = %q{Create custom loggers.}
13
13
  gem.homepage = "http://github.com/redding/logsly"
14
+ gem.license = 'MIT'
14
15
 
15
- gem.files = `git ls-files`.split("\n")
16
- gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
- gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ gem.files = `git ls-files`.split($/)
17
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
18
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
19
  gem.require_paths = ["lib"]
19
20
 
20
- gem.add_development_dependency("assert", ["~> 2.0"])
21
+ gem.add_development_dependency("assert", ["~> 2.15"])
21
22
 
22
23
  gem.add_dependency("ns-options", ["~> 1.1"])
23
24
  gem.add_dependency("logging", ["~> 1.7"])
data/test/helper.rb CHANGED
@@ -6,3 +6,5 @@ $LOAD_PATH.unshift(File.expand_path("../..", __FILE__))
6
6
 
7
7
  # require pry for debugging (`binding.pry`)
8
8
  require 'pry'
9
+
10
+ require 'test/support/factory'
@@ -0,0 +1,6 @@
1
+ require 'assert/factory'
2
+
3
+ module Factory
4
+ extend Assert::Factory
5
+
6
+ end
@@ -1,59 +1,17 @@
1
1
  require 'assert'
2
- require 'logging'
3
- require 'logsly/settings'
4
2
  require 'logsly/base_output'
5
3
 
6
- class Logsly::BaseOutput
7
-
8
- class DataTests < Assert::Context
9
- desc "the BaseOutputData handler"
10
- setup do
11
- Logsly.colors('a_color_scheme') do
12
- debug :white
13
- end
14
- @arg = '%d : %m\n'
15
- @lay = Logsly::BaseOutputData.new(@arg) do |*args|
16
- pattern args.first
17
- colors 'a_color_scheme'
18
- end
19
- end
20
- subject { @lay }
21
-
22
- should have_readers :pattern, :colors
23
-
24
- should "know its defaults" do
25
- lay = Logsly::BaseOutputData.new {}
26
- assert_equal '%m\n', lay.pattern
27
- assert_nil lay.colors
28
- end
29
-
30
- should "instance exec its build with args" do
31
- assert_equal '%d : %m\n', subject.pattern
32
- assert_equal 'a_color_scheme', subject.colors
33
- end
34
-
35
- should "know its layout pattern opts hash" do
36
- expected = {
37
- :pattern => subject.pattern,
38
- :color_scheme => "#{subject.colors}-#{@arg.object_id}"
39
- }
40
- assert_equal expected, subject.to_pattern_opts
41
-
42
- out = Logsly::BaseOutputData.new do
43
- pattern '%m\n'
44
- end
45
- out_expected = {:pattern => out.pattern}
46
- assert_equal out_expected, out.to_pattern_opts
47
- end
4
+ require 'logging'
5
+ require 'logsly'
48
6
 
49
- end
7
+ class Logsly::BaseOutput
50
8
 
51
- class BaseTests < Assert::Context
52
- desc "the BaseOutput handler"
9
+ class UnitTests < Assert::Context
10
+ desc "Logsly::BaseOutput"
53
11
  setup do
54
12
  @out = Logsly::BaseOutput.new {}
55
13
  end
56
- subject { @out }
14
+ subject{ @out }
57
15
 
58
16
  should have_reader :build
59
17
  should have_imeths :to_layout, :to_appender
@@ -73,7 +31,7 @@ class Logsly::BaseOutput
73
31
 
74
32
  end
75
33
 
76
- class BuildTests < BaseTests
34
+ class BuildTests < UnitTests
77
35
  desc "given a build"
78
36
  setup do
79
37
  Logsly.colors('a_color_scheme') do
@@ -96,5 +54,48 @@ class Logsly::BaseOutput
96
54
 
97
55
  end
98
56
 
57
+ class BaseOutputDataTests < Assert::Context
58
+ desc "BaseOutputData"
59
+ setup do
60
+ Logsly.colors('a_color_scheme') do
61
+ debug :white
62
+ end
63
+ @arg = '%d : %m\n'
64
+ @lay = Logsly::BaseOutputData.new(@arg) do |*args|
65
+ pattern args.first
66
+ colors 'a_color_scheme'
67
+ end
68
+ end
69
+ subject{ @lay }
70
+
71
+ should have_readers :pattern, :colors
72
+
73
+ should "know its defaults" do
74
+ lay = Logsly::BaseOutputData.new {}
75
+ assert_equal '%m\n', lay.pattern
76
+ assert_nil lay.colors
77
+ end
78
+
79
+ should "instance exec its build with args" do
80
+ assert_equal '%d : %m\n', subject.pattern
81
+ assert_equal 'a_color_scheme', subject.colors
82
+ end
83
+
84
+ should "know its layout pattern opts hash" do
85
+ expected = {
86
+ :pattern => subject.pattern,
87
+ :color_scheme => "#{subject.colors}-#{@arg.object_id}"
88
+ }
89
+ assert_equal expected, subject.to_pattern_opts
90
+
91
+ out = Logsly::BaseOutputData.new do
92
+ pattern '%m\n'
93
+ end
94
+ out_expected = {:pattern => out.pattern}
95
+ assert_equal out_expected, out.to_pattern_opts
96
+ end
97
+
98
+ end
99
+
99
100
  end
100
101
 
@@ -1,17 +1,62 @@
1
1
  require 'assert'
2
- require 'logging'
3
2
  require 'logsly/colors'
4
3
 
4
+ require 'logging'
5
+
5
6
  class Logsly::Colors
6
7
 
7
- class DataTests < Assert::Context
8
- desc "the ColorsData handler"
8
+ class UnitTests < Assert::Context
9
+ desc "Logsly::Colors"
10
+ setup do
11
+ @colors = Logsly::Colors.new('test_colors') do |*args|
12
+ debug args.first
13
+ end
14
+ end
15
+ subject{ @colors }
16
+
17
+ should have_readers :name, :build
18
+ should have_imeths :to_scheme
19
+
20
+ should "know its name" do
21
+ assert_equal 'test_colors', subject.name
22
+ end
23
+
24
+ should "know its build" do
25
+ build_proc = Proc.new {}
26
+ out = Logsly::Colors.new 'test', &build_proc
27
+
28
+ assert_same build_proc, out.build
29
+ end
30
+
31
+ end
32
+
33
+ class BuildTests < UnitTests
34
+ desc "given a build"
35
+ setup do
36
+ @colors = Logsly::Colors.new 'test' do |fatal_color|
37
+ fatal [fatal_color, :on_red]
38
+ date :blue
39
+ end
40
+ end
41
+
42
+ should "build a unique Logging color scheme based on called args" do
43
+ arg = 'white'
44
+ scheme_name = subject.to_scheme(arg)
45
+
46
+ assert_equal "test-#{arg.object_id}", scheme_name
47
+ assert_kind_of Logging::ColorScheme, Logging.color_scheme(scheme_name)
48
+ end
49
+
50
+ end
51
+
52
+ class ColorsDataTests < Assert::Context
53
+ desc "ColorsData"
9
54
  setup do
10
55
  @data = Logsly::ColorsData.new('white') do |color|
11
56
  debug color
12
57
  end
13
58
  end
14
- subject { @data }
59
+ subject{ @data }
15
60
 
16
61
  should have_imeths :to_scheme_opts
17
62
  should have_imeths :debug, :info, :warn, :error, :fatal
@@ -64,49 +109,5 @@ class Logsly::Colors
64
109
 
65
110
  end
66
111
 
67
- class BaseTests < Assert::Context
68
- desc "the Colors handler"
69
- setup do
70
- @colors = Logsly::Colors.new('test_colors') do |*args|
71
- debug args.first
72
- end
73
- end
74
- subject { @colors }
75
-
76
- should have_readers :name, :build
77
- should have_imeths :to_scheme
78
-
79
- should "know its name" do
80
- assert_equal 'test_colors', subject.name
81
- end
82
-
83
- should "know its build" do
84
- build_proc = Proc.new {}
85
- out = Logsly::Colors.new 'test', &build_proc
86
-
87
- assert_same build_proc, out.build
88
- end
89
-
90
- end
91
-
92
- class BuildTests < BaseTests
93
- desc "given a build"
94
- setup do
95
- @colors = Logsly::Colors.new 'test' do |fatal_color|
96
- fatal [fatal_color, :on_red]
97
- date :blue
98
- end
99
- end
100
-
101
- should "build a unique Logging color scheme based on called args" do
102
- arg = 'white'
103
- scheme_name = subject.to_scheme(arg)
104
-
105
- assert_equal "test-#{arg.object_id}", scheme_name
106
- assert_kind_of Logging::ColorScheme, Logging.color_scheme(scheme_name)
107
- end
108
-
109
- end
110
-
111
112
  end
112
113
 
@@ -1,24 +1,14 @@
1
1
  require 'assert'
2
- require 'ostruct'
3
- require 'logging'
4
- require 'logsly/settings'
5
2
  require 'logsly/file_output'
6
3
 
7
- class Logsly::FileOutput
8
-
9
- class DataTests < Assert::Context
10
- desc "the FileOutputData handler"
11
- setup do
12
- @data = Logsly::FileOutputData.new {}
13
- end
14
- subject { @data }
15
-
16
- should have_imeth :path
4
+ require 'logging'
5
+ require 'ostruct'
6
+ require 'logsly'
17
7
 
18
- end
8
+ class Logsly::FileOutput
19
9
 
20
- class BaseTests < Assert::Context
21
- desc "the StdoutOutput handler"
10
+ class UnitTests < Assert::Context
11
+ desc "Logsly::FileOutput"
22
12
  setup do
23
13
  @logger = OpenStruct.new
24
14
  @logger.debug_level = :white
@@ -36,7 +26,7 @@ class Logsly::FileOutput
36
26
  colors 'a_color_scheme'
37
27
  end
38
28
  end
39
- subject { @out }
29
+ subject{ @out }
40
30
 
41
31
  should "be an output handler" do
42
32
  assert_kind_of Logsly::BaseOutput, subject
@@ -51,6 +41,18 @@ class Logsly::FileOutput
51
41
  assert_equal '%d : %m\n', appender.layout.pattern
52
42
  assert_kind_of Logging::ColorScheme, appender.layout.color_scheme
53
43
  end
44
+
45
+ end
46
+
47
+ class FileOutputDataTests < Assert::Context
48
+ desc "FileOutputData"
49
+ setup do
50
+ @data = Logsly::FileOutputData.new {}
51
+ end
52
+ subject{ @data }
53
+
54
+ should have_imeth :path
55
+
54
56
  end
55
57
 
56
58
  end
@@ -0,0 +1,228 @@
1
+ require 'assert'
2
+ require 'logsly'
3
+
4
+ require 'logging'
5
+ require 'test/support/logger'
6
+
7
+ module Logsly
8
+
9
+ class UnitTests < Assert::Context
10
+ desc "Logsly"
11
+ setup do
12
+ Logsly.reset
13
+ end
14
+ subject{ Logsly }
15
+
16
+ should have_imeths :reset, :colors, :stdout, :file, :syslog, :outputs
17
+
18
+ should "return a NullColors obj when requesting a color scheme that isn't defined" do
19
+ assert_kind_of NullColors, Logsly.colors('not_defined_yet')
20
+ end
21
+
22
+ should "return a NullOutput obj when requesting an output that isn't defined" do
23
+ assert_kind_of NullOutput, Logsly.outputs('not_defined_yet')
24
+ end
25
+
26
+ should "add a named color scheme using the `colors` method" do
27
+ assert_kind_of NullColors, Logsly.colors('test_colors')
28
+ Logsly.colors('test_colors') {}
29
+
30
+ assert_kind_of Colors, Logsly.colors('test_colors')
31
+ end
32
+
33
+ should "add a named stdout output using the `stdout` method" do
34
+ assert_kind_of NullOutput, Logsly.outputs('test_stdout')
35
+ Logsly.stdout('test_stdout') {}
36
+
37
+ assert_not_nil Logsly.outputs('test_stdout')
38
+ assert_kind_of StdoutOutput, Logsly.outputs('test_stdout')
39
+ end
40
+
41
+ should "add a named file output using the `file` method" do
42
+ assert_kind_of NullOutput, Logsly.outputs('test_file')
43
+ Logsly.file('test_file') {}
44
+
45
+ assert_not_nil Logsly.outputs('test_file')
46
+ assert_kind_of FileOutput, Logsly.outputs('test_file')
47
+ end
48
+
49
+ should "add a named syslog output using the `syslog` method" do
50
+ assert_kind_of NullOutput, Logsly.outputs('test_syslog')
51
+ Logsly.syslog('test_syslog') {}
52
+
53
+ assert_not_nil Logsly.outputs('test_syslog')
54
+ assert_kind_of SyslogOutput, Logsly.outputs('test_syslog')
55
+ end
56
+
57
+ should "convert non-string setting names to string" do
58
+ Logsly.colors(:test_colors) {}
59
+
60
+ assert_not_nil Logsly.colors(:test_colors)
61
+ assert_kind_of Colors, Logsly.colors(:test_colors)
62
+ end
63
+
64
+ should "overwrite same-named colors settings" do
65
+ Logsly.colors('something') {}
66
+ orig = Logsly.colors('something')
67
+ Logsly.colors('something') {}
68
+
69
+ assert_not_same orig, Logsly.colors('something')
70
+ end
71
+
72
+ should "overwrite same-named outputs settings" do
73
+ Logsly.stdout('something') {}
74
+ assert_kind_of StdoutOutput, Logsly.outputs('something')
75
+
76
+ Logsly.file('something') {}
77
+ assert_kind_of FileOutput, Logsly.outputs('something')
78
+ end
79
+
80
+ end
81
+
82
+ class ResetTests < UnitTests
83
+ desc "`reset` method"
84
+ setup do
85
+ Logsly.colors('test_colors') {}
86
+ Logsly.stdout('test_stdout') {}
87
+ end
88
+
89
+ should "reset the Settings" do
90
+ assert_kind_of Colors, Logsly.colors('test_colors')
91
+ assert_kind_of StdoutOutput, Logsly.outputs('test_stdout')
92
+
93
+ Logsly.reset
94
+
95
+ assert_kind_of NullColors, Logsly.colors('test_colors')
96
+ assert_kind_of NullOutput, Logsly.outputs('test_stdout')
97
+ end
98
+
99
+ end
100
+
101
+ class LoggerTests < UnitTests
102
+ desc "logger"
103
+ setup do
104
+ @logger = TestLogger.new(:testy_log_logger)
105
+ end
106
+ subject{ @logger }
107
+
108
+ should have_readers :log_type, :level, :outputs, :logger
109
+ should have_imeths :mdc, :file_path
110
+
111
+ should "know its log_type" do
112
+ assert_equal 'testy_log_logger', subject.log_type
113
+ end
114
+
115
+ should "know its default opt values" do
116
+ assert_equal 'info', subject.level
117
+ assert_equal [], subject.outputs
118
+ end
119
+
120
+ should "allow overridding the default opt values" do
121
+ log = TestLogger.new(:testy_debug_logger, :level => :debug, :outputs => [:stdout])
122
+ assert_equal 'debug', log.level
123
+ assert_equal [:stdout], log.outputs
124
+ end
125
+
126
+ should "create a Logging::Logger" do
127
+ assert_not_nil subject.logger
128
+ assert_kind_of Logging::Logger, subject.logger
129
+ end
130
+
131
+ should "create the Logging::Logger with a unique name" do
132
+ expected = "#{subject.class.name}-testy_log_logger-#{subject.object_id}"
133
+ assert_equal expected, subject.logger.name
134
+ end
135
+
136
+ should "set the logger's level" do
137
+ assert_equal Logging::LEVELS['info'], subject.logger.level
138
+
139
+ log = TestLogger.new('test', :level => :debug)
140
+ assert_equal Logging::LEVELS['debug'], log.logger.level
141
+ end
142
+
143
+ should "set mdc key/value pairs" do
144
+ key = Factory.string
145
+ assert_nil Logging.mdc[key]
146
+
147
+ value = Factory.string
148
+ subject.mdc(key, value)
149
+ assert_equal value, Logging.mdc[key]
150
+ end
151
+
152
+ should "not have a file path if no file appender is specified" do
153
+ assert_nil subject.file_path
154
+ end
155
+
156
+ end
157
+
158
+ class AppenderTests < UnitTests
159
+ setup do
160
+ Logsly.stdout 'my_stdout'
161
+ Logsly.file('my_file') do |logger|
162
+ path "log/development-#{logger.log_type}.log"
163
+ end
164
+ Logsly.file('my_other_file') do |logger|
165
+ path "log/other-#{logger.log_type}.log"
166
+ end
167
+ Logsly.syslog('my_syslog') do |logger|
168
+ identity "my_syslog_logger-#{logger.log_type}"
169
+ end
170
+ end
171
+
172
+ should "add a named stdout appender" do
173
+ log = TestLogger.new(:test, :outputs => 'my_stdout')
174
+ assert_includes_appender Logging::Appenders::Stdout, log
175
+ assert_nil log.file_path
176
+ end
177
+
178
+ should "add a named file appender" do
179
+ log = TestLogger.new(:test, :outputs => 'my_file')
180
+ filelog = extract_appender_from_logger(log, :file)
181
+
182
+ assert_includes_appender Logging::Appenders::File, log
183
+ assert_equal 'log/development-test.log', filelog.name
184
+ assert_equal 'log/development-test.log', log.file_path
185
+ end
186
+
187
+ should "add a named syslog appender" do
188
+ log = TestLogger.new(:test, :outputs => 'my_syslog')
189
+ assert_includes_appender Logging::Appenders::Syslog, log
190
+ assert_nil log.file_path
191
+ end
192
+
193
+ should "not add duplicate appenders" do
194
+ outputs = ['my_stdout', 'my_stdout', 'my_file', 'my_other_file']
195
+ log = TestLogger.new(:test, :outputs => outputs)
196
+
197
+ assert_equal 3, log.appenders.size
198
+ end
199
+
200
+ should "not add undefined appenders" do
201
+ outputs = ['my_stdout', 'undefined']
202
+ log = TestLogger.new(:test, :outputs => outputs)
203
+
204
+ assert_equal 1, log.appenders.size
205
+ end
206
+
207
+ private
208
+
209
+ def assert_includes_appender(appender_class, logger)
210
+ assert_includes appender_class, logger.appenders.collect(&:class)
211
+ end
212
+
213
+ def extract_appender_from_logger(logger, type)
214
+ klass = case type
215
+ when :syslog
216
+ Logging::Appenders::Syslog
217
+ when :file
218
+ Logging::Appenders::File
219
+ when :stdout
220
+ Logging::Appenders::Stdout
221
+ end
222
+
223
+ logger.appenders.detect{ |a| a.is_a?(klass) }
224
+ end
225
+
226
+ end
227
+
228
+ end
@@ -1,13 +1,14 @@
1
1
  require 'assert'
2
+ require 'logsly/stdout_output'
3
+
2
4
  require 'ostruct'
3
5
  require 'logging'
4
- require 'logsly/settings'
5
- require 'logsly/stdout_output'
6
+ require 'logsly'
6
7
 
7
8
  class Logsly::StdoutOutput
8
9
 
9
- class BaseTests < Assert::Context
10
- desc "the StdoutOutput handler"
10
+ class UnitTests < Assert::Context
11
+ desc "Logsly::StdoutOutput"
11
12
  setup do
12
13
  @logger = OpenStruct.new
13
14
  @logger.debug_level = :white
@@ -22,7 +23,7 @@ class Logsly::StdoutOutput
22
23
  colors 'a_color_scheme'
23
24
  end
24
25
  end
25
- subject { @out }
26
+ subject{ @out }
26
27
 
27
28
  should "be an output handler" do
28
29
  assert_kind_of Logsly::BaseOutput, subject
@@ -36,6 +37,7 @@ class Logsly::StdoutOutput
36
37
  assert_equal '%d : %m\n', appender.layout.pattern
37
38
  assert_kind_of Logging::ColorScheme, appender.layout.color_scheme
38
39
  end
40
+
39
41
  end
40
42
 
41
43
  end
@@ -1,33 +1,15 @@
1
1
  require 'assert'
2
+ require 'logsly/syslog_output'
3
+
2
4
  require 'ostruct'
3
5
  require 'syslog'
4
6
  require 'logging'
5
- require 'logsly/settings'
6
- require 'logsly/syslog_output'
7
+ require 'logsly'
7
8
 
8
9
  class Logsly::SyslogOutput
9
10
 
10
- class DataTests < Assert::Context
11
- desc "the FileOutputData handler"
12
- setup do
13
- @data = Logsly::SyslogOutputData.new {}
14
- end
15
- subject { @data }
16
-
17
- should have_imeth :identity, :log_opts, :facility
18
-
19
- should "default :log_opts" do
20
- assert_equal (Syslog::LOG_PID | Syslog::LOG_CONS), subject.log_opts
21
- end
22
-
23
- should "default :facility" do
24
- assert_equal Syslog::LOG_LOCAL0, subject.facility
25
- end
26
-
27
- end
28
-
29
- class BaseTests < Assert::Context
30
- desc "the SyslogOutput handler"
11
+ class UnitTests < Assert::Context
12
+ desc "Logsly::SyslogOutput"
31
13
  setup do
32
14
  @logger = OpenStruct.new
33
15
  @logger.debug_level = :white
@@ -47,7 +29,7 @@ class Logsly::SyslogOutput
47
29
  colors 'a_color_scheme'
48
30
  end
49
31
  end
50
- subject { @out }
32
+ subject{ @out }
51
33
 
52
34
  should "be an output handler" do
53
35
  assert_kind_of Logsly::BaseOutput, subject
@@ -61,6 +43,26 @@ class Logsly::SyslogOutput
61
43
  assert_equal '%d : %m\n', appender.layout.pattern
62
44
  assert_kind_of Logging::ColorScheme, appender.layout.color_scheme
63
45
  end
46
+
47
+ end
48
+
49
+ class SyslogOutputDataTests < Assert::Context
50
+ desc "SyslogOutputData"
51
+ setup do
52
+ @data = Logsly::SyslogOutputData.new {}
53
+ end
54
+ subject{ @data }
55
+
56
+ should have_imeth :identity, :log_opts, :facility
57
+
58
+ should "default :log_opts" do
59
+ assert_equal (Syslog::LOG_PID | Syslog::LOG_CONS), subject.log_opts
60
+ end
61
+
62
+ should "default :facility" do
63
+ assert_equal Syslog::LOG_LOCAL0, subject.facility
64
+ end
65
+
64
66
  end
65
67
 
66
68
  end
metadata CHANGED
@@ -1,80 +1,67 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: logsly
3
- version: !ruby/object:Gem::Version
4
- hash: 19
5
- prerelease:
6
- segments:
7
- - 1
8
- - 0
9
- - 2
10
- version: 1.0.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Kelly Redding
14
8
  - Collin Redding
15
9
  autorequire:
16
10
  bindir: bin
17
11
  cert_chain: []
18
-
19
- date: 2013-03-23 00:00:00 Z
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2015-09-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: assert
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 2
32
- - 0
33
- version: "2.0"
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '2.15'
34
21
  type: :development
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: ns-options
38
22
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
42
- - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 13
45
- segments:
46
- - 1
47
- - 1
48
- version: "1.1"
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '2.15'
28
+ - !ruby/object:Gem::Dependency
29
+ name: ns-options
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '1.1'
49
35
  type: :runtime
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
52
- name: logging
53
36
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
55
- none: false
56
- requirements:
57
- - - ~>
58
- - !ruby/object:Gem::Version
59
- hash: 1
60
- segments:
61
- - 1
62
- - 7
63
- version: "1.7"
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.1'
42
+ - !ruby/object:Gem::Dependency
43
+ name: logging
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1.7'
64
49
  type: :runtime
65
- version_requirements: *id003
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '1.7'
66
56
  description: Create custom loggers.
67
- email:
57
+ email:
68
58
  - kelly@kellyredding.com
69
59
  - collin.redding@me.com
70
60
  executables: []
71
-
72
61
  extensions: []
73
-
74
62
  extra_rdoc_files: []
75
-
76
- files:
77
- - .gitignore
63
+ files:
64
+ - ".gitignore"
78
65
  - Gemfile
79
66
  - LICENSE.txt
80
67
  - README.md
@@ -83,62 +70,52 @@ files:
83
70
  - lib/logsly/base_output.rb
84
71
  - lib/logsly/colors.rb
85
72
  - lib/logsly/file_output.rb
86
- - lib/logsly/settings.rb
87
73
  - lib/logsly/stdout_output.rb
88
74
  - lib/logsly/syslog_output.rb
89
75
  - lib/logsly/version.rb
90
76
  - log/.gitkeep
91
77
  - logsly.gemspec
92
78
  - test/helper.rb
79
+ - test/support/factory.rb
93
80
  - test/support/logger.rb
94
81
  - test/unit/base_output_tests.rb
95
82
  - test/unit/colors_tests.rb
96
83
  - test/unit/file_output_tests.rb
97
- - test/unit/logger_tests.rb
98
- - test/unit/settings_tests.rb
84
+ - test/unit/logsly_tests.rb
99
85
  - test/unit/stdout_output_tests.rb
100
86
  - test/unit/syslog_output_tests.rb
101
87
  - tmp/.gitkeep
102
88
  homepage: http://github.com/redding/logsly
103
- licenses: []
104
-
89
+ licenses:
90
+ - MIT
91
+ metadata: {}
105
92
  post_install_message:
106
93
  rdoc_options: []
107
-
108
- require_paths:
94
+ require_paths:
109
95
  - lib
110
- required_ruby_version: !ruby/object:Gem::Requirement
111
- none: false
112
- requirements:
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
113
98
  - - ">="
114
- - !ruby/object:Gem::Version
115
- hash: 3
116
- segments:
117
- - 0
118
- version: "0"
119
- required_rubygems_version: !ruby/object:Gem::Requirement
120
- none: false
121
- requirements:
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
122
103
  - - ">="
123
- - !ruby/object:Gem::Version
124
- hash: 3
125
- segments:
126
- - 0
127
- version: "0"
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
128
106
  requirements: []
129
-
130
107
  rubyforge_project:
131
- rubygems_version: 1.8.24
108
+ rubygems_version: 2.4.5
132
109
  signing_key:
133
- specification_version: 3
110
+ specification_version: 4
134
111
  summary: Create custom loggers.
135
- test_files:
112
+ test_files:
136
113
  - test/helper.rb
114
+ - test/support/factory.rb
137
115
  - test/support/logger.rb
138
116
  - test/unit/base_output_tests.rb
139
117
  - test/unit/colors_tests.rb
140
118
  - test/unit/file_output_tests.rb
141
- - test/unit/logger_tests.rb
142
- - test/unit/settings_tests.rb
119
+ - test/unit/logsly_tests.rb
143
120
  - test/unit/stdout_output_tests.rb
144
121
  - test/unit/syslog_output_tests.rb
@@ -1,45 +0,0 @@
1
- require 'ns-options'
2
- require 'logging'
3
- require 'logsly/colors'
4
- require 'logsly/base_output'
5
-
6
- module Logsly
7
-
8
- module Settings
9
- include NsOptions::Proxy
10
-
11
- option :colors, ::Hash, :default => ::Hash.new(NullColors.new)
12
- option :outputs, ::Hash, :default => ::Hash.new(NullOutput.new)
13
- end
14
-
15
- def self.reset
16
- Settings.reset
17
- Logging.reset
18
- end
19
-
20
- def self.colors(name, &block)
21
- require 'logsly/colors'
22
- Settings.colors[name.to_s] = Colors.new(name, &block) if !block.nil?
23
- Settings.colors[name.to_s]
24
- end
25
-
26
- def self.stdout(name, &block)
27
- require 'logsly/stdout_output'
28
- Settings.outputs[name.to_s] = StdoutOutput.new(&block)
29
- end
30
-
31
- def self.file(name, &block)
32
- require 'logsly/file_output'
33
- Settings.outputs[name.to_s] = FileOutput.new(&block)
34
- end
35
-
36
- def self.syslog(name, &block)
37
- require 'logsly/syslog_output'
38
- Settings.outputs[name.to_s] = SyslogOutput.new(&block)
39
- end
40
-
41
- def self.outputs(name)
42
- Settings.outputs[name.to_s]
43
- end
44
-
45
- end
@@ -1,123 +0,0 @@
1
- require 'assert'
2
- require 'logging'
3
- require 'logsly'
4
- require 'test/support/logger'
5
-
6
- module Logsly
7
-
8
- class BaseTests < Assert::Context
9
- desc "a logger with Logsly mixed in"
10
- setup do
11
- Logsly.reset
12
- @logger = TestLogger.new(:testy_log_logger)
13
- end
14
- subject { @logger }
15
-
16
- should have_readers :log_type, :level, :outputs, :logger
17
-
18
- should "know its log_type" do
19
- assert_equal 'testy_log_logger', subject.log_type
20
- end
21
-
22
- should "know its default opt values" do
23
- assert_equal 'info', subject.level
24
- assert_equal [], subject.outputs
25
- end
26
-
27
- should "allow overridding the default opt values" do
28
- log = TestLogger.new(:testy_debug_logger, :level => :debug, :outputs => [:stdout])
29
- assert_equal 'debug', log.level
30
- assert_equal [:stdout], log.outputs
31
- end
32
-
33
- end
34
-
35
- class LoggerTests < BaseTests
36
-
37
- should "create a Logging::Logger" do
38
- assert_not_nil subject.logger
39
- assert_kind_of Logging::Logger, subject.logger
40
- end
41
-
42
- should "create the Logging::Logger with a unique name" do
43
- expected = "#{subject.class.name}-testy_log_logger-#{subject.object_id}"
44
- assert_equal expected, subject.logger.name
45
- end
46
-
47
- should "set the logger's level" do
48
- assert_equal Logging::LEVELS['info'], subject.logger.level
49
-
50
- log = TestLogger.new('test', :level => :debug)
51
- assert_equal Logging::LEVELS['debug'], log.logger.level
52
- end
53
-
54
- end
55
-
56
- class AppenderTests < LoggerTests
57
- setup do
58
- Logsly.stdout 'my_stdout'
59
- Logsly.file('my_file') do |logger|
60
- path "log/development-#{logger.log_type}.log"
61
- end
62
- Logsly.file('my_other_file') do |logger|
63
- path "log/other-#{logger.log_type}.log"
64
- end
65
- Logsly.syslog('my_syslog') do |logger|
66
- identity "my_syslog_logger-#{logger.log_type}"
67
- end
68
- end
69
-
70
- should "add a named stdout appender" do
71
- log = TestLogger.new(:test, :outputs => 'my_stdout')
72
- assert_includes_appender Logging::Appenders::Stdout, log
73
- end
74
-
75
- should "add a named file appender" do
76
- log = TestLogger.new(:test, :outputs => 'my_file')
77
- filelog = extract_appender_from_logger(log, :file)
78
-
79
- assert_includes_appender Logging::Appenders::File, log
80
- assert_equal 'log/development-test.log', filelog.name
81
- end
82
-
83
- should "add a named syslog appender" do
84
- log = TestLogger.new(:test, :outputs => 'my_syslog')
85
- assert_includes_appender Logging::Appenders::Syslog, log
86
- end
87
-
88
- should "not add duplicate appenders" do
89
- outputs = ['my_stdout', 'my_stdout', 'my_file', 'my_other_file']
90
- log = TestLogger.new(:test, :outputs => outputs)
91
-
92
- assert_equal 3, log.appenders.size
93
- end
94
-
95
- should "not add undefined appenders" do
96
- outputs = ['my_stdout', 'undefined']
97
- log = TestLogger.new(:test, :outputs => outputs)
98
-
99
- assert_equal 1, log.appenders.size
100
- end
101
-
102
- protected
103
-
104
- def assert_includes_appender(appender_class, logger)
105
- assert_includes appender_class, logger.appenders.collect(&:class)
106
- end
107
-
108
- def extract_appender_from_logger(logger, type)
109
- klass = case type
110
- when :syslog
111
- Logging::Appenders::Syslog
112
- when :file
113
- Logging::Appenders::File
114
- when :stdout
115
- Logging::Appenders::Stdout
116
- end
117
-
118
- logger.appenders.select{|a| a.is_a?(klass)}.first
119
- end
120
-
121
- end
122
-
123
- end
@@ -1,98 +0,0 @@
1
- require 'assert'
2
- require 'logsly/settings'
3
-
4
- module Logsly
5
-
6
- class SettingsTests < Assert::Context
7
- desc "Logsly settings"
8
- setup do
9
- Logsly::Settings.reset
10
- end
11
- subject { Logsly }
12
-
13
- should have_imeths :reset, :colors, :stdout, :file, :syslog, :outputs
14
-
15
- should "return a NullColors obj when requesting a color scheme that isn't defined" do
16
- assert_kind_of NullColors, Logsly.colors('not_defined_yet')
17
- end
18
-
19
- should "return a NullOutput obj when requesting an output that isn't defined" do
20
- assert_kind_of NullOutput, Logsly.outputs('not_defined_yet')
21
- end
22
-
23
- should "add a named color scheme using the `colors` method" do
24
- assert_kind_of NullColors, Logsly.colors('test_colors')
25
- Logsly.colors('test_colors') {}
26
-
27
- assert_kind_of Colors, Logsly.colors('test_colors')
28
- end
29
-
30
- should "add a named stdout output using the `stdout` method" do
31
- assert_kind_of NullOutput, Logsly.outputs('test_stdout')
32
- Logsly.stdout('test_stdout') {}
33
-
34
- assert_not_nil Logsly.outputs('test_stdout')
35
- assert_kind_of StdoutOutput, Logsly.outputs('test_stdout')
36
- end
37
-
38
- should "add a named file output using the `file` method" do
39
- assert_kind_of NullOutput, Logsly.outputs('test_file')
40
- Logsly.file('test_file') {}
41
-
42
- assert_not_nil Logsly.outputs('test_file')
43
- assert_kind_of FileOutput, Logsly.outputs('test_file')
44
- end
45
-
46
- should "add a named syslog output using the `syslog` method" do
47
- assert_kind_of NullOutput, Logsly.outputs('test_syslog')
48
- Logsly.syslog('test_syslog') {}
49
-
50
- assert_not_nil Logsly.outputs('test_syslog')
51
- assert_kind_of SyslogOutput, Logsly.outputs('test_syslog')
52
- end
53
-
54
- should "convert non-string setting names to string" do
55
- Logsly.colors(:test_colors) {}
56
-
57
- assert_not_nil Logsly.colors(:test_colors)
58
- assert_kind_of Colors, Logsly.colors(:test_colors)
59
- end
60
-
61
- should "overwrite same-named colors settings" do
62
- Logsly.colors('something') {}
63
- orig = Logsly.colors('something')
64
- Logsly.colors('something') {}
65
-
66
- assert_not_same orig, Logsly.colors('something')
67
- end
68
-
69
- should "overwrite same-named outputs settings" do
70
- Logsly.stdout('something') {}
71
- assert_kind_of StdoutOutput, Logsly.outputs('something')
72
-
73
- Logsly.file('something') {}
74
- assert_kind_of FileOutput, Logsly.outputs('something')
75
- end
76
-
77
- end
78
-
79
- class ResetTests < SettingsTests
80
- desc "`reset` method"
81
- setup do
82
- Logsly.colors('test_colors') {}
83
- Logsly.stdout('test_stdout') {}
84
- end
85
-
86
- should "reset the Settings" do
87
- assert_kind_of Colors, Logsly.colors('test_colors')
88
- assert_kind_of StdoutOutput, Logsly.outputs('test_stdout')
89
-
90
- Logsly.reset
91
-
92
- assert_kind_of NullColors, Logsly.colors('test_colors')
93
- assert_kind_of NullOutput, Logsly.outputs('test_stdout')
94
- end
95
-
96
- end
97
-
98
- end