mixlib-log 2.0.4 → 2.0.9
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 +4 -4
- data/lib/mixlib/log/logging.rb +1 -1
- data/lib/mixlib/log/version.rb +1 -1
- metadata +5 -88
- data/.gemtest +0 -0
- data/Gemfile +0 -8
- data/NOTICE +0 -28
- data/README.md +0 -55
- data/Rakefile +0 -43
- data/mixlib-log.gemspec +0 -22
- data/spec/mixlib/log/child_spec.rb +0 -99
- data/spec/mixlib/log/formatter_spec.rb +0 -64
- data/spec/mixlib/log_spec.rb +0 -234
- data/spec/spec_helper.rb +0 -33
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a4360d5e8145d44c3bb5924bb02c741095094cc716139620f09d3efe8780a3a8
|
|
4
|
+
data.tar.gz: b4799ecbf00988179849a92fb8692e018fd062905c3dbb75a82181ecaefc7568
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 39b7e45f04d2777ff7024f6c77746763eb52fc79d996a0198cf8ef04c1a6cef5b7d813322f4b799f92fe6bf958280e1d84efa1a572f81c0136c1deefffbba0a6
|
|
7
|
+
data.tar.gz: ab05f0d55208b81abe16d6e25554133af5b2312a6865855dfef90289ed656409d91734db25bc770dbcd6876941ca47a141284d5cd26f62f639f401078143c6fd
|
data/lib/mixlib/log/logging.rb
CHANGED
|
@@ -29,7 +29,7 @@ module Mixlib
|
|
|
29
29
|
SEV_LABEL[sev + 1] || -"ANY"
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
LEVELS = { :
|
|
32
|
+
LEVELS = { trace: TRACE, debug: DEBUG, info: INFO, warn: WARN, error: ERROR, fatal: FATAL }.freeze
|
|
33
33
|
LEVEL_NAMES = LEVELS.invert.freeze
|
|
34
34
|
|
|
35
35
|
attr_accessor :metadata
|
data/lib/mixlib/log/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,112 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mixlib-log
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chef Software, Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-
|
|
12
|
-
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: rake
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ">="
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0'
|
|
20
|
-
type: :development
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - ">="
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: rspec
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - "~>"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '3.7'
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - "~>"
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '3.7'
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: chefstyle
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - ">="
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0'
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - ">="
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: cucumber
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - ">="
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '0'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - ">="
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '0'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: github_changelog_generator
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - ">="
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: 1.11.3
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - ">="
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: 1.11.3
|
|
11
|
+
date: 2018-12-18 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
83
13
|
description:
|
|
84
14
|
email: info@chef.io
|
|
85
15
|
executables: []
|
|
86
16
|
extensions: []
|
|
87
|
-
extra_rdoc_files:
|
|
88
|
-
- README.md
|
|
89
|
-
- LICENSE
|
|
90
|
-
- NOTICE
|
|
17
|
+
extra_rdoc_files: []
|
|
91
18
|
files:
|
|
92
|
-
- ".gemtest"
|
|
93
|
-
- Gemfile
|
|
94
19
|
- LICENSE
|
|
95
|
-
- NOTICE
|
|
96
|
-
- README.md
|
|
97
|
-
- Rakefile
|
|
98
20
|
- lib/mixlib/log.rb
|
|
99
21
|
- lib/mixlib/log/child.rb
|
|
100
22
|
- lib/mixlib/log/formatter.rb
|
|
101
23
|
- lib/mixlib/log/logger.rb
|
|
102
24
|
- lib/mixlib/log/logging.rb
|
|
103
25
|
- lib/mixlib/log/version.rb
|
|
104
|
-
|
|
105
|
-
- spec/mixlib/log/child_spec.rb
|
|
106
|
-
- spec/mixlib/log/formatter_spec.rb
|
|
107
|
-
- spec/mixlib/log_spec.rb
|
|
108
|
-
- spec/spec_helper.rb
|
|
109
|
-
homepage: https://www.chef.io
|
|
26
|
+
homepage: https://github.com/chef/mixlib-log
|
|
110
27
|
licenses:
|
|
111
28
|
- Apache-2.0
|
|
112
29
|
metadata: {}
|
data/.gemtest
DELETED
|
File without changes
|
data/Gemfile
DELETED
data/NOTICE
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
============
|
|
2
|
-
Mixin::Log Notices
|
|
3
|
-
============
|
|
4
|
-
|
|
5
|
-
Developed at Chef (http://www.chef.io).
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
* Copyright 2009-2016, Chef Software, Inc. <legal@chef.io>
|
|
9
|
-
|
|
10
|
-
Mixin::Log incorporates code from Chef. The Chef notice file follows:
|
|
11
|
-
|
|
12
|
-
============
|
|
13
|
-
Chef Notices
|
|
14
|
-
============
|
|
15
|
-
|
|
16
|
-
Developed at Chef (http://www.chef.io).
|
|
17
|
-
|
|
18
|
-
Contributors and Copyright holders:
|
|
19
|
-
|
|
20
|
-
* Copyright 2008, Adam Jacob <adam@chef.io>
|
|
21
|
-
* Copyright 2008, Arjuna Christensen <aj@hjksolutions.com>
|
|
22
|
-
* Copyright 2008, Bryan McLellan <btm@loftninjas.org>
|
|
23
|
-
* Copyright 2008, Ezra Zygmuntowicz <ezra@engineyard.com>
|
|
24
|
-
* Copyright 2009, Sean Cribbs <seancribbs@gmail.com>
|
|
25
|
-
* Copyright 2009, Christopher Brown <cb@chef.io>
|
|
26
|
-
* Copyright 2009, Thom May <thom@clearairturbulence.org>
|
|
27
|
-
|
|
28
|
-
Chef incorporates code modified from Open4 (http://www.codeforpeople.com/lib/ruby/open4/), which was written by Ara T. Howard.
|
data/README.md
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# Mixlib::Log
|
|
2
|
-
|
|
3
|
-
[](https://travis-ci.org/chef/mixlib-log) [](https://badge.fury.io/rb/mixlib-log)
|
|
4
|
-
|
|
5
|
-
Mixlib::Log provides a mixin for enabling a class based logger object, a-la Merb, Chef, and Nanite. To use it:
|
|
6
|
-
|
|
7
|
-
```ruby
|
|
8
|
-
require 'mixlib/log'
|
|
9
|
-
|
|
10
|
-
class Log
|
|
11
|
-
extend Mixlib::Log
|
|
12
|
-
end
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
You can then do:
|
|
16
|
-
|
|
17
|
-
```ruby
|
|
18
|
-
Log.debug('foo')
|
|
19
|
-
Log.info('bar')
|
|
20
|
-
Log.warn('baz')
|
|
21
|
-
Log.error('baz')
|
|
22
|
-
Log.fatal('wewt')
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
By default, `Mixlib::Logger` logs to STDOUT. To alter this, you should call `Log.init`, passing any arguments to the standard Ruby Logger. For example:
|
|
26
|
-
|
|
27
|
-
```ruby
|
|
28
|
-
Log.init('/tmp/logfile') # log to /tmp/logfile
|
|
29
|
-
Log.init('/tmp/logfile', 7) # log to /tmp/logfile, rotate every day
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
Enjoy!
|
|
33
|
-
|
|
34
|
-
## Contributing
|
|
35
|
-
|
|
36
|
-
For information on contributing to this project see <https://github.com/chef/chef/blob/master/CONTRIBUTING.md>
|
|
37
|
-
|
|
38
|
-
## License
|
|
39
|
-
|
|
40
|
-
- Copyright:: Copyright (c) 2008-2016 Chef Software, Inc.
|
|
41
|
-
- License:: Apache License, Version 2.0
|
|
42
|
-
|
|
43
|
-
```text
|
|
44
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
45
|
-
you may not use this file except in compliance with the License.
|
|
46
|
-
You may obtain a copy of the License at
|
|
47
|
-
|
|
48
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
49
|
-
|
|
50
|
-
Unless required by applicable law or agreed to in writing, software
|
|
51
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
52
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
53
|
-
See the License for the specific language governing permissions and
|
|
54
|
-
limitations under the License.
|
|
55
|
-
```
|
data/Rakefile
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
require "bundler/gem_tasks"
|
|
2
|
-
require "rdoc/task"
|
|
3
|
-
require "rspec/core/rake_task"
|
|
4
|
-
require "cucumber/rake/task"
|
|
5
|
-
|
|
6
|
-
RSpec::Core::RakeTask.new(:spec) do |spec|
|
|
7
|
-
spec.pattern = "spec/**/*_spec.rb"
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
task default: [:style, :spec, :features]
|
|
11
|
-
|
|
12
|
-
# For rubygems-test
|
|
13
|
-
task :test => :spec
|
|
14
|
-
|
|
15
|
-
RDoc::Task.new do |rdoc|
|
|
16
|
-
rdoc.rdoc_dir = "rdoc"
|
|
17
|
-
rdoc.title = "mixlib-log #{Mixlib::Log::VERSION}"
|
|
18
|
-
rdoc.rdoc_files.include("README*")
|
|
19
|
-
rdoc.rdoc_files.include("lib/**/*.rb")
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
Cucumber::Rake::Task.new(:features) do |t|
|
|
23
|
-
t.cucumber_opts = "--format pretty"
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
begin
|
|
27
|
-
require "chefstyle"
|
|
28
|
-
require "rubocop/rake_task"
|
|
29
|
-
RuboCop::RakeTask.new(:style) do |task|
|
|
30
|
-
task.options += ["--display-cop-names", "--no-color"]
|
|
31
|
-
end
|
|
32
|
-
rescue LoadError
|
|
33
|
-
puts "chefstyle/rubocop is not available. gem install chefstyle to do style checking."
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
require "github_changelog_generator/task"
|
|
37
|
-
|
|
38
|
-
GitHubChangelogGenerator::RakeTask.new :changelog do |config|
|
|
39
|
-
config.future_release = Mixlib::Log::VERSION
|
|
40
|
-
config.enhancement_labels = "enhancement,Enhancement,New Feature,Feature".split(",")
|
|
41
|
-
config.bug_labels = "bug,Bug,Improvement,Upstream Bug".split(",")
|
|
42
|
-
config.exclude_labels = "duplicate,question,invalid,wontfix,no_changelog,Exclude From Changelog,Question,Discussion".split(",")
|
|
43
|
-
end
|
data/mixlib-log.gemspec
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
$:.unshift File.expand_path("../lib", __FILE__)
|
|
2
|
-
require "mixlib/log/version"
|
|
3
|
-
|
|
4
|
-
Gem::Specification.new do |gem|
|
|
5
|
-
gem.name = "mixlib-log"
|
|
6
|
-
gem.version = Mixlib::Log::VERSION
|
|
7
|
-
gem.platform = Gem::Platform::RUBY
|
|
8
|
-
gem.summary = "A gem that provides a simple mixin for log functionality"
|
|
9
|
-
gem.email = "info@chef.io"
|
|
10
|
-
gem.homepage = "https://www.chef.io"
|
|
11
|
-
gem.license = "Apache-2.0"
|
|
12
|
-
gem.authors = ["Chef Software, Inc."]
|
|
13
|
-
gem.has_rdoc = true
|
|
14
|
-
gem.extra_rdoc_files = ["README.md", "LICENSE", "NOTICE"]
|
|
15
|
-
gem.files = Dir["lib/**/*"] + Dir["spec/**/*"] + ["Gemfile", "Rakefile", ".gemtest", "mixlib-log.gemspec"]
|
|
16
|
-
gem.required_ruby_version = ">= 2.2"
|
|
17
|
-
gem.add_development_dependency "rake"
|
|
18
|
-
gem.add_development_dependency "rspec", "~> 3.7"
|
|
19
|
-
gem.add_development_dependency "chefstyle"
|
|
20
|
-
gem.add_development_dependency "cucumber"
|
|
21
|
-
gem.add_development_dependency "github_changelog_generator", ">= 1.11.3"
|
|
22
|
-
end
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright:: Copyright (c) 2018 Chef Software, Inc.
|
|
3
|
-
# License:: Apache License, Version 2.0
|
|
4
|
-
#
|
|
5
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
# See the License for the specific language governing permissions and
|
|
15
|
-
# limitations under the License.
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
require "tempfile"
|
|
19
|
-
require "stringio"
|
|
20
|
-
require "spec_helper"
|
|
21
|
-
|
|
22
|
-
RSpec.describe Mixlib::Log::Child do
|
|
23
|
-
before do
|
|
24
|
-
Logit.reset!
|
|
25
|
-
Logit.init(io)
|
|
26
|
-
Logit.level = :warn
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
let(:io) { StringIO.new }
|
|
30
|
-
|
|
31
|
-
let(:child) { Logit.with_child }
|
|
32
|
-
|
|
33
|
-
it "has a parent" do
|
|
34
|
-
expect(child.parent).to be(Logit)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "accepts a message" do
|
|
38
|
-
Logit.with_child { |l| l.add(Logger::WARN, "a message") }
|
|
39
|
-
expect(io.string).to match(/a message$/)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
context "with structured data" do
|
|
43
|
-
it "can be created with metadata" do
|
|
44
|
-
expect(Logit).to receive(:pass).with(Mixlib::Log::LEVELS[:warn], "a message", nil, data: { child: "true" })
|
|
45
|
-
Logit.with_child({ child: "true" }) { |l| l.warn("a message") }
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it "a message can be logged" do
|
|
49
|
-
expect(Logit).to receive(:pass).with(Mixlib::Log::LEVELS[:warn], "a message", nil, data: { child: "true" })
|
|
50
|
-
Logit.with_child { |l| l.warn("a message", data: { child: "true" }) }
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
context "merges properly" do
|
|
54
|
-
it "in the simple case" do
|
|
55
|
-
expect(Logit).to receive(:pass).with(Mixlib::Log::LEVELS[:warn], "a message", nil, data: { child: "true", meta: "data" })
|
|
56
|
-
Logit.with_child(meta: "data") { |l| l.warn("a message", data: { child: "true" }) }
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it "when overwriting" do
|
|
60
|
-
expect(Logit).to receive(:pass).with(Mixlib::Log::LEVELS[:warn], "a message", nil, data: { child: "true", meta: "overwritten" })
|
|
61
|
-
Logit.with_child(meta: "data") { |l| l.warn("a message", data: { child: "true", meta: "overwritten" }) }
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
context "when receiving a message from a child" do
|
|
66
|
-
it "passes data on" do
|
|
67
|
-
expect(Logit).to receive(:pass).with(Mixlib::Log::LEVELS[:warn], "a message", nil, data: { child: "true", parent: "first" })
|
|
68
|
-
child.metadata = { parent: "first" }
|
|
69
|
-
child.with_child { |l| l.warn("a message", data: { child: "true" }) }
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
it "merges its own data" do
|
|
73
|
-
expect(Logit).to receive(:pass).with(Mixlib::Log::LEVELS[:warn], "a message", nil, data: { child: "true", parent: "second" })
|
|
74
|
-
child.metadata = { parent: "first" }
|
|
75
|
-
child.with_child { |l| l.warn("a message", data: { child: "true", parent: "second" }) }
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
context "sends a message to the parent" do
|
|
81
|
-
%i{ debug info warn error fatal }.each do |level|
|
|
82
|
-
it "at #{level}" do
|
|
83
|
-
expect(Logit).to receive(:pass).with(Mixlib::Log::LEVELS[level], "a #{level} message", nil, data: {})
|
|
84
|
-
Logit.level = level
|
|
85
|
-
child.send(level, "a #{level} message")
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
context "can query the parent's level" do
|
|
91
|
-
%i{ debug info warn error fatal }.each do |level|
|
|
92
|
-
it "at #{level}" do
|
|
93
|
-
query = "#{level}?".to_sym
|
|
94
|
-
Logit.level = level
|
|
95
|
-
expect(child.send(query)).to be(true)
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
end
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Adam Jacob (<adam@chef.io>)
|
|
3
|
-
# Copyright:: Copyright (c) 2008-2016 Chef Software, 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
|
-
RSpec.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
|
-
expect(@formatter.msg2str("nuthin new")).to eq("nuthin new")
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it "should format exceptions properly with msg2str(e)" do
|
|
32
|
-
e = IOError.new("legendary roots crew")
|
|
33
|
-
expect(@formatter.msg2str(e)).to eq("legendary roots crew (IOError)\n")
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
it "should format random objects via inspect with msg2str(Object)" do
|
|
37
|
-
expect(@formatter.msg2str([ "black thought", "?uestlove" ])).to eq('["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
|
-
expect(@formatter.call("monkey", time, "test", "mos def")).to eq("[#{time.iso8601}] 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
|
-
expect(@formatter.call("monkey", Time.new, "test", "mos def")).to eq("monkey: mos def\n")
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
context "with structured data" do
|
|
52
|
-
let(:data) { {} }
|
|
53
|
-
|
|
54
|
-
it "should format a message" do
|
|
55
|
-
data[:msg] = "nuthin new"
|
|
56
|
-
expect(@formatter.msg2str(data)).to eq("nuthin new")
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it "should format an exception" do
|
|
60
|
-
data[:err] = IOError.new("legendary roots crew")
|
|
61
|
-
expect(@formatter.msg2str(data)).to eq("legendary roots crew (IOError)\n")
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
data/spec/mixlib/log_spec.rb
DELETED
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Adam Jacob (<adam@chef.io>)
|
|
3
|
-
# Author:: Christopher Brown (<cb@chef.io>)
|
|
4
|
-
# Copyright:: Copyright (c) 2008-2016 Chef Software, 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 "stringio"
|
|
22
|
-
require "spec_helper"
|
|
23
|
-
|
|
24
|
-
class LoggerLike
|
|
25
|
-
attr_accessor :level
|
|
26
|
-
attr_reader :messages, :data
|
|
27
|
-
def initialize
|
|
28
|
-
@messages = ""
|
|
29
|
-
@data = []
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def add_data(severity, message = nil, progname = nil, data: {})
|
|
33
|
-
@messages << message
|
|
34
|
-
@data << data
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def add(severity, message = nil, progname = nil, data: {})
|
|
38
|
-
@messages << message
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
[:trace, :debug, :info, :warn, :error, :fatal].each do |method_name|
|
|
42
|
-
class_eval(<<-E)
|
|
43
|
-
def #{method_name}(message)
|
|
44
|
-
@messages << message
|
|
45
|
-
end
|
|
46
|
-
E
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
RSpec.describe Mixlib::Log do
|
|
51
|
-
|
|
52
|
-
# Since we are testing class behaviour for an instance variable
|
|
53
|
-
# that gets set once, we need to reset it prior to each example [cb]
|
|
54
|
-
before(:each) do
|
|
55
|
-
Logit.reset!
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "creates a logger using an IO object" do
|
|
59
|
-
io = StringIO.new
|
|
60
|
-
Logit.init(io)
|
|
61
|
-
Logit << "foo"
|
|
62
|
-
expect(io.string).to match(/foo/)
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "creates a logger with a file name" do
|
|
66
|
-
Tempfile.open("chef-test-log") do |tempfile|
|
|
67
|
-
Logit.init(tempfile.path)
|
|
68
|
-
Logit << "bar"
|
|
69
|
-
tempfile.rewind
|
|
70
|
-
expect(tempfile.read).to match(/bar/)
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it "uses the logger provided when initialized with a logger like object" do
|
|
75
|
-
logger = LoggerLike.new
|
|
76
|
-
Logit.init(logger)
|
|
77
|
-
Logit.level = :debug
|
|
78
|
-
Logit.debug "qux"
|
|
79
|
-
expect(logger.messages).to match(/qux/)
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "should re-initialize the logger if init is called again" do
|
|
83
|
-
first_logdev, second_logdev = StringIO.new, StringIO.new
|
|
84
|
-
Logit.init(first_logdev)
|
|
85
|
-
Logit.fatal "FIRST"
|
|
86
|
-
expect(first_logdev.string).to match(/FIRST/)
|
|
87
|
-
Logit.init(second_logdev)
|
|
88
|
-
Logit.fatal "SECOND"
|
|
89
|
-
expect(first_logdev.string).to_not match(/SECOND/)
|
|
90
|
-
expect(second_logdev.string).to match(/SECOND/)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
it "knows that it's been configured" do
|
|
94
|
-
Logit.init
|
|
95
|
-
expect(Logit.configured?).to be true
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
it "should set the log level using the binding form, with :trace, :debug, :info, :warn, :error, or :fatal" do
|
|
99
|
-
levels = {
|
|
100
|
-
:trace => Mixlib::Log::TRACE,
|
|
101
|
-
:debug => Mixlib::Log::DEBUG,
|
|
102
|
-
:info => Mixlib::Log::INFO,
|
|
103
|
-
:warn => Mixlib::Log::WARN,
|
|
104
|
-
:error => Mixlib::Log::ERROR,
|
|
105
|
-
:fatal => Mixlib::Log::FATAL,
|
|
106
|
-
}
|
|
107
|
-
levels.each do |symbol, constant|
|
|
108
|
-
Logit.level = symbol
|
|
109
|
-
expect(Logit.logger.level).to eq(constant)
|
|
110
|
-
expect(Logit.level).to eq(symbol)
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
it "passes blocks to the underlying logger object" do
|
|
115
|
-
logdev = StringIO.new
|
|
116
|
-
Logit.init(logdev)
|
|
117
|
-
Logit.fatal { "the_message" }
|
|
118
|
-
expect(logdev.string).to match(/the_message/)
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
it "should set the log level using the method form, with :trace, :debug, :info, :warn, :error, or :fatal" do
|
|
122
|
-
levels = {
|
|
123
|
-
:trace => Mixlib::Log::TRACE,
|
|
124
|
-
:debug => Mixlib::Log::DEBUG,
|
|
125
|
-
:info => Mixlib::Log::INFO,
|
|
126
|
-
:warn => Mixlib::Log::WARN,
|
|
127
|
-
:error => Mixlib::Log::ERROR,
|
|
128
|
-
:fatal => Mixlib::Log::FATAL,
|
|
129
|
-
}
|
|
130
|
-
levels.each do |symbol, constant|
|
|
131
|
-
Logit.level(symbol)
|
|
132
|
-
expect(Logit.logger.level).to eq(constant)
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
it "should raise an ArgumentError if you try and set the level to something strange using the binding form" do
|
|
137
|
-
expect(lambda { Logit.level = :the_roots }).to raise_error(ArgumentError)
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
it "should raise an ArgumentError if you try and set the level to something strange using the method form" do
|
|
141
|
-
expect(lambda { Logit.level(:the_roots) }).to raise_error(ArgumentError)
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
it "should pass other method calls directly to logger" do
|
|
145
|
-
Logit.level = :debug
|
|
146
|
-
expect(Logit).to be_debug
|
|
147
|
-
expect(lambda { Logit.debug("Gimme some sugar!") }).to_not raise_error
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
it "should pass add method calls directly to logger" do
|
|
151
|
-
logdev = StringIO.new
|
|
152
|
-
Logit.init(logdev)
|
|
153
|
-
Logit.level = :debug
|
|
154
|
-
expect(Logit).to be_debug
|
|
155
|
-
expect(lambda { Logit.add(Logger::DEBUG, "Gimme some sugar!") }).to_not raise_error
|
|
156
|
-
expect(logdev.string).to match(/Gimme some sugar/)
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
it "should default to STDOUT if init is called with no arguments" do
|
|
160
|
-
logger_mock = Struct.new(:formatter, :level).new
|
|
161
|
-
expect(Logger).to receive(:new).with(STDOUT).and_return(logger_mock)
|
|
162
|
-
Logit.init
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
it "should have by default a base log level of warn" do
|
|
166
|
-
logger_mock = Struct.new(:formatter, :level).new
|
|
167
|
-
expect(Logger).to receive(:new).and_return(logger_mock)
|
|
168
|
-
Logit.init
|
|
169
|
-
expect(Logit.level).to eq(:warn)
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
it "should close File logger" do
|
|
173
|
-
opened_files_count_before = 0
|
|
174
|
-
ObjectSpace.each_object(File) do |f|
|
|
175
|
-
opened_files_count_before += 1 unless f.closed?
|
|
176
|
-
end
|
|
177
|
-
name = File.join(Dir.tmpdir, "logger.log")
|
|
178
|
-
Logit.init(name)
|
|
179
|
-
Logit.init(name)
|
|
180
|
-
Logit.init(name)
|
|
181
|
-
opened_files_count_after = 0
|
|
182
|
-
ObjectSpace.each_object(File) do |f|
|
|
183
|
-
opened_files_count_after += 1 unless f.closed?
|
|
184
|
-
end
|
|
185
|
-
expect(opened_files_count_after).to eq(opened_files_count_before + 1)
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
it "should not close IO logger" do
|
|
189
|
-
opened_files_count_before = 0
|
|
190
|
-
ObjectSpace.each_object(File) do |f|
|
|
191
|
-
opened_files_count_before += 1 unless f.closed?
|
|
192
|
-
end
|
|
193
|
-
Tempfile.open("chef-test-log") do |file|
|
|
194
|
-
Logit.init(file)
|
|
195
|
-
Logit.init(file)
|
|
196
|
-
Logit.init(file)
|
|
197
|
-
opened_files_count_after = 0
|
|
198
|
-
ObjectSpace.each_object(File) do |f|
|
|
199
|
-
opened_files_count_after += 1 unless f.closed?
|
|
200
|
-
end
|
|
201
|
-
expect(opened_files_count_after).to eq(opened_files_count_before + 1)
|
|
202
|
-
end
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
it "should return nil from its logging methods" do
|
|
206
|
-
expect(Logger).to receive(:new).with(STDOUT) { double("a-quiet-logger").as_null_object }
|
|
207
|
-
Logit.init
|
|
208
|
-
|
|
209
|
-
aggregate_failures "returns nil from logging method" do
|
|
210
|
-
expect(Logit.trace("hello")).to be_nil
|
|
211
|
-
expect(Logit.debug("hello")).to be_nil
|
|
212
|
-
expect(Logit.info("hello")).to be_nil
|
|
213
|
-
expect(Logit.warn("hello")).to be_nil
|
|
214
|
-
expect(Logit.error("hello")).to be_nil
|
|
215
|
-
expect(Logit.fatal("hello")).to be_nil
|
|
216
|
-
end
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
it "should set metadata correctly" do
|
|
220
|
-
Logit.metadata = { test: "data" }
|
|
221
|
-
expect(Logit.metadata).to eql({ test: "data" })
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
it "should format :trace level messages with TRACE: label" do
|
|
225
|
-
logdev = StringIO.new
|
|
226
|
-
Logit.init(logdev)
|
|
227
|
-
Logit.level = :trace
|
|
228
|
-
Logit.trace("this is a log message")
|
|
229
|
-
aggregate_failures do
|
|
230
|
-
expect(logdev.string).to_not match(/ANY:/)
|
|
231
|
-
expect(logdev.string).to match(/TRACE:/)
|
|
232
|
-
end
|
|
233
|
-
end
|
|
234
|
-
end
|
data/spec/spec_helper.rb
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Adam Jacob (<adam@chef.io>)
|
|
3
|
-
# Author:: Christopher Brown (<cb@chef.io>)
|
|
4
|
-
# Copyright:: Copyright (c) 2008-2016 Chef Software, 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 "rspec"
|
|
24
|
-
require "mixlib/log"
|
|
25
|
-
require "mixlib/log/formatter"
|
|
26
|
-
|
|
27
|
-
RSpec.configure do |config|
|
|
28
|
-
config.disable_monkey_patching!
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
class Logit
|
|
32
|
-
extend Mixlib::Log
|
|
33
|
-
end
|