mixlib-log 1.2.0 → 1.3.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.
- data/lib/mixlib/log/version.rb +5 -0
- data/lib/mixlib/log.rb +100 -24
- metadata +14 -33
- data/.gitignore +0 -5
- data/Rakefile +0 -69
- data/VERSION.yml +0 -5
- data/features/log.feature +0 -37
- data/features/steps/log.rb +0 -48
- data/features/support/env.rb +0 -46
- data/features/support/logit.rb +0 -21
- data/spec/mixlib/log/formatter_spec.rb +0 -51
- data/spec/mixlib/log_spec.rb +0 -107
- data/spec/spec.opts +0 -4
- data/spec/spec_helper.rb +0 -28
data/lib/mixlib/log.rb
CHANGED
@@ -7,9 +7,9 @@
|
|
7
7
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
8
|
# you may not use this file except in compliance with the License.
|
9
9
|
# You may obtain a copy of the License at
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
12
|
+
#
|
13
13
|
# Unless required by applicable law or agreed to in writing, software
|
14
14
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
15
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
@@ -17,14 +17,28 @@
|
|
17
17
|
# limitations under the License.
|
18
18
|
|
19
19
|
require 'logger'
|
20
|
+
require 'mixlib/log/version'
|
20
21
|
require 'mixlib/log/formatter'
|
21
22
|
|
22
23
|
module Mixlib
|
23
24
|
module Log
|
24
|
-
|
25
|
-
@logger = nil
|
26
|
-
|
27
|
-
|
25
|
+
|
26
|
+
@logger, @loggers = nil
|
27
|
+
|
28
|
+
LEVELS = { :debug=>Logger::DEBUG, :info=>Logger::INFO, :warn=>Logger::WARN, :error=>Logger::ERROR, :fatal=>Logger::FATAL}.freeze
|
29
|
+
LEVEL_NAMES = LEVELS.invert.freeze
|
30
|
+
|
31
|
+
|
32
|
+
def reset!
|
33
|
+
@logger, @loggers = nil, nil
|
34
|
+
end
|
35
|
+
|
36
|
+
# An Array of log devices that will be logged to. Defaults to just the default
|
37
|
+
# @logger log device, but you can push to this array to add more devices.
|
38
|
+
def loggers
|
39
|
+
@loggers ||= [logger]
|
40
|
+
end
|
41
|
+
|
28
42
|
##
|
29
43
|
# init always returns a configured logger
|
30
44
|
# and creates a new one if it doesn't yet exist
|
@@ -33,10 +47,27 @@ module Mixlib
|
|
33
47
|
@logger || init
|
34
48
|
end
|
35
49
|
|
36
|
-
|
37
|
-
|
50
|
+
# Sets the log device to +new_log_device+. Any additional loggers
|
51
|
+
# that had been added to the +loggers+ array will be cleared.
|
52
|
+
def logger=(new_log_device)
|
53
|
+
reset!
|
54
|
+
@logger=new_log_device
|
55
|
+
end
|
56
|
+
|
57
|
+
def use_log_devices(other)
|
58
|
+
if other.respond_to?(:loggers) && other.respond_to?(:logger)
|
59
|
+
@loggers = other.loggers
|
60
|
+
@logger = other.logger
|
61
|
+
elsif other.kind_of?(Array)
|
62
|
+
@loggers = other
|
63
|
+
@logger = other.first
|
64
|
+
else
|
65
|
+
msg = "#use_log_devices takes a Mixlib::Log object or array of log devices. " <<
|
66
|
+
"You gave: #{other.inspect}"
|
67
|
+
raise ArgumentError, msg
|
68
|
+
end
|
38
69
|
end
|
39
|
-
|
70
|
+
|
40
71
|
# Use Mixlib::Log.init when you want to set up the logger manually. Arguments to this method
|
41
72
|
# get passed directly to Logger.new, so check out the documentation for the standard Logger class
|
42
73
|
# to understand what to do here.
|
@@ -45,12 +76,13 @@ module Mixlib
|
|
45
76
|
#
|
46
77
|
# It also configures the Logger instance it creates to use the custom Mixlib::Log::Formatter class.
|
47
78
|
def init(*opts)
|
48
|
-
|
49
|
-
@logger
|
79
|
+
reset!
|
80
|
+
@logger = logger_for(*opts)
|
81
|
+
@logger.formatter = Mixlib::Log::Formatter.new() if @logger.respond_to?(:formatter=)
|
50
82
|
@logger.level = Logger::WARN
|
51
83
|
@logger
|
52
84
|
end
|
53
|
-
|
85
|
+
|
54
86
|
# Sets the level for the Logger object by symbol. Valid arguments are:
|
55
87
|
#
|
56
88
|
# :debug
|
@@ -60,26 +92,70 @@ module Mixlib
|
|
60
92
|
# :fatal
|
61
93
|
#
|
62
94
|
# Throws an ArgumentError if you feed it a bogus log level.
|
63
|
-
def level=(
|
64
|
-
|
65
|
-
raise ArgumentError, "Log level must be one of :debug, :info, :warn, :error, or :fatal" if
|
66
|
-
|
95
|
+
def level=(new_level)
|
96
|
+
level_int = LEVEL_NAMES.key?(new_level) ? new_level : LEVELS[new_level]
|
97
|
+
raise ArgumentError, "Log level must be one of :debug, :info, :warn, :error, or :fatal" if level_int.nil?
|
98
|
+
loggers.each {|l| l.level = level_int }
|
67
99
|
end
|
68
100
|
|
69
|
-
def level(
|
70
|
-
if
|
71
|
-
|
101
|
+
def level(new_level=nil)
|
102
|
+
if new_level.nil?
|
103
|
+
LEVEL_NAMES[logger.level]
|
72
104
|
else
|
73
|
-
self.level=(
|
105
|
+
self.level=(new_level)
|
74
106
|
end
|
75
107
|
end
|
76
|
-
|
108
|
+
|
109
|
+
# Define the standard logger methods on this class programmatically.
|
110
|
+
# No need to incur method_missing overhead on every log call.
|
111
|
+
[:debug, :info, :warn, :error, :fatal].each do |method_name|
|
112
|
+
class_eval(<<-METHOD_DEFN, __FILE__, __LINE__)
|
113
|
+
def #{method_name}(msg=nil, &block)
|
114
|
+
loggers.each {|l| l.#{method_name}(msg, &block) }
|
115
|
+
end
|
116
|
+
METHOD_DEFN
|
117
|
+
end
|
118
|
+
|
119
|
+
# Define the methods to interrogate the logger for the current log level.
|
120
|
+
# Note that we *only* query the default logger (@logger) and not any other
|
121
|
+
# loggers that may have been added, even though it is possible to configure
|
122
|
+
# two (or more) loggers at different log levels.
|
123
|
+
[:debug?, :info?, :warn?, :error?, :fatal?].each do |method_name|
|
124
|
+
class_eval(<<-METHOD_DEFN, __FILE__, __LINE__)
|
125
|
+
def #{method_name}
|
126
|
+
logger.#{method_name}
|
127
|
+
end
|
128
|
+
METHOD_DEFN
|
129
|
+
end
|
130
|
+
|
131
|
+
def <<(msg)
|
132
|
+
loggers.each {|l| l << msg }
|
133
|
+
end
|
134
|
+
|
135
|
+
def add(severity, message = nil, progname = nil, &block)
|
136
|
+
loggers.each {|l| l.add(severity, message = nil, progname = nil, &block) }
|
137
|
+
end
|
138
|
+
|
139
|
+
alias :log :add
|
140
|
+
|
77
141
|
# Passes any other method calls on directly to the underlying Logger object created with init. If
|
78
|
-
# this method gets hit before a call to Mixlib::Logger.init has been made, it will call
|
142
|
+
# this method gets hit before a call to Mixlib::Logger.init has been made, it will call
|
79
143
|
# Mixlib::Logger.init() with no arguments.
|
80
144
|
def method_missing(method_symbol, *args, &block)
|
81
|
-
|
145
|
+
loggers.each {|l| l.send(method_symbol, *args, &block) }
|
146
|
+
end
|
147
|
+
|
148
|
+
private
|
149
|
+
|
150
|
+
def logger_for(*opts)
|
151
|
+
if opts.empty?
|
152
|
+
Logger.new(STDOUT)
|
153
|
+
elsif LEVELS.keys.inject(true) {|quacks, level| quacks && opts.first.respond_to?(level)}
|
154
|
+
opts.first
|
155
|
+
else
|
156
|
+
Logger.new(*opts)
|
157
|
+
end
|
82
158
|
end
|
83
|
-
|
159
|
+
|
84
160
|
end
|
85
161
|
end
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mixlib-log
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 1
|
7
|
-
- 2
|
8
|
-
- 0
|
9
|
-
version: 1.2.0
|
4
|
+
prerelease:
|
5
|
+
version: 1.3.0
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Opscode, Inc.
|
@@ -14,7 +10,7 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date:
|
13
|
+
date: 2011-03-23 00:00:00 -07:00
|
18
14
|
default_executable:
|
19
15
|
dependencies: []
|
20
16
|
|
@@ -25,32 +21,23 @@ executables: []
|
|
25
21
|
extensions: []
|
26
22
|
|
27
23
|
extra_rdoc_files:
|
28
|
-
- LICENSE
|
29
24
|
- README.rdoc
|
30
|
-
files:
|
31
|
-
- .gitignore
|
32
25
|
- LICENSE
|
33
26
|
- NOTICE
|
34
|
-
|
35
|
-
- Rakefile
|
36
|
-
- VERSION.yml
|
37
|
-
- features/log.feature
|
38
|
-
- features/steps/log.rb
|
39
|
-
- features/support/env.rb
|
40
|
-
- features/support/logit.rb
|
41
|
-
- lib/mixlib/log.rb
|
27
|
+
files:
|
42
28
|
- lib/mixlib/log/formatter.rb
|
43
|
-
-
|
44
|
-
-
|
45
|
-
-
|
46
|
-
-
|
29
|
+
- lib/mixlib/log/version.rb
|
30
|
+
- lib/mixlib/log.rb
|
31
|
+
- README.rdoc
|
32
|
+
- LICENSE
|
33
|
+
- NOTICE
|
47
34
|
has_rdoc: true
|
48
35
|
homepage: http://www.opscode.com
|
49
36
|
licenses: []
|
50
37
|
|
51
38
|
post_install_message:
|
52
|
-
rdoc_options:
|
53
|
-
|
39
|
+
rdoc_options: []
|
40
|
+
|
54
41
|
require_paths:
|
55
42
|
- lib
|
56
43
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -58,25 +45,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
58
45
|
requirements:
|
59
46
|
- - ">="
|
60
47
|
- !ruby/object:Gem::Version
|
61
|
-
segments:
|
62
|
-
- 0
|
63
48
|
version: "0"
|
64
49
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
50
|
none: false
|
66
51
|
requirements:
|
67
52
|
- - ">="
|
68
53
|
- !ruby/object:Gem::Version
|
69
|
-
segments:
|
70
|
-
- 0
|
71
54
|
version: "0"
|
72
55
|
requirements: []
|
73
56
|
|
74
57
|
rubyforge_project:
|
75
|
-
rubygems_version: 1.
|
58
|
+
rubygems_version: 1.6.2
|
76
59
|
signing_key:
|
77
60
|
specification_version: 3
|
78
61
|
summary: A gem that provides a simple mixin for log functionality
|
79
|
-
test_files:
|
80
|
-
|
81
|
-
- spec/mixlib/log_spec.rb
|
82
|
-
- spec/spec_helper.rb
|
62
|
+
test_files: []
|
63
|
+
|
data/Rakefile
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'rake'
|
3
|
-
|
4
|
-
begin
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "mixlib-log"
|
8
|
-
gem.summary = "A gem that provides a simple mixin for log functionality"
|
9
|
-
gem.email = "info@opscode.com"
|
10
|
-
gem.homepage = "http://www.opscode.com"
|
11
|
-
gem.authors = ["Opscode, Inc."]
|
12
|
-
gem.files.include %w{ bin/* lib/**/* }
|
13
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
14
|
-
end
|
15
|
-
Jeweler::GemcutterTasks.new
|
16
|
-
rescue LoadError
|
17
|
-
STDERR.puts
|
18
|
-
STDERR.puts "Jeweler is not installed. (sudo) gem install jeweler to use gem packaging tasks"
|
19
|
-
STDERR.puts
|
20
|
-
end
|
21
|
-
|
22
|
-
begin
|
23
|
-
require 'spec/rake/spectask'
|
24
|
-
Spec::Rake::SpecTask.new(:spec) do |spec|
|
25
|
-
spec.libs << 'lib' << 'spec'
|
26
|
-
spec.spec_opts = ['--options', "\"#{File.dirname(__FILE__)}/spec/spec.opts\""]
|
27
|
-
spec.spec_files = FileList['spec/**/*_spec.rb']
|
28
|
-
end
|
29
|
-
|
30
|
-
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
31
|
-
spec.libs << 'lib' << 'spec'
|
32
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
33
|
-
spec.rcov = true
|
34
|
-
end
|
35
|
-
rescue LoadError
|
36
|
-
task :spec do
|
37
|
-
abort "Rspec is not available. (sudo) gem install rspec to run unit tests"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
|
42
|
-
begin
|
43
|
-
require 'cucumber/rake/task'
|
44
|
-
Cucumber::Rake::Task.new(:features)
|
45
|
-
rescue LoadError
|
46
|
-
task :features do
|
47
|
-
abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
task :default => :spec
|
52
|
-
|
53
|
-
require 'rake/rdoctask'
|
54
|
-
require 'yaml'
|
55
|
-
|
56
|
-
Rake::RDocTask.new do |rdoc|
|
57
|
-
if File.exist?('VERSION.yml')
|
58
|
-
config = YAML.load(File.read('VERSION.yml'))
|
59
|
-
version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
60
|
-
else
|
61
|
-
version = ""
|
62
|
-
end
|
63
|
-
|
64
|
-
rdoc.rdoc_dir = 'rdoc'
|
65
|
-
rdoc.title = "mixlib-log #{version}"
|
66
|
-
rdoc.rdoc_files.include('README*')
|
67
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
68
|
-
end
|
69
|
-
|
data/VERSION.yml
DELETED
data/features/log.feature
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
Feature: Log output
|
2
|
-
In order to keep a record of application specific information
|
3
|
-
As a developer
|
4
|
-
I want to publish information through a configurable log interface
|
5
|
-
|
6
|
-
Scenario: Log a message at the debug level
|
7
|
-
Given a base log level of 'debug'
|
8
|
-
When the message 'this goes out' is sent at the 'debug' level
|
9
|
-
Then the regex '\[.+\] DEBUG: this goes out' should be logged
|
10
|
-
|
11
|
-
Scenario: Log a message at the info level
|
12
|
-
Given a base log level of 'info'
|
13
|
-
When the message 'this goes out' is sent at the 'info' level
|
14
|
-
Then the regex '\[.+\] INFO: this goes out' should be logged
|
15
|
-
|
16
|
-
Scenario: Log a message at the warn level
|
17
|
-
Given a base log level of 'warn'
|
18
|
-
When the message 'this goes out' is sent at the 'warn' level
|
19
|
-
Then the regex '\[.+\] WARN: this goes out' should be logged
|
20
|
-
|
21
|
-
Scenario: Log a message at the error level
|
22
|
-
Given a base log level of 'error'
|
23
|
-
When the message 'this goes out' is sent at the 'error' level
|
24
|
-
Then the regex '\[.+\] ERROR: this goes out' should be logged
|
25
|
-
|
26
|
-
Scenario: Log a message at the fatal level
|
27
|
-
Given a base log level of 'fatal'
|
28
|
-
When the message 'this goes out' is sent at the 'fatal' level
|
29
|
-
Then the regex '\[.+\] FATAL: this goes out' should be logged
|
30
|
-
|
31
|
-
Scenario: Log messages below the current threshold should not appear
|
32
|
-
Given a base log level of 'fatal'
|
33
|
-
When the message 'this goes out' is sent at the 'error' level
|
34
|
-
And the message 'this goes out' is sent at the 'warn' level
|
35
|
-
And the message 'this goes out' is sent at the 'info' level
|
36
|
-
And the message 'this goes out' is sent at the 'debug' level
|
37
|
-
Then nothing should be logged
|
data/features/steps/log.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
-
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
#
|
18
|
-
|
19
|
-
Given /^a base log level of '(.+)'$/ do |level|
|
20
|
-
Logit.level = level.to_sym
|
21
|
-
end
|
22
|
-
|
23
|
-
When /^the message '(.+)' is sent at the '(.+)' level$/ do |message, level|
|
24
|
-
case level.to_sym
|
25
|
-
when :debug
|
26
|
-
Logit.debug(message)
|
27
|
-
when :info
|
28
|
-
Logit.info(message)
|
29
|
-
when :warn
|
30
|
-
Logit.warn(message)
|
31
|
-
when :error
|
32
|
-
Logit.error(message)
|
33
|
-
when :fatal
|
34
|
-
Logit.fatal(message)
|
35
|
-
else
|
36
|
-
raise ArgumentError, "Level is not one of debug, info, warn, error, or fatal"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
Then /^the regex '(.+)' should be logged$/ do |regex_string|
|
41
|
-
regex = Regexp.new(regex_string, Regexp::MULTILINE)
|
42
|
-
regex.match(@output).should_not == nil
|
43
|
-
end
|
44
|
-
|
45
|
-
Then /^nothing should be logged$/ do
|
46
|
-
@output.should == ""
|
47
|
-
end
|
48
|
-
|
data/features/support/env.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
-
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
#
|
18
|
-
|
19
|
-
$: << File.join(File.dirname(__FILE__), '..', '..', 'lib')
|
20
|
-
|
21
|
-
require 'spec/expectations'
|
22
|
-
require 'mixlib/log'
|
23
|
-
require 'tmpdir'
|
24
|
-
require 'stringio'
|
25
|
-
|
26
|
-
class MyWorld
|
27
|
-
def initialize
|
28
|
-
@tmpdir = File.join(Dir.tmpdir, "mixlib_log")
|
29
|
-
@output = ''
|
30
|
-
@output_io = StringIO.new(@output)
|
31
|
-
Logit.init(@output_io)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
World do
|
36
|
-
MyWorld.new
|
37
|
-
end
|
38
|
-
|
39
|
-
Before do
|
40
|
-
system("mkdir -p #{@tmpdir}")
|
41
|
-
end
|
42
|
-
|
43
|
-
After do
|
44
|
-
system("rm -rf #{@tmpdir}")
|
45
|
-
end
|
46
|
-
|
data/features/support/logit.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
-
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
#
|
18
|
-
|
19
|
-
class Logit
|
20
|
-
extend Mixlib::Log
|
21
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
-
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
#
|
18
|
-
|
19
|
-
require 'time'
|
20
|
-
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
|
21
|
-
|
22
|
-
describe Mixlib::Log::Formatter do
|
23
|
-
before(:each) do
|
24
|
-
@formatter = Mixlib::Log::Formatter.new
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should print raw strings with msg2str(string)" do
|
28
|
-
@formatter.msg2str("nuthin new").should == "nuthin new"
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should format exceptions properly with msg2str(e)" do
|
32
|
-
e = IOError.new("legendary roots crew")
|
33
|
-
@formatter.msg2str(e).should == "legendary roots crew (IOError)\n"
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should format random objects via inspect with msg2str(Object)" do
|
37
|
-
@formatter.msg2str([ "black thought", "?uestlove" ]).should == '["black thought", "?uestlove"]'
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should return a formatted string with call" do
|
41
|
-
time = Time.new
|
42
|
-
Mixlib::Log::Formatter.show_time = true
|
43
|
-
@formatter.call("monkey", time, "test", "mos def").should == "[#{time.rfc2822}] monkey: mos def\n"
|
44
|
-
end
|
45
|
-
|
46
|
-
it "should allow you to turn the time on and off in the output" do
|
47
|
-
Mixlib::Log::Formatter.show_time = false
|
48
|
-
@formatter.call("monkey", Time.new, "test", "mos def").should == "monkey: mos def\n"
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
data/spec/mixlib/log_spec.rb
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
-
# Author:: Christopher Brown (<cb@opscode.com>)
|
4
|
-
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
5
|
-
# License:: Apache License, Version 2.0
|
6
|
-
#
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
# you may not use this file except in compliance with the License.
|
9
|
-
# You may obtain a copy of the License at
|
10
|
-
#
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
-
# See the License for the specific language governing permissions and
|
17
|
-
# limitations under the License.
|
18
|
-
#
|
19
|
-
|
20
|
-
require 'tempfile'
|
21
|
-
require File.expand_path(File.join(File.dirname(__FILE__), "..", "spec_helper"))
|
22
|
-
|
23
|
-
describe Mixlib::Log do
|
24
|
-
|
25
|
-
# Since we are testing class behaviour for an instance variable
|
26
|
-
# that gets set once, we need to reset it prior to each example [cb]
|
27
|
-
before(:each) do
|
28
|
-
Logit.instance_variable_set("@logger",nil)
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should accept regular options to Logger.new via init" do
|
32
|
-
Tempfile.open("chef-test-log") do |tf|
|
33
|
-
lambda { Logit.init(STDOUT) }.should_not raise_error
|
34
|
-
lambda { Logit.init(tf) }.should_not raise_error
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should re-initialize the logger if init is called again" do
|
39
|
-
first_logdev, second_logdev = StringIO.new, StringIO.new
|
40
|
-
Logit.init(first_logdev)
|
41
|
-
Logit.fatal "FIRST"
|
42
|
-
first_logdev.string.should match(/FIRST/)
|
43
|
-
Logit.init(second_logdev)
|
44
|
-
Logit.fatal "SECOND"
|
45
|
-
first_logdev.string.should_not match(/SECOND/)
|
46
|
-
second_logdev.string.should match(/SECOND/)
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should set the log level using the binding form, with :debug, :info, :warn, :error, or :fatal" do
|
50
|
-
levels = {
|
51
|
-
:debug => Logger::DEBUG,
|
52
|
-
:info => Logger::INFO,
|
53
|
-
:warn => Logger::WARN,
|
54
|
-
:error => Logger::ERROR,
|
55
|
-
:fatal => Logger::FATAL
|
56
|
-
}
|
57
|
-
levels.each do |symbol, constant|
|
58
|
-
Logit.level = symbol
|
59
|
-
Logit.logger.level.should == constant
|
60
|
-
Logit.level.should == symbol
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
it "passes blocks to the underlying logger object" do
|
65
|
-
logdev = StringIO.new
|
66
|
-
Logit.init(logdev)
|
67
|
-
Logit.fatal { "the_message" }
|
68
|
-
logdev.string.should match(/the_message/)
|
69
|
-
end
|
70
|
-
|
71
|
-
|
72
|
-
it "should set the log level using the method form, with :debug, :info, :warn, :error, or :fatal" do
|
73
|
-
levels = {
|
74
|
-
:debug => Logger::DEBUG,
|
75
|
-
:info => Logger::INFO,
|
76
|
-
:warn => Logger::WARN,
|
77
|
-
:error => Logger::ERROR,
|
78
|
-
:fatal => Logger::FATAL
|
79
|
-
}
|
80
|
-
levels.each do |symbol, constant|
|
81
|
-
Logit.level(symbol)
|
82
|
-
Logit.logger.level.should == constant
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
it "should raise an ArgumentError if you try and set the level to something strange using the binding form" do
|
87
|
-
lambda { Logit.level = :the_roots }.should raise_error(ArgumentError)
|
88
|
-
end
|
89
|
-
|
90
|
-
it "should raise an ArgumentError if you try and set the level to something strange using the method form" do
|
91
|
-
lambda { Logit.level(:the_roots) }.should raise_error(ArgumentError)
|
92
|
-
end
|
93
|
-
|
94
|
-
it "should pass other method calls directly to logger" do
|
95
|
-
Logit.level = :debug
|
96
|
-
Logit.should be_debug
|
97
|
-
lambda { Logit.debug("Gimme some sugar!") }.should_not raise_error
|
98
|
-
end
|
99
|
-
|
100
|
-
it "should default to STDOUT if init is called with no arguments" do
|
101
|
-
logger_mock = mock(Logger, :null_object => true)
|
102
|
-
Logger.stub!(:new).and_return(logger_mock)
|
103
|
-
Logger.should_receive(:new).with(STDOUT).and_return(logger_mock)
|
104
|
-
Logit.init
|
105
|
-
end
|
106
|
-
|
107
|
-
end
|
data/spec/spec.opts
DELETED
data/spec/spec_helper.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
-
# Author:: Christopher Brown (<cb@opscode.com>)
|
4
|
-
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
5
|
-
# License:: Apache License, Version 2.0
|
6
|
-
#
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
# you may not use this file except in compliance with the License.
|
9
|
-
# You may obtain a copy of the License at
|
10
|
-
#
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
-
# See the License for the specific language governing permissions and
|
17
|
-
# limitations under the License.
|
18
|
-
#
|
19
|
-
|
20
|
-
$TESTING=true
|
21
|
-
$:.push File.join(File.dirname(__FILE__), '..', 'lib')
|
22
|
-
|
23
|
-
require 'mixlib/log'
|
24
|
-
require 'mixlib/log/formatter'
|
25
|
-
|
26
|
-
class Logit
|
27
|
-
extend Mixlib::Log
|
28
|
-
end
|