mixlib-log 1.0.3 → 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.
- data/.gitignore +5 -0
- data/NOTICE +27 -0
- data/Rakefile +3 -2
- data/VERSION.yml +2 -2
- data/features/log.feature +37 -0
- data/features/steps/log.rb +48 -0
- data/features/support/env.rb +46 -0
- data/features/support/logit.rb +21 -0
- data/lib/mixlib/log.rb +20 -7
- data/spec/mixlib/log_spec.rb +23 -3
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +21 -2
- metadata +19 -5
data/NOTICE
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
Mixin::Log NOTICE
|
2
|
+
=================
|
3
|
+
|
4
|
+
Developed at Opscode (http://www.opscode.com).
|
5
|
+
|
6
|
+
* Copyright 2009, Opscode, Inc. <legal@opscode.com>
|
7
|
+
|
8
|
+
Mixin::Log incorporates code from Chef. The Chef notice file follows:
|
9
|
+
|
10
|
+
Chef NOTICE
|
11
|
+
===========
|
12
|
+
|
13
|
+
Developed at Opscode (http://www.opscode.com).
|
14
|
+
|
15
|
+
Contributors and Copyright holders:
|
16
|
+
|
17
|
+
* Copyright 2008, Adam Jacob <adam@opscode.com>
|
18
|
+
* Copyright 2008, Arjuna Christensen <aj@hjksolutions.com>
|
19
|
+
* Copyright 2008, Bryan McLellan <btm@loftninjas.org>
|
20
|
+
* Copyright 2008, Ezra Zygmuntowicz <ezra@engineyard.com>
|
21
|
+
* Copyright 2009, Sean Cribbs <seancribbs@gmail.com>
|
22
|
+
* Copyright 2009, Christopher Brown <cb@opscode.com>
|
23
|
+
* Copyright 2009, Thom May <thom@clearairturbulence.org>
|
24
|
+
|
25
|
+
Chef incorporates code modified from Open4 (http://www.codeforpeople.com/lib/ruby/open4/), which was written by Ara T. Howard.
|
26
|
+
|
27
|
+
Chef incorporates code modified from Merb (http://www.merbivore.com), which is Copyright (c) 2008 Engine Yard.
|
data/Rakefile
CHANGED
@@ -9,11 +9,12 @@ begin
|
|
9
9
|
gem.email = "info@opscode.com"
|
10
10
|
gem.homepage = "http://www.opscode.com"
|
11
11
|
gem.authors = ["Opscode, Inc."]
|
12
|
-
|
12
|
+
gem.files.include %w{ bin/* lib/**/* }
|
13
13
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
14
14
|
end
|
15
|
+
Jeweler::GemcutterTasks.new
|
15
16
|
rescue LoadError
|
16
|
-
puts "Jeweler not available. Install it with: sudo gem install
|
17
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install gemcutter jeweler (installs jeweler from gemcutter)"
|
17
18
|
end
|
18
19
|
|
19
20
|
require 'spec/rake/spectask'
|
data/VERSION.yml
CHANGED
@@ -0,0 +1,37 @@
|
|
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
|
@@ -0,0 +1,48 @@
|
|
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
|
+
|
@@ -0,0 +1,46 @@
|
|
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
|
+
|
@@ -0,0 +1,21 @@
|
|
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
|
data/lib/mixlib/log.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
+
# Author:: Christopher Brown (<cb@opscode.com>)
|
3
4
|
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
4
5
|
# License:: Apache License, Version 2.0
|
5
6
|
#
|
@@ -15,16 +16,15 @@
|
|
15
16
|
# See the License for the specific language governing permissions and
|
16
17
|
# limitations under the License.
|
17
18
|
|
18
|
-
require 'mixlib/log/formatter'
|
19
19
|
require 'logger'
|
20
|
+
require 'mixlib/log/formatter'
|
20
21
|
|
21
22
|
module Mixlib
|
22
23
|
module Log
|
23
24
|
|
24
25
|
@logger = nil
|
26
|
+
@@levels = { :debug=>Logger::DEBUG, :info=>Logger::INFO, :warn=>Logger::WARN, :error=>Logger::ERROR, :fatal=>Logger::FATAL}
|
25
27
|
|
26
|
-
attr_writer :logger #:nodoc
|
27
|
-
|
28
28
|
##
|
29
29
|
# init always returns a configured logger
|
30
30
|
# and creates a new one if it doesn't yet exist
|
@@ -32,6 +32,10 @@ module Mixlib
|
|
32
32
|
def logger
|
33
33
|
init
|
34
34
|
end
|
35
|
+
|
36
|
+
def logger=(value)
|
37
|
+
@logger=value
|
38
|
+
end
|
35
39
|
|
36
40
|
# Use Mixlib::Log.init when you want to set up the logger manually. Arguments to this method
|
37
41
|
# get passed directly to Logger.new, so check out the documentation for the standard Logger class
|
@@ -44,6 +48,7 @@ module Mixlib
|
|
44
48
|
if @logger.nil?
|
45
49
|
@logger = (opts.empty? ? Logger.new(STDOUT) : Logger.new(*opts))
|
46
50
|
@logger.formatter = Mixlib::Log::Formatter.new()
|
51
|
+
@logger.level = Logger::WARN
|
47
52
|
end
|
48
53
|
@logger
|
49
54
|
end
|
@@ -57,10 +62,18 @@ module Mixlib
|
|
57
62
|
# :fatal
|
58
63
|
#
|
59
64
|
# Throws an ArgumentError if you feed it a bogus log level.
|
60
|
-
def level(
|
61
|
-
|
62
|
-
raise ArgumentError, "Log level must be one of :debug, :info, :warn, :error, or :fatal" if
|
63
|
-
logger.level =
|
65
|
+
def level=(l)
|
66
|
+
lv = @@levels[l]
|
67
|
+
raise ArgumentError, "Log level must be one of :debug, :info, :warn, :error, or :fatal" if lv.nil?
|
68
|
+
logger.level = lv
|
69
|
+
end
|
70
|
+
|
71
|
+
def level(lv=nil)
|
72
|
+
if lv.nil?
|
73
|
+
@@levels.find() {|l| logger.level==l[1]}[0]
|
74
|
+
else
|
75
|
+
self.level=(lv)
|
76
|
+
end
|
64
77
|
end
|
65
78
|
|
66
79
|
# Passes any other method calls on directly to the underlying Logger object created with init. If
|
data/spec/mixlib/log_spec.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
+
# Author:: Christopher Brown (<cb@opscode.com>)
|
3
4
|
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
4
5
|
# License:: Apache License, Version 2.0
|
5
6
|
#
|
@@ -34,7 +35,22 @@ describe Mixlib::Log do
|
|
34
35
|
lambda { Logit.init(tf) }.should_not raise_error
|
35
36
|
end
|
36
37
|
|
37
|
-
it "should set the log level with :debug, :info, :warn, :error, or :fatal" do
|
38
|
+
it "should set the log level using the binding form, with :debug, :info, :warn, :error, or :fatal" do
|
39
|
+
levels = {
|
40
|
+
:debug => Logger::DEBUG,
|
41
|
+
:info => Logger::INFO,
|
42
|
+
:warn => Logger::WARN,
|
43
|
+
:error => Logger::ERROR,
|
44
|
+
:fatal => Logger::FATAL
|
45
|
+
}
|
46
|
+
levels.each do |symbol, constant|
|
47
|
+
Logit.level = symbol
|
48
|
+
Logit.logger.level.should == constant
|
49
|
+
Logit.level.should == symbol
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should set the log level using the method form, with :debug, :info, :warn, :error, or :fatal" do
|
38
54
|
levels = {
|
39
55
|
:debug => Logger::DEBUG,
|
40
56
|
:info => Logger::INFO,
|
@@ -48,12 +64,16 @@ describe Mixlib::Log do
|
|
48
64
|
end
|
49
65
|
end
|
50
66
|
|
51
|
-
it "should raise an ArgumentError if you try and set the level to something strange" do
|
67
|
+
it "should raise an ArgumentError if you try and set the level to something strange using the binding form" do
|
68
|
+
lambda { Logit.level = :the_roots }.should raise_error(ArgumentError)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should raise an ArgumentError if you try and set the level to something strange using the method form" do
|
52
72
|
lambda { Logit.level(:the_roots) }.should raise_error(ArgumentError)
|
53
73
|
end
|
54
74
|
|
55
75
|
it "should pass other method calls directly to logger" do
|
56
|
-
Logit.level
|
76
|
+
Logit.level = :debug
|
57
77
|
Logit.should be_debug
|
58
78
|
lambda { Logit.debug("Gimme some sugar!") }.should_not raise_error
|
59
79
|
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,22 @@
|
|
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
|
+
|
1
20
|
$TESTING=true
|
2
21
|
$:.push File.join(File.dirname(__FILE__), '..', 'lib')
|
3
22
|
|
@@ -5,5 +24,5 @@ require 'mixlib/log'
|
|
5
24
|
require 'mixlib/log/formatter'
|
6
25
|
|
7
26
|
class Logit
|
8
|
-
extend
|
9
|
-
end
|
27
|
+
extend Mixlib::Log
|
28
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mixlib-log
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 1.1.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Opscode, Inc.
|
@@ -9,7 +14,7 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
17
|
+
date: 2010-02-28 00:00:00 -08:00
|
13
18
|
default_executable:
|
14
19
|
dependencies: []
|
15
20
|
|
@@ -23,14 +28,21 @@ extra_rdoc_files:
|
|
23
28
|
- LICENSE
|
24
29
|
- README.rdoc
|
25
30
|
files:
|
31
|
+
- .gitignore
|
26
32
|
- LICENSE
|
33
|
+
- NOTICE
|
27
34
|
- README.rdoc
|
28
35
|
- Rakefile
|
29
36
|
- VERSION.yml
|
37
|
+
- features/log.feature
|
38
|
+
- features/steps/log.rb
|
39
|
+
- features/support/env.rb
|
40
|
+
- features/support/logit.rb
|
30
41
|
- lib/mixlib/log.rb
|
31
42
|
- lib/mixlib/log/formatter.rb
|
32
43
|
- spec/mixlib/log/formatter_spec.rb
|
33
44
|
- spec/mixlib/log_spec.rb
|
45
|
+
- spec/spec.opts
|
34
46
|
- spec/spec_helper.rb
|
35
47
|
has_rdoc: true
|
36
48
|
homepage: http://www.opscode.com
|
@@ -45,18 +57,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
45
57
|
requirements:
|
46
58
|
- - ">="
|
47
59
|
- !ruby/object:Gem::Version
|
60
|
+
segments:
|
61
|
+
- 0
|
48
62
|
version: "0"
|
49
|
-
version:
|
50
63
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
64
|
requirements:
|
52
65
|
- - ">="
|
53
66
|
- !ruby/object:Gem::Version
|
67
|
+
segments:
|
68
|
+
- 0
|
54
69
|
version: "0"
|
55
|
-
version:
|
56
70
|
requirements: []
|
57
71
|
|
58
72
|
rubyforge_project:
|
59
|
-
rubygems_version: 1.3.
|
73
|
+
rubygems_version: 1.3.6
|
60
74
|
signing_key:
|
61
75
|
specification_version: 3
|
62
76
|
summary: A gem that provides a simple mixin for log functionality
|