logsly 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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