jekyll_plugin_logger 2.0.0 → 2.1.1
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/CHANGELOG.md +10 -0
- data/Rakefile +16 -0
- data/jekyll_plugin_logger.gemspec +1 -1
- data/lib/jekyll_plugin_logger/version.rb +2 -2
- data/lib/jekyll_plugin_logger.rb +38 -38
- data/spec/{jekyll_plugin_logger.rb → jekyll_plugin_logger_spec.rb} +21 -15
- data/spec/spec_helper.rb +19 -1
- data/spec/status_persistence.txt +7 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6d9885c654b34790e6f52a8e3a92a008cc51a40fc2a6ea404037f0e3e929291d
|
4
|
+
data.tar.gz: 72130fb28aea51696ae2ddf2be772e330dfd7d59ba2f0cc14d2545093c572c25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 509269138c34ff09d9a226657f07443155b89349681929218390b8041dc49b9497c2278c6f5ab6074fdfd7b1541a5caf7b5076eaa45524a734c64d0b6639c98e
|
7
|
+
data.tar.gz: 798aeac0b80dd88b3cbbe6e174511afd1b5c4df87325adf54af7683051a87776f83310097424e0dd7dc0c6030fdc7648311df982bd68d05c9d95b72f9c423054
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
## 2.1.1 / 2022-04-15
|
2
|
+
* Fixed progname reference for metalogger debug startup statement
|
3
|
+
|
4
|
+
## 2.1.0 / 2022-04-05
|
5
|
+
* Changed how config info is made available
|
6
|
+
|
7
|
+
## 2.0.1 / 2022-04-05
|
8
|
+
* Changed to registration hook to `:site`, `:after_reset` because that is the first hook that gets called.
|
9
|
+
* Improved the detection of various types of `progname`
|
10
|
+
|
1
11
|
## 2.0.0 / 2022-03-16
|
2
12
|
* Completely rewrote this plugin, now not a class, but a module that monkey patches the existing Jekyll logger for compatibility.
|
3
13
|
* Renamed the gem from `jekyll_logger_factory` to `jekyll_plugin_logger`.
|
data/Rakefile
CHANGED
@@ -1,7 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "bump/tasks"
|
3
4
|
require "bundler/gem_tasks"
|
4
5
|
require "rspec/core/rake_task"
|
5
6
|
|
7
|
+
# do not always tag the version
|
8
|
+
# Bump.tag_by_default = false
|
9
|
+
|
10
|
+
# bump the version in additional files
|
11
|
+
# Bump.replace_in_default = ["Readme.md"]
|
12
|
+
|
13
|
+
# Maintain changelog:
|
14
|
+
Bump.changelog = true
|
15
|
+
|
16
|
+
# Open the changelog in an editor when bumping
|
17
|
+
Bump.changelog = :editor
|
18
|
+
|
19
|
+
# Configure bump to not use a prefix:
|
20
|
+
ENV["TAG_PREFIX"] = ""
|
21
|
+
|
6
22
|
RSpec::Core::RakeTask.new(:spec)
|
7
23
|
task :default => :spec
|
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.required_ruby_version = ">= 2.6.0"
|
33
33
|
spec.summary = "Generates Jekyll logger with colored output."
|
34
34
|
spec.test_files = spec.files.grep(%r!^(test|spec|features)/!)
|
35
|
-
spec.version =
|
35
|
+
spec.version = JekyllPluginLoggerVersion::VERSION
|
36
36
|
|
37
37
|
spec.add_dependency "jekyll", ">= 3.5.0"
|
38
38
|
|
data/lib/jekyll_plugin_logger.rb
CHANGED
@@ -10,13 +10,14 @@ module JekyllPluginLoggerName
|
|
10
10
|
PLUGIN_NAME = "jekyll_plugin_logger"
|
11
11
|
end
|
12
12
|
|
13
|
-
# Once the meta-logger is made (see `PluginMetaLogger
|
13
|
+
# Once the meta-logger is made (see `PluginMetaLogger`, below) new instances of `PluginLogger` can be created with log levels set
|
14
|
+
# by `config` entries.
|
14
15
|
# @example Create new `PluginLogger`s like this:
|
15
|
-
# @logger = PluginMetaLogger.instance.new_logger(self)
|
16
|
+
# @logger = PluginMetaLogger.instance.new_logger(self, PluginMetaLogger.instance.config)
|
16
17
|
#
|
17
|
-
# self can be a class, a string, or a symbol.
|
18
|
+
# self can be a module, a class, a string, or a symbol.
|
18
19
|
#
|
19
|
-
# Best practice is to invoke `info
|
20
|
+
# Best practice is to invoke `info`, `warn, `debug` and `error` methods by passing blocks that contain the message.
|
20
21
|
# The blocks will only be evaluated if output for that level is enabled.
|
21
22
|
# @example Use `PluginLogger`s like this:
|
22
23
|
# @logger.info { "This is only evaluated if info level debugging is enabled" }
|
@@ -24,8 +25,6 @@ end
|
|
24
25
|
# For more information about the logging feature in the Ruby standard library,
|
25
26
|
# @see https://ruby-doc.org/stdlib-2.7.1/libdoc/logger/rdoc/Logger.html
|
26
27
|
class PluginLogger
|
27
|
-
include JekyllPluginLogger
|
28
|
-
|
29
28
|
# This method should only be called by PluginMetaLogger
|
30
29
|
# @param log_level [String, Symbol, Integer] can be specified as $stderr or $stdout,
|
31
30
|
# or an integer from 0..3 (inclusive),
|
@@ -40,12 +39,13 @@ class PluginLogger
|
|
40
39
|
# @example If `progname` has value `abc`, then the YAML to override the programmatically set log_level to `debug` is:
|
41
40
|
# logger_factory:
|
42
41
|
# abc: debug
|
43
|
-
def initialize(klass, config, stream_name = $stdout)
|
42
|
+
def initialize(klass, config = nil, stream_name = $stdout)
|
43
|
+
@config = config
|
44
44
|
@logger = Logger.new(stream_name)
|
45
45
|
@logger.progname = derive_progname(klass)
|
46
46
|
@logger.level = :info
|
47
|
-
plugin_loggers = config["plugin_loggers"]
|
48
|
-
@logger.level
|
47
|
+
plugin_loggers = config ? config["plugin_loggers"] : nil
|
48
|
+
@logger.level = plugin_loggers[@logger.progname] if plugin_loggers && plugin_loggers[@logger.progname]
|
49
49
|
# puts "PluginLogger.initialize: @logger.progname=#{@logger.progname} set to #{@logger.level}".red
|
50
50
|
@logger.formatter = proc { |severity, _, prog_name, msg|
|
51
51
|
"#{severity} #{prog_name}: #{msg}\n"
|
@@ -100,26 +100,26 @@ class PluginLogger
|
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
-
private
|
104
|
-
|
105
|
-
def derive_progname(klass)
|
106
|
-
full_name = case klass.class
|
107
|
-
when String
|
108
|
-
klass
|
109
|
-
when Symbol
|
110
|
-
klass.to_s
|
111
|
-
else
|
112
|
-
klass.class.name
|
113
|
-
end
|
114
|
-
full_name.split("::").last
|
115
|
-
end
|
116
|
-
|
117
103
|
# Available colors are: :black, :red, :green, :yellow, :blue, :magenta, :cyan, :white, and the modifier :bold
|
118
104
|
def level_as_sym
|
119
105
|
return :unknown if @logger.level.negative? || level > 4
|
120
106
|
|
121
107
|
[:debug, :info, :warn, :error, :fatal, :unknown][@logger.level]
|
122
108
|
end
|
109
|
+
|
110
|
+
private
|
111
|
+
|
112
|
+
def derive_progname(klass)
|
113
|
+
class_name = klass.class.to_s
|
114
|
+
case class_name
|
115
|
+
when "Class"
|
116
|
+
klass.to_s.split("::").last # class_name.name.split("::").last
|
117
|
+
when "Module", "Symbol", "String"
|
118
|
+
klass.to_s.split("::").last
|
119
|
+
else
|
120
|
+
class_name
|
121
|
+
end
|
122
|
+
end
|
123
123
|
end
|
124
124
|
|
125
125
|
# Makes a meta-logger instance (a singleton) with level set by `site.config`.
|
@@ -133,7 +133,8 @@ end
|
|
133
133
|
#
|
134
134
|
# @example
|
135
135
|
# # Create and initialize the meta-logger singleton in a high priority Jekyll `site` `:after_init` hook:
|
136
|
-
# PluginMetaLogger.instance.
|
136
|
+
# @meta_logger = PluginMetaLogger.instance.new_logger(site.config, self)
|
137
|
+
# @meta_logger.info { "Meta-logger has been created" }
|
137
138
|
#
|
138
139
|
# # In `config.yml`:
|
139
140
|
# plugin_loggers:
|
@@ -143,13 +144,13 @@ end
|
|
143
144
|
# ArchiveDisplayTag: debug
|
144
145
|
#
|
145
146
|
# # In a Jekyll plugin:
|
146
|
-
# @logger = PluginMetaLogger.instance.
|
147
|
+
# @logger = PluginMetaLogger.instance.setup(self)
|
147
148
|
# @logger.info { "This is a log message from a Jekyll plugin" }
|
148
149
|
# #
|
149
150
|
# PluginMetaLogger.instance.info { "MyPlugin vX.Y.Z has been loaded" }
|
150
151
|
class PluginMetaLogger
|
151
152
|
include Singleton
|
152
|
-
attr_reader :logger
|
153
|
+
attr_reader :config, :logger
|
153
154
|
|
154
155
|
def initialize
|
155
156
|
super
|
@@ -165,6 +166,10 @@ class PluginMetaLogger
|
|
165
166
|
@logger.debug(self) { yield }
|
166
167
|
end
|
167
168
|
|
169
|
+
def level_as_sym
|
170
|
+
@logger.level_as_sym
|
171
|
+
end
|
172
|
+
|
168
173
|
def warn
|
169
174
|
@logger.warn(self) { yield }
|
170
175
|
end
|
@@ -173,25 +178,20 @@ class PluginMetaLogger
|
|
173
178
|
@logger.error(self) { yield }
|
174
179
|
end
|
175
180
|
|
176
|
-
def new_logger(klass, stream_name = $stdout)
|
181
|
+
def new_logger(klass, config = nil, stream_name = $stdout)
|
182
|
+
@config ||= config
|
177
183
|
if @config.nil?
|
178
|
-
puts { "Error: PluginMetaLogger has not been initialized
|
184
|
+
puts { "Error: PluginMetaLogger has not been initialized with site.config.".red }
|
179
185
|
PluginLogger.new(klass, {}, stream_name)
|
180
186
|
else
|
181
187
|
PluginLogger.new(klass, @config, stream_name)
|
182
188
|
end
|
183
189
|
end
|
184
|
-
|
185
|
-
def setup(config, stream_name = $stdout)
|
186
|
-
@config = config
|
187
|
-
@logger = new_logger(self, stream_name)
|
188
|
-
@logger
|
189
|
-
end
|
190
190
|
end
|
191
191
|
|
192
|
-
Jekyll::Hooks.register(:site, :
|
192
|
+
Jekyll::Hooks.register(:site, :after_reset, :priority => :high) do |site|
|
193
193
|
instance = PluginMetaLogger.instance
|
194
|
-
logger = instance.
|
195
|
-
logger.info { "Loaded #{JekyllPluginLoggerName::PLUGIN_NAME} v#{
|
196
|
-
logger.debug { "Logger for #{instance.progname} created at level #{instance.level_as_sym}" }
|
194
|
+
logger = instance.new_logger(PluginMetaLogger, site.config)
|
195
|
+
logger.info { "Loaded #{JekyllPluginLoggerName::PLUGIN_NAME} v#{JekyllPluginLoggerVersion::VERSION} plugin." }
|
196
|
+
logger.debug { "Logger for #{instance.logger.progname} created at level #{instance.level_as_sym}" }
|
197
197
|
end
|
@@ -19,26 +19,17 @@ require_relative "../lib/jekyll_plugin_logger"
|
|
19
19
|
class MyTestPlugin
|
20
20
|
instance = PluginMetaLogger.instance
|
21
21
|
logger = instance.new_logger(self) # Should generate a warning
|
22
|
-
instance.setup({})
|
23
22
|
PluginMetaLogger.instance.info { "How now, brown cow" }
|
24
23
|
PluginMetaLogger.instance.debug { "How now, brown cow" }
|
25
24
|
PluginMetaLogger.instance.warn { "How now, brown cow" }
|
26
25
|
PluginMetaLogger.instance.error { "How now, brown cow" }
|
27
26
|
|
28
|
-
logger = PluginMetaLogger.instance.new_logger(self)
|
27
|
+
logger = PluginMetaLogger.instance.new_logger(self, RSpec.configuration.site_config)
|
29
28
|
logger.debug { "3 fleas fleeing freedom" }
|
30
29
|
logger.info { "3 fleas fleeing freedom" }
|
31
30
|
logger.warn { "3 fleas fleeing freedom" }
|
32
31
|
logger.error { "3 fleas fleeing freedom" }
|
33
32
|
|
34
|
-
_yaml = <<~END_YAML
|
35
|
-
plugin_loggers:
|
36
|
-
PluginMetaLogger: debug
|
37
|
-
SiteInspector: warn
|
38
|
-
MakeArchive: error
|
39
|
-
ArchiveDisplayTag: debug
|
40
|
-
END_YAML
|
41
|
-
|
42
33
|
def self.exercise(logger)
|
43
34
|
puts
|
44
35
|
# puts "\ncalling_class_name=#{logger.send(:calling_class_name)}"
|
@@ -63,18 +54,33 @@ class MyTestPlugin
|
|
63
54
|
logger.error { "Error message 4" }
|
64
55
|
end
|
65
56
|
|
66
|
-
RSpec.describe
|
67
|
-
it "outputs at
|
68
|
-
MyTestPlugin.exercise(PluginMetaLogger.instance.new_logger(self, $stdout))
|
57
|
+
RSpec.describe PluginLogger do
|
58
|
+
it "outputs at info level" do
|
59
|
+
MyTestPlugin.exercise(PluginMetaLogger.instance.new_logger(self, PluginMetaLogger.instance.config, $stdout))
|
60
|
+
expect(PluginMetaLogger.instance.level_as_sym).to eq(:info)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "uses config debug" do
|
64
|
+
logger = PluginMetaLogger.instance.new_logger(:MyBlock, PluginMetaLogger.instance.config)
|
65
|
+
expect(logger.level_as_sym).to eq(:debug)
|
66
|
+
MyTestPlugin.exercise(logger)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "uses config info" do
|
70
|
+
logger = PluginMetaLogger.instance.new_logger(:ArchiveDisplayTag, PluginMetaLogger.instance.config)
|
71
|
+
expect(logger.level_as_sym).to eq(:info)
|
72
|
+
MyTestPlugin.exercise(logger)
|
69
73
|
end
|
70
74
|
|
71
75
|
it "uses config warn" do
|
72
|
-
logger = PluginMetaLogger.instance.new_logger("SiteInspector", $stdout)
|
76
|
+
logger = PluginMetaLogger.instance.new_logger("SiteInspector", PluginMetaLogger.instance.config, $stdout)
|
77
|
+
expect(logger.level_as_sym).to eq(:warn)
|
73
78
|
MyTestPlugin.exercise(logger)
|
74
79
|
end
|
75
80
|
|
76
81
|
it "uses config error" do
|
77
|
-
logger = PluginMetaLogger.instance.new_logger(:
|
82
|
+
logger = PluginMetaLogger.instance.new_logger(:PreTagBlock, PluginMetaLogger.instance.config)
|
83
|
+
expect(logger.level_as_sym).to eq(:error)
|
78
84
|
MyTestPlugin.exercise(logger)
|
79
85
|
end
|
80
86
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -6,7 +6,25 @@ require_relative "../lib/jekyll_plugin_logger"
|
|
6
6
|
Jekyll.logger.log_level = :info
|
7
7
|
|
8
8
|
RSpec.configure do |config|
|
9
|
-
|
9
|
+
plugin_config = <<~END_CONFIG
|
10
|
+
plugin_loggers:
|
11
|
+
ArchiveDisplayTag: info
|
12
|
+
FlexibleInclude: info
|
13
|
+
MakeArchive: info
|
14
|
+
MyBlock: debug
|
15
|
+
PluginMetaLogger: info
|
16
|
+
PreTagBlock: error
|
17
|
+
SiteInspector: warn
|
18
|
+
UnselectableTag: info
|
19
|
+
END_CONFIG
|
20
|
+
|
21
|
+
config.add_setting :site_config
|
22
|
+
config.site_config = YAML.safe_load(plugin_config)
|
23
|
+
|
10
24
|
config.filter_run :focus
|
11
25
|
config.order = "random"
|
26
|
+
config.run_all_when_everything_filtered = true
|
27
|
+
|
28
|
+
# See https://relishapp.com/rspec/rspec-core/docs/command-line/only-failures
|
29
|
+
config.example_status_persistence_file_path = "spec/status_persistence.txt"
|
12
30
|
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
example_id | status | run_time |
|
2
|
+
---------------------------------------- | ------ | --------------- |
|
3
|
+
./spec/jekyll_plugin_logger_spec.rb[1:1] | failed | 0.02037 seconds |
|
4
|
+
./spec/jekyll_plugin_logger_spec.rb[1:2] | passed | 0.03764 seconds |
|
5
|
+
./spec/jekyll_plugin_logger_spec.rb[1:3] | passed | 0.00041 seconds |
|
6
|
+
./spec/jekyll_plugin_logger_spec.rb[1:4] | passed | 0.00026 seconds |
|
7
|
+
./spec/jekyll_plugin_logger_spec.rb[1:5] | passed | 0.0002 seconds |
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll_plugin_logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Slinn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -69,8 +69,9 @@ files:
|
|
69
69
|
- jekyll_plugin_logger.gemspec
|
70
70
|
- lib/jekyll_plugin_logger.rb
|
71
71
|
- lib/jekyll_plugin_logger/version.rb
|
72
|
-
- spec/
|
72
|
+
- spec/jekyll_plugin_logger_spec.rb
|
73
73
|
- spec/spec_helper.rb
|
74
|
+
- spec/status_persistence.txt
|
74
75
|
homepage: https://www.mslinn.com/blog/2020/12/28/custom-logging-in-jekyll-plugins.html
|
75
76
|
licenses:
|
76
77
|
- MIT
|
@@ -103,5 +104,6 @@ signing_key:
|
|
103
104
|
specification_version: 4
|
104
105
|
summary: Generates Jekyll logger with colored output.
|
105
106
|
test_files:
|
106
|
-
- spec/
|
107
|
+
- spec/jekyll_plugin_logger_spec.rb
|
107
108
|
- spec/spec_helper.rb
|
109
|
+
- spec/status_persistence.txt
|