jekyll_plugin_logger 2.1.0 → 2.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +75 -11
- data/CHANGELOG.md +38 -13
- data/README.md +87 -47
- data/Rakefile +6 -8
- data/jekyll_plugin_logger.gemspec +21 -30
- data/lib/jekyll_plugin_logger/version.rb +1 -3
- data/lib/jekyll_plugin_logger.rb +43 -88
- data/lib/jekyll_plugin_meta_logger.rb +70 -0
- data/spec/jekyll_plugin_logger_spec.rb +34 -36
- data/spec/spec_helper.rb +5 -8
- data/spec/status_persistence.txt +7 -0
- metadata +19 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 90e90f26bac683d004a6ba9c963d8b6532678dac4cc0e03eee15732742c2f936
|
4
|
+
data.tar.gz: c1711187ac79bfd16ae6e357e647488f67c32e4b4526222d932e4c02c76615c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ae7813c1bdac1068b72633198d3e09518590d55982cdc2ee0a178d6b655e4022419d7f49baa16d5dace49f6a1a4c72bb9ff9118e192aef48db9970c48de8bec
|
7
|
+
data.tar.gz: fe1bbdc922dd1a0a3cbf5af36dbdf7e5fd67ca12dc8c14b55361d9b9cbef61aa1983abb616dfda460ef3b626a721353cc61c6e4b5b6286c9804a8b6b83a7aec3
|
data/.rubocop.yml
CHANGED
@@ -1,21 +1,85 @@
|
|
1
|
-
require:
|
2
|
-
|
3
|
-
rubocop-
|
1
|
+
require:
|
2
|
+
# - rubocop-jekyll
|
3
|
+
- rubocop-md
|
4
|
+
- rubocop-performance
|
5
|
+
- rubocop-rake
|
6
|
+
- rubocop-rspec
|
7
|
+
|
8
|
+
# inherit_gem:
|
9
|
+
# rubocop-jekyll: .rubocop.yml
|
4
10
|
|
5
11
|
AllCops:
|
6
12
|
Exclude:
|
7
|
-
|
8
|
-
|
9
|
-
|
13
|
+
- demo/_site/**/*
|
14
|
+
- binstub/**/*
|
15
|
+
- vendor/**/*
|
16
|
+
- jekyll_plugin_logger.gemspec
|
10
17
|
NewCops: enable
|
11
|
-
TargetRubyVersion: 2.6
|
12
18
|
|
13
|
-
|
19
|
+
Gemspec/DeprecatedAttributeAssignment:
|
20
|
+
Enabled: false
|
21
|
+
|
22
|
+
Gemspec/RequiredRubyVersion:
|
23
|
+
Enabled: false
|
24
|
+
|
25
|
+
Gemspec/RequireMFA:
|
26
|
+
Enabled: false
|
27
|
+
|
28
|
+
# Jekyll/NoPutsAllowed:
|
29
|
+
# Exclude:
|
30
|
+
# - spec/**/*
|
31
|
+
|
32
|
+
Layout/InitialIndentation:
|
14
33
|
Exclude:
|
15
|
-
-
|
34
|
+
- README.md
|
35
|
+
|
36
|
+
Layout/HashAlignment:
|
37
|
+
EnforcedColonStyle: table
|
38
|
+
EnforcedHashRocketStyle: table
|
16
39
|
|
17
40
|
Layout/LineLength:
|
18
41
|
Max: 150
|
19
42
|
|
20
|
-
|
21
|
-
|
43
|
+
Lint/RedundantCopDisableDirective:
|
44
|
+
Exclude:
|
45
|
+
- jekyll_plugin_logger.gemspec
|
46
|
+
|
47
|
+
Metrics/AbcSize:
|
48
|
+
Max: 25
|
49
|
+
|
50
|
+
Metrics/BlockLength:
|
51
|
+
Exclude:
|
52
|
+
- jekyll_plugin_logger.gemspec
|
53
|
+
- spec/**/*
|
54
|
+
|
55
|
+
Metrics/ClassLength:
|
56
|
+
Exclude:
|
57
|
+
- spec/**/*
|
58
|
+
|
59
|
+
Metrics/CyclomaticComplexity:
|
60
|
+
Max: 25
|
61
|
+
|
62
|
+
Metrics/MethodLength:
|
63
|
+
Max: 25
|
64
|
+
|
65
|
+
Metrics/PerceivedComplexity:
|
66
|
+
Max: 20
|
67
|
+
|
68
|
+
Naming/FileName:
|
69
|
+
Exclude:
|
70
|
+
- Rakefile
|
71
|
+
|
72
|
+
RSpec/ExampleLength:
|
73
|
+
Max: 20
|
74
|
+
|
75
|
+
RSpec/MultipleExpectations:
|
76
|
+
Max: 15
|
77
|
+
|
78
|
+
Style/Documentation:
|
79
|
+
Enabled: false
|
80
|
+
|
81
|
+
Style/FrozenStringLiteralComment:
|
82
|
+
Enabled: false
|
83
|
+
|
84
|
+
Style/TrailingCommaInHashLiteral:
|
85
|
+
EnforcedStyleForMultiline: comma
|
data/CHANGELOG.md
CHANGED
@@ -1,22 +1,47 @@
|
|
1
|
+
# Change Log
|
2
|
+
|
3
|
+
## 2.1.2 / 2023-11-21
|
4
|
+
|
5
|
+
* Added `demo`.
|
6
|
+
* Added `fatal` and `unknown` log levels.
|
7
|
+
|
8
|
+
|
9
|
+
## 2.1.1 / 2022-04-15
|
10
|
+
|
11
|
+
* Fixed `progname` reference for the `PluginMetaLogger` debug startup statement.
|
12
|
+
|
13
|
+
|
1
14
|
## 2.1.0 / 2022-04-05
|
2
|
-
|
15
|
+
|
16
|
+
* Changed how config info is made available.
|
17
|
+
* `PluginLogger` is a class once again.
|
18
|
+
|
3
19
|
|
4
20
|
## 2.0.1 / 2022-04-05
|
5
|
-
|
6
|
-
|
21
|
+
|
22
|
+
* Changed to registration hook to `:site`, `:after_reset` because that is the first hook that gets called.
|
23
|
+
* Improved the detection of various types of `progname`.
|
24
|
+
|
7
25
|
|
8
26
|
## 2.0.0 / 2022-03-16
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
27
|
+
|
28
|
+
* Completely rewrote this plugin, now not a class,
|
29
|
+
but a module that monkey patches the existing Jekyll logger for compatibility.
|
30
|
+
* Renamed the gem from `jekyll_logger_factory` to `jekyll_plugin_logger`.
|
31
|
+
* Automatically obtains plugin class name and uses that as `progname`.
|
32
|
+
* `:into` level output is colored cyan.
|
33
|
+
|
13
34
|
|
14
35
|
## 1.0.0 / 2022-03-16
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
36
|
+
|
37
|
+
* Published as a gem.
|
38
|
+
* New instances are now created with `new` instead of `create_logger`.
|
39
|
+
* Now subclasses Jekyll's Stevenson logger.
|
40
|
+
* Documentation improved, clarifies that the only supported levels are those provided by the
|
41
|
+
Stevenson logger: `:debug`, `:info`, and `:error`.
|
42
|
+
* No longer supports control over where log output goes; STDERR and STDOUT are automatically selected according to log level.
|
43
|
+
|
20
44
|
|
21
45
|
## 2020-12-28
|
22
|
-
|
46
|
+
|
47
|
+
* Initial version published at https://www.mslinn.com/blog/2020/12/28/custom-logging-in-jekyll-plugins.html
|
data/README.md
CHANGED
@@ -1,78 +1,112 @@
|
|
1
|
-
`jekyll_plugin_logger`
|
2
|
-
[![Gem Version](https://badge.fury.io/rb/jekyll_plugin_logger.svg)](https://badge.fury.io/rb/jekyll_plugin_logger)
|
3
|
-
===========
|
1
|
+
# `jekyll_plugin_logger` [![Gem Version](https://badge.fury.io/rb/jekyll_plugin_logger.svg)](https://badge.fury.io/rb/jekyll_plugin_logger)
|
4
2
|
|
5
3
|
`jekyll_plugin_logger` is a Jekyll plugin, packaged as a Ruby gem, that provides colored console logs for Jekyll plugins.
|
4
|
+
It is based on the standard Ruby [`Logger`](https://ruby-doc.org/stdlib-3.1.0/libdoc/logger/rdoc/Logger.html) class.
|
5
|
+
|
6
|
+
Log levels are normally set from `_config.yml`:
|
7
|
+
|
8
|
+
* 0: `debug`
|
9
|
+
* 1: `info`
|
10
|
+
* 2: `warn`
|
11
|
+
* 3: `error`
|
12
|
+
* 4: `fatal`
|
13
|
+
* 5: `unknown` (displays as `ANY`)
|
6
14
|
|
7
15
|
|
8
16
|
## Usage
|
9
17
|
|
10
|
-
|
11
|
-
For example, if the plugin's class is called `"MyPlugin"` then an entry called `plugin_loggers.MyPlugin`
|
12
|
-
will be read from the config file, if present.
|
13
|
-
If the entry exists, its value overrides the value specified when created.
|
14
|
-
If no such entry is found then the `log_level` value passed to `new` is used.
|
18
|
+
The [`demo/_plugins/`](demo/_plugins/) directory demonstrates two ways of working with `jekyll_plugin_logger`:
|
15
19
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
Jekyll.logger.info('MyPlugin', "Info message 2")
|
20
|
+
* `liquid_tag.rb`, a Jekyll plugin subclassed from
|
21
|
+
[`Liquid::Tag`](https://jekyllrb.com/docs/plugins/tags/).
|
22
|
+
* `support_tag.rb`, a Jekyll plugin subclassed from
|
23
|
+
[`JekyllSupport::JekyllTag`](https://www.mslinn.com/jekyll_plugins/jekyll_plugin_support.html).
|
21
24
|
|
22
|
-
# The following blocks are not evaluated unless log_level requires them to be
|
23
25
|
|
24
|
-
|
25
|
-
Jekyll.info { "Info message 4" }
|
26
|
+
## Installation
|
26
27
|
|
27
|
-
|
28
|
-
Jekyll.warn { "Warn message 2" }
|
28
|
+
### To A Jekyll Website
|
29
29
|
|
30
|
-
|
31
|
-
Jekyll.error { "Error message 2" }
|
32
|
-
```
|
30
|
+
Add the following to your Jekyll website's `Gemfile`:
|
33
31
|
|
34
|
-
|
35
|
-
|
32
|
+
```ruby
|
33
|
+
group :jekyll_plugins do
|
34
|
+
gem 'jekyll_plugin_logger'
|
35
|
+
end
|
36
|
+
```
|
36
37
|
|
38
|
+
Install all of the dependent gems of your Jekyll website by typing:
|
37
39
|
|
40
|
+
```shell
|
41
|
+
$ bundle
|
42
|
+
```
|
38
43
|
|
39
|
-
|
44
|
+
### To A Jekyll Plugin Packaged As A Gem
|
40
45
|
|
41
|
-
Add
|
46
|
+
Add the following to your Gem’s `.gemspec`:
|
42
47
|
|
43
48
|
```ruby
|
44
|
-
|
45
|
-
|
49
|
+
Gem::Specification.new do |spec|
|
50
|
+
spec.add_dependency 'jekyll_plugin_logger'
|
46
51
|
end
|
47
52
|
```
|
48
53
|
|
49
|
-
Install all of the dependent gems of your
|
54
|
+
Install all of the dependent gems of your Gem by typing:
|
50
55
|
|
51
|
-
|
56
|
+
```shell
|
57
|
+
$ bundle
|
58
|
+
```
|
52
59
|
|
53
|
-
Or install just this one gem by typing:
|
54
60
|
|
55
|
-
|
61
|
+
## Configuration
|
62
|
+
|
63
|
+
The default log level is `info`.
|
64
|
+
You can change the log level by editing `_config.yml` and adding a `plugin_loggers` section.
|
65
|
+
Within that section, add an entry for the fully qualified name of your plugin class.
|
66
|
+
|
67
|
+
For example, the fully qualified class names of the Jekyll plugins provided in `demo/_plugins/`
|
68
|
+
are `Raw::InlineTag` and `Support::InlineTag`, respectively.
|
69
|
+
Their log levels can be set to `debug` with the following entries in [`_config.yml`](demo/_config.yml):
|
70
|
+
|
71
|
+
```yaml
|
72
|
+
plugin_loggers:
|
73
|
+
Raw::InlineTag: debug # Notice the module name is specified as well as the class name
|
74
|
+
Support::InlineTag: debug # Notice the module name is specified as well as the class name
|
75
|
+
```
|
76
|
+
|
77
|
+
|
78
|
+
## Run the Demo
|
79
|
+
|
80
|
+
Run the demo by typing:
|
81
|
+
|
82
|
+
```shell
|
83
|
+
$ demo/_bin/debug -r
|
84
|
+
```
|
85
|
+
|
86
|
+
See what happens to the output when you edit the logging levels in the `plugin_loggers` section of `_config.yml`.
|
87
|
+
You will have to restart the demo after each modification to `_config.yml`
|
88
|
+
in order to see the output change.
|
56
89
|
|
57
90
|
|
58
91
|
## Additional Information
|
92
|
+
|
59
93
|
More information is available on Mike Slinn's web site about
|
60
|
-
[Jekyll plugins](https://www.mslinn.com/
|
94
|
+
[Jekyll plugins](https://www.mslinn.com/jekyll/10100-custom-logging-in-jekyll-plugins.html).
|
61
95
|
|
62
96
|
|
63
97
|
## Development
|
64
98
|
|
65
|
-
After checking out the
|
99
|
+
After checking out the `jekyll_plugin_logger` repository,
|
100
|
+
run `bin/setup` to install dependencies,
|
101
|
+
which includes development dependencies.
|
102
|
+
|
103
|
+
You can then run `bin/console` for an interactive prompt that will allow you to experiment.
|
66
104
|
|
67
|
-
You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
68
105
|
|
69
106
|
### Build and Install Locally
|
107
|
+
|
70
108
|
To build and install this gem onto your local machine, run:
|
71
|
-
```shell
|
72
|
-
$ rake install:local
|
73
|
-
```
|
74
109
|
|
75
|
-
The following also does the same thing:
|
76
110
|
```shell
|
77
111
|
$ bundle exec rake install
|
78
112
|
jekyll_plugin_logger 1.0.0 built to pkg/jekyll_plugin_logger-0.1.0.gem.
|
@@ -80,6 +114,7 @@ jekyll_plugin_logger (1.0.0) installed.
|
|
80
114
|
```
|
81
115
|
|
82
116
|
Examine the newly built gem:
|
117
|
+
|
83
118
|
```shell
|
84
119
|
$ gem info jekyll_plugin_logger
|
85
120
|
|
@@ -92,19 +127,24 @@ jekyll_plugin_logger (1.0.0)
|
|
92
127
|
License: MIT
|
93
128
|
Installed at: /home/mslinn/.gems
|
94
129
|
|
95
|
-
Generates Jekyll logger with colored output.
|
130
|
+
Generates a Jekyll logger with colored output.
|
96
131
|
```
|
97
132
|
|
133
|
+
|
98
134
|
### Build and Push to RubyGems
|
135
|
+
|
99
136
|
To release a new version,
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
137
|
+
|
138
|
+
1. Update the version number in `version.rb`.
|
139
|
+
2. Commit all changes to git; if you don't the next step might fail with an unexplainable error message.
|
140
|
+
3. Run the following:
|
141
|
+
|
142
|
+
```shell
|
143
|
+
$ bundle exec rake release
|
144
|
+
```
|
145
|
+
|
146
|
+
The above creates a git tag for the version, commits the created tag,
|
147
|
+
and pushes the new `.gem` file to [RubyGems.org](https://rubygems.org).
|
108
148
|
|
109
149
|
|
110
150
|
## Contributing
|
data/Rakefile
CHANGED
@@ -1,14 +1,12 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require "bundler/gem_tasks"
|
5
|
-
require "rspec/core/rake_task"
|
1
|
+
require 'bump/tasks'
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
require 'rspec/core/rake_task'
|
6
4
|
|
7
5
|
# do not always tag the version
|
8
6
|
# Bump.tag_by_default = false
|
9
7
|
|
10
8
|
# bump the version in additional files
|
11
|
-
# Bump.replace_in_default = [
|
9
|
+
# Bump.replace_in_default = ['Readme.md']
|
12
10
|
|
13
11
|
# Maintain changelog:
|
14
12
|
Bump.changelog = true
|
@@ -17,7 +15,7 @@ Bump.changelog = true
|
|
17
15
|
Bump.changelog = :editor
|
18
16
|
|
19
17
|
# Configure bump to not use a prefix:
|
20
|
-
ENV[
|
18
|
+
ENV['TAG_PREFIX'] = ''
|
21
19
|
|
22
20
|
RSpec::Core::RakeTask.new(:spec)
|
23
|
-
task :
|
21
|
+
task default: :spec
|
@@ -1,45 +1,36 @@
|
|
1
|
-
|
1
|
+
require_relative 'lib/jekyll_plugin_logger/version'
|
2
2
|
|
3
|
-
|
3
|
+
Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
|
4
|
+
github = 'https://github.com/mslinn/jekyll_plugin_logger'
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
github = "https://github.com/mslinn/jekyll_plugin_logger"
|
8
|
-
|
9
|
-
spec.authors = ["Mike Slinn"]
|
10
|
-
spec.bindir = "exe"
|
6
|
+
spec.authors = ['Mike Slinn']
|
7
|
+
spec.bindir = 'exe'
|
11
8
|
spec.description = <<~END_OF_DESC
|
12
9
|
Generates Jekyll logger with colored output.
|
13
10
|
END_OF_DESC
|
14
|
-
spec.email = [
|
15
|
-
spec.files = Dir[
|
16
|
-
spec.homepage =
|
17
|
-
spec.license =
|
11
|
+
spec.email = ['mslinn@mslinn.com']
|
12
|
+
spec.files = Dir['.rubocop.yml', 'LICENSE.*', 'Rakefile', '{lib,spec}/**/*', '*.gemspec', '*.md']
|
13
|
+
spec.homepage = 'https://www.mslinn.com/jekyll_plugins/jekyll_plugin_logger.html'
|
14
|
+
spec.license = 'MIT'
|
18
15
|
spec.metadata = {
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
16
|
+
'allowed_push_host' => 'https://rubygems.org',
|
17
|
+
'bug_tracker_uri' => "#{github}/issues",
|
18
|
+
'changelog_uri' => "#{github}/CHANGELOG.md",
|
19
|
+
'homepage_uri' => spec.homepage,
|
20
|
+
'source_code_uri' => github,
|
24
21
|
}
|
25
|
-
spec.name =
|
22
|
+
spec.name = 'jekyll_plugin_logger'
|
26
23
|
spec.post_install_message = <<~END_MESSAGE
|
27
24
|
|
28
25
|
Thanks for installing #{spec.name}!
|
29
26
|
|
30
27
|
END_MESSAGE
|
31
|
-
spec.require_paths = [
|
32
|
-
spec.required_ruby_version =
|
33
|
-
spec.summary =
|
34
|
-
spec.test_files = spec.files.grep(%r
|
28
|
+
spec.require_paths = ['lib']
|
29
|
+
spec.required_ruby_version = '>= 2.6.0'
|
30
|
+
spec.summary = 'Generates a Jekyll logger with colored output.'
|
31
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
35
32
|
spec.version = JekyllPluginLoggerVersion::VERSION
|
36
33
|
|
37
|
-
spec.add_dependency
|
38
|
-
|
39
|
-
spec.add_development_dependency "debase"
|
40
|
-
# spec.add_development_dependency "rubocop-jekyll"
|
41
|
-
# spec.add_development_dependency "rubocop-rake"
|
42
|
-
# spec.add_development_dependency "rubocop-rspec"
|
43
|
-
spec.add_development_dependency "ruby-debug-ide"
|
34
|
+
spec.add_dependency 'bump'
|
35
|
+
spec.add_dependency 'jekyll', '>= 3.5.0'
|
44
36
|
end
|
45
|
-
# rubocop:enable Metrics/BlockLength
|
data/lib/jekyll_plugin_logger.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
|
5
|
-
|
6
|
-
require "yaml"
|
7
|
-
require_relative "jekyll_plugin_logger/version"
|
1
|
+
require 'colorator'
|
2
|
+
require 'logger'
|
3
|
+
require 'yaml'
|
4
|
+
require_relative 'jekyll_plugin_logger/version'
|
5
|
+
require_relative 'jekyll_plugin_meta_logger'
|
8
6
|
|
9
7
|
module JekyllPluginLoggerName
|
10
|
-
PLUGIN_NAME =
|
8
|
+
PLUGIN_NAME = 'jekyll_plugin_logger'.freeze
|
11
9
|
end
|
12
10
|
|
13
11
|
# Once the meta-logger is made (see `PluginMetaLogger`, below) new instances of `PluginLogger` can be created with log levels set
|
@@ -32,6 +30,13 @@ class PluginLogger
|
|
32
30
|
# (`debug`, `info`, `warn`, `error`, or `DEBUG`, `INFO`, `WARN`, `ERROR`),
|
33
31
|
# or as a symbol (`:debug`, `:info`, `:warn`, `:error` ).
|
34
32
|
#
|
33
|
+
# 0: debug
|
34
|
+
# 1: info
|
35
|
+
# 2: warn
|
36
|
+
# 3: error
|
37
|
+
# 4: fatal
|
38
|
+
# 5: unknown (displays as ANY)
|
39
|
+
#
|
35
40
|
# @param config [YAML] is normally created by reading a YAML file such as Jekyll's `_config.yml`.
|
36
41
|
# When invoking from a Jekyll plugin, provide `site.config`,
|
37
42
|
# which is available from all types of Jekyll plugins as `Jekyll.configuration({})`.
|
@@ -41,14 +46,15 @@ class PluginLogger
|
|
41
46
|
# abc: debug
|
42
47
|
def initialize(klass, config = nil, stream_name = $stdout)
|
43
48
|
@config = config
|
44
|
-
|
45
|
-
|
49
|
+
plugin_loggers = config&.[] 'plugin_loggers'
|
50
|
+
|
51
|
+
@logger = Logger.new stream_name
|
52
|
+
@logger.progname = derive_progname klass
|
46
53
|
@logger.level = :info
|
47
|
-
|
48
|
-
@logger.level = plugin_loggers[@logger.progname] if plugin_loggers && plugin_loggers[@logger.progname]
|
54
|
+
@logger.level = plugin_loggers[@logger.progname] if plugin_loggers&.[] @logger.progname
|
49
55
|
# puts "PluginLogger.initialize: @logger.progname=#{@logger.progname} set to #{@logger.level}".red
|
50
|
-
@logger.formatter = proc { |severity,
|
51
|
-
"#{severity} #{
|
56
|
+
@logger.formatter = proc { |severity, _datetime, progname, msg|
|
57
|
+
"#{severity} #{progname}: #{msg}\n"
|
52
58
|
}
|
53
59
|
end
|
54
60
|
|
@@ -72,6 +78,7 @@ class PluginLogger
|
|
72
78
|
@logger.level = value
|
73
79
|
end
|
74
80
|
|
81
|
+
# @return the log level specified in _config.yml, or :info (1) if not specified
|
75
82
|
def level
|
76
83
|
@logger.level
|
77
84
|
end
|
@@ -100,11 +107,28 @@ class PluginLogger
|
|
100
107
|
end
|
101
108
|
end
|
102
109
|
|
110
|
+
def fatal(progname = nil, &block)
|
111
|
+
if block
|
112
|
+
@logger.fatal(@logger.progname) { (yield block).to_s.red.bold }
|
113
|
+
else
|
114
|
+
@logger.fatal(@logger.progname) { progname.to_s.red.bold }
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# @return the log level specified in _config.yml, or :info (1) if not specified
|
103
119
|
# Available colors are: :black, :red, :green, :yellow, :blue, :magenta, :cyan, :white, and the modifier :bold
|
104
120
|
def level_as_sym
|
105
121
|
return :unknown if @logger.level.negative? || level > 4
|
106
122
|
|
107
|
-
[
|
123
|
+
%i[debug info warn error fatal unknown][@logger.level]
|
124
|
+
end
|
125
|
+
|
126
|
+
def unknown(progname = nil, &block)
|
127
|
+
if block
|
128
|
+
@logger.unknown(@logger.progname) { (yield block).to_s.green }
|
129
|
+
else
|
130
|
+
@logger.unknown(@logger.progname) { progname.to_s.green }
|
131
|
+
end
|
108
132
|
end
|
109
133
|
|
110
134
|
private
|
@@ -112,86 +136,17 @@ class PluginLogger
|
|
112
136
|
def derive_progname(klass)
|
113
137
|
class_name = klass.class.to_s
|
114
138
|
case class_name
|
115
|
-
when
|
116
|
-
klass.to_s.split(
|
117
|
-
when "Module", "Symbol", "String"
|
118
|
-
klass.to_s.split("::").last
|
139
|
+
when 'Class', 'Module', 'Symbol', 'String'
|
140
|
+
klass.to_s.split('::').last
|
119
141
|
else
|
120
142
|
class_name
|
121
143
|
end
|
122
144
|
end
|
123
145
|
end
|
124
146
|
|
125
|
-
|
126
|
-
# Saves `site.config` for later use when creating plugin loggers; these loggers each have their own log levels.
|
127
|
-
#
|
128
|
-
# For example, if the plugin's progname has value `MyPlugin` then an entry called `plugin_loggers.MyPlugin`
|
129
|
-
# will be read from `config`, if present.
|
130
|
-
# If no such entry is found then the meta-logger log_level is set to `:info`.
|
131
|
-
# If you want to see messages that indicate the loggers and log levels as they are created,
|
132
|
-
# set the log level for `PluginMetaLogger` to `debug` in `_config.yml`
|
133
|
-
#
|
134
|
-
# @example
|
135
|
-
# # Create and initialize the meta-logger singleton in a high priority Jekyll `site` `:after_init` hook:
|
136
|
-
# @meta_logger = PluginMetaLogger.instance.new_logger(site.config, self)
|
137
|
-
# @meta_logger.info { "Meta-logger has been created" }
|
138
|
-
#
|
139
|
-
# # In `config.yml`:
|
140
|
-
# plugin_loggers:
|
141
|
-
# PluginMetaLogger: info
|
142
|
-
# MyPlugin: warn
|
143
|
-
# MakeArchive: error
|
144
|
-
# ArchiveDisplayTag: debug
|
145
|
-
#
|
146
|
-
# # In a Jekyll plugin:
|
147
|
-
# @logger = PluginMetaLogger.instance.setup(self)
|
148
|
-
# @logger.info { "This is a log message from a Jekyll plugin" }
|
149
|
-
# #
|
150
|
-
# PluginMetaLogger.instance.info { "MyPlugin vX.Y.Z has been loaded" }
|
151
|
-
class PluginMetaLogger
|
152
|
-
include Singleton
|
153
|
-
attr_reader :config, :logger
|
154
|
-
|
155
|
-
def initialize()
|
156
|
-
super
|
157
|
-
@config = nil
|
158
|
-
@logger = new_logger(self)
|
159
|
-
end
|
160
|
-
|
161
|
-
def info
|
162
|
-
@logger.info(self) { yield }
|
163
|
-
end
|
164
|
-
|
165
|
-
def debug
|
166
|
-
@logger.debug(self) { yield }
|
167
|
-
end
|
168
|
-
|
169
|
-
def level_as_sym
|
170
|
-
@logger.level_as_sym
|
171
|
-
end
|
172
|
-
|
173
|
-
def warn
|
174
|
-
@logger.warn(self) { yield }
|
175
|
-
end
|
176
|
-
|
177
|
-
def error
|
178
|
-
@logger.error(self) { yield }
|
179
|
-
end
|
180
|
-
|
181
|
-
def new_logger(klass, config = nil, stream_name = $stdout)
|
182
|
-
@config ||= config
|
183
|
-
if @config.nil?
|
184
|
-
puts { "Error: PluginMetaLogger has not been initialized with site.config.".red }
|
185
|
-
PluginLogger.new(klass, {}, stream_name)
|
186
|
-
else
|
187
|
-
PluginLogger.new(klass, @config, stream_name)
|
188
|
-
end
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
Jekyll::Hooks.register(:site, :after_reset, :priority => :high) do |site|
|
147
|
+
Jekyll::Hooks.register(:site, :after_reset, priority: :high) do |site|
|
193
148
|
instance = PluginMetaLogger.instance
|
194
149
|
logger = instance.new_logger(PluginMetaLogger, site.config)
|
195
150
|
logger.info { "Loaded #{JekyllPluginLoggerName::PLUGIN_NAME} v#{JekyllPluginLoggerVersion::VERSION} plugin." }
|
196
|
-
logger.debug { "Logger for #{instance.progname} created at level #{instance.level_as_sym}" }
|
151
|
+
logger.debug { "Logger for #{instance.logger.progname} created at level #{instance.level_as_sym}" }
|
197
152
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'colorator'
|
2
|
+
require 'logger'
|
3
|
+
require 'singleton'
|
4
|
+
|
5
|
+
# Makes a meta-logger instance (a singleton) with level set by `site.config`.
|
6
|
+
# Saves `site.config` for later use when creating plugin loggers; these loggers each have their own log levels.
|
7
|
+
#
|
8
|
+
# For example, if the plugin's progname has value `MyPlugin` then an entry called `plugin_loggers.MyPlugin`
|
9
|
+
# will be read from `config`, if present.
|
10
|
+
# If no such entry is found then the meta-logger log_level is set to `:info`.
|
11
|
+
# If you want to see messages that indicate the loggers and log levels as they are created,
|
12
|
+
# set the log level for `PluginMetaLogger` to `debug` in `_config.yml`
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
# # Create and initialize the meta-logger singleton in a high priority Jekyll `site` `:after_init` hook:
|
16
|
+
# @meta_logger = PluginMetaLogger.instance.new_logger(site.config, self)
|
17
|
+
# @meta_logger.info { "Meta-logger has been created" }
|
18
|
+
#
|
19
|
+
# # In `config.yml`:
|
20
|
+
# plugin_loggers:
|
21
|
+
# PluginMetaLogger: info
|
22
|
+
# MyPlugin: warn
|
23
|
+
# MakeArchive: error
|
24
|
+
# ArchiveDisplayTag: debug
|
25
|
+
#
|
26
|
+
# # In a Jekyll plugin:
|
27
|
+
# @logger = PluginMetaLogger.instance.setup(self)
|
28
|
+
# @logger.info { "This is a log message from a Jekyll plugin" }
|
29
|
+
# #
|
30
|
+
# PluginMetaLogger.instance.info { "MyPlugin vX.Y.Z has been loaded" }
|
31
|
+
class PluginMetaLogger
|
32
|
+
include Singleton
|
33
|
+
attr_reader :config, :logger
|
34
|
+
|
35
|
+
def initialize
|
36
|
+
super
|
37
|
+
@config = nil
|
38
|
+
@logger = new_logger(self)
|
39
|
+
end
|
40
|
+
|
41
|
+
def info(&block)
|
42
|
+
@logger.info(self) { yield block }
|
43
|
+
end
|
44
|
+
|
45
|
+
def debug(&block)
|
46
|
+
@logger.debug(self) { yield block }
|
47
|
+
end
|
48
|
+
|
49
|
+
def level_as_sym
|
50
|
+
@logger.level_as_sym
|
51
|
+
end
|
52
|
+
|
53
|
+
def warn(&block)
|
54
|
+
@logger.warn(self) { yield block }
|
55
|
+
end
|
56
|
+
|
57
|
+
def error(&block)
|
58
|
+
@logger.error(self) { yield block }
|
59
|
+
end
|
60
|
+
|
61
|
+
def new_logger(klass, config = nil, stream_name = $stdout)
|
62
|
+
@config ||= config
|
63
|
+
if @config.nil?
|
64
|
+
puts { 'Error: PluginMetaLogger has not been initialized with site.config.'.red }
|
65
|
+
PluginLogger.new(klass, {}, stream_name)
|
66
|
+
else
|
67
|
+
PluginLogger.new(klass, @config, stream_name)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -1,8 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
require "jekyll"
|
5
|
-
require_relative "../lib/jekyll_plugin_logger"
|
1
|
+
require 'colorator'
|
2
|
+
require 'jekyll'
|
3
|
+
require_relative '../lib/jekyll_plugin_logger'
|
6
4
|
|
7
5
|
# Output should be:
|
8
6
|
|
@@ -19,66 +17,66 @@ require_relative "../lib/jekyll_plugin_logger"
|
|
19
17
|
class MyTestPlugin
|
20
18
|
instance = PluginMetaLogger.instance
|
21
19
|
logger = instance.new_logger(self) # Should generate a warning
|
22
|
-
PluginMetaLogger.instance.info
|
23
|
-
PluginMetaLogger.instance.debug {
|
24
|
-
PluginMetaLogger.instance.warn
|
25
|
-
PluginMetaLogger.instance.error {
|
20
|
+
PluginMetaLogger.instance.info { 'How now, brown cow' }
|
21
|
+
PluginMetaLogger.instance.debug { 'How now, brown cow' }
|
22
|
+
PluginMetaLogger.instance.warn { 'How now, brown cow' }
|
23
|
+
PluginMetaLogger.instance.error { 'How now, brown cow' }
|
26
24
|
|
27
25
|
logger = PluginMetaLogger.instance.new_logger(self, RSpec.configuration.site_config)
|
28
|
-
logger.debug {
|
29
|
-
logger.info
|
30
|
-
logger.warn
|
31
|
-
logger.error {
|
26
|
+
logger.debug { '3 fleas fleeing freedom' }
|
27
|
+
logger.info { '3 fleas fleeing freedom' }
|
28
|
+
logger.warn { '3 fleas fleeing freedom' }
|
29
|
+
logger.error { '3 fleas fleeing freedom' }
|
32
30
|
|
33
31
|
def self.exercise(logger)
|
34
32
|
puts
|
35
|
-
# puts
|
36
|
-
logger.debug(
|
37
|
-
# logger.debug(
|
38
|
-
# logger.debug(
|
39
|
-
logger.debug {
|
33
|
+
# puts '\ncalling_class_name=#{logger.send(:calling_class_name)}'
|
34
|
+
logger.debug('Debug message 1')
|
35
|
+
# logger.debug('MyPlugin', 'Debug message 2')
|
36
|
+
# logger.debug('MyPlugin') { 'Debug message 3' }
|
37
|
+
logger.debug { 'Debug message 4' }
|
40
38
|
|
41
|
-
logger.info(
|
42
|
-
# logger.info(
|
43
|
-
# logger.info(
|
44
|
-
logger.info {
|
39
|
+
logger.info('Info message 1')
|
40
|
+
# logger.info('MyPlugin', 'Info message 2')
|
41
|
+
# logger.info('MyPlugin') { 'Info message 3' }
|
42
|
+
logger.info { 'Info message 4' }
|
45
43
|
|
46
|
-
logger.warn(
|
47
|
-
# logger.warn(
|
48
|
-
# logger.warn(
|
49
|
-
logger.warn {
|
44
|
+
logger.warn('Warn message 1')
|
45
|
+
# logger.warn('MyPlugin', 'Warn message 2')
|
46
|
+
# logger.warn('MyPlugin') { 'Warn message 3' }
|
47
|
+
logger.warn { 'Warn message 4' }
|
50
48
|
|
51
|
-
logger.error(
|
52
|
-
# logger.error(
|
53
|
-
# logger.error(
|
54
|
-
logger.error {
|
49
|
+
logger.error('Error message 1')
|
50
|
+
# logger.error('MyPlugin', 'Error message 2')
|
51
|
+
# logger.error('MyPlugin') { 'Error message 3' }
|
52
|
+
logger.error { 'Error message 4' }
|
55
53
|
end
|
56
54
|
|
57
55
|
RSpec.describe PluginLogger do
|
58
|
-
it
|
56
|
+
it 'outputs at info level' do
|
59
57
|
MyTestPlugin.exercise(PluginMetaLogger.instance.new_logger(self, PluginMetaLogger.instance.config, $stdout))
|
60
58
|
expect(PluginMetaLogger.instance.level_as_sym).to eq(:info)
|
61
59
|
end
|
62
60
|
|
63
|
-
it
|
61
|
+
it 'uses config debug' do
|
64
62
|
logger = PluginMetaLogger.instance.new_logger(:MyBlock, PluginMetaLogger.instance.config)
|
65
63
|
expect(logger.level_as_sym).to eq(:debug)
|
66
64
|
MyTestPlugin.exercise(logger)
|
67
65
|
end
|
68
66
|
|
69
|
-
it
|
67
|
+
it 'uses config info' do
|
70
68
|
logger = PluginMetaLogger.instance.new_logger(:ArchiveDisplayTag, PluginMetaLogger.instance.config)
|
71
69
|
expect(logger.level_as_sym).to eq(:info)
|
72
70
|
MyTestPlugin.exercise(logger)
|
73
71
|
end
|
74
72
|
|
75
|
-
it
|
76
|
-
logger = PluginMetaLogger.instance.new_logger(
|
73
|
+
it 'uses config warn' do
|
74
|
+
logger = PluginMetaLogger.instance.new_logger('SiteInspector', PluginMetaLogger.instance.config, $stdout)
|
77
75
|
expect(logger.level_as_sym).to eq(:warn)
|
78
76
|
MyTestPlugin.exercise(logger)
|
79
77
|
end
|
80
78
|
|
81
|
-
it
|
79
|
+
it 'uses config error' do
|
82
80
|
logger = PluginMetaLogger.instance.new_logger(:PreTagBlock, PluginMetaLogger.instance.config)
|
83
81
|
expect(logger.level_as_sym).to eq(:error)
|
84
82
|
MyTestPlugin.exercise(logger)
|
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require "jekyll"
|
4
|
-
require_relative "../lib/jekyll_plugin_logger"
|
1
|
+
require 'jekyll'
|
2
|
+
require_relative '../lib/jekyll_plugin_logger'
|
5
3
|
|
6
4
|
Jekyll.logger.log_level = :info
|
7
5
|
|
8
6
|
RSpec.configure do |config|
|
7
|
+
config.filter_run_when_matching focus: true
|
9
8
|
plugin_config = <<~END_CONFIG
|
10
9
|
plugin_loggers:
|
11
10
|
ArchiveDisplayTag: info
|
@@ -21,10 +20,8 @@ RSpec.configure do |config|
|
|
21
20
|
config.add_setting :site_config
|
22
21
|
config.site_config = YAML.safe_load(plugin_config)
|
23
22
|
|
24
|
-
config.
|
25
|
-
config.order = "random"
|
26
|
-
config.run_all_when_everything_filtered = true
|
23
|
+
config.order = 'random'
|
27
24
|
|
28
25
|
# See https://relishapp.com/rspec/rspec-core/docs/command-line/only-failures
|
29
|
-
config.example_status_persistence_file_path =
|
26
|
+
config.example_status_persistence_file_path = 'spec/status_persistence.txt'
|
30
27
|
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
example_id | status | run_time |
|
2
|
+
---------------------------------------- | ------ | --------------- |
|
3
|
+
./spec/jekyll_plugin_logger_spec.rb[1:1] | passed | 0.00004 seconds |
|
4
|
+
./spec/jekyll_plugin_logger_spec.rb[1:2] | passed | 0.00005 seconds |
|
5
|
+
./spec/jekyll_plugin_logger_spec.rb[1:3] | passed | 0.00009 seconds |
|
6
|
+
./spec/jekyll_plugin_logger_spec.rb[1:4] | passed | 0.00005 seconds |
|
7
|
+
./spec/jekyll_plugin_logger_spec.rb[1:5] | passed | 0.00117 seconds |
|
metadata
CHANGED
@@ -1,37 +1,23 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll_plugin_logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Slinn
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-11-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 3.5.0
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 3.5.0
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: debase
|
14
|
+
name: bump
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
17
|
- - ">="
|
32
18
|
- !ruby/object:Gem::Version
|
33
19
|
version: '0'
|
34
|
-
type: :
|
20
|
+
type: :runtime
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
@@ -39,22 +25,22 @@ dependencies:
|
|
39
25
|
- !ruby/object:Gem::Version
|
40
26
|
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
28
|
+
name: jekyll
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - ">="
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
48
|
-
type: :
|
33
|
+
version: 3.5.0
|
34
|
+
type: :runtime
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
38
|
- - ">="
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
40
|
+
version: 3.5.0
|
55
41
|
description: 'Generates Jekyll logger with colored output.
|
56
42
|
|
57
|
-
'
|
43
|
+
'
|
58
44
|
email:
|
59
45
|
- mslinn@mslinn.com
|
60
46
|
executables: []
|
@@ -69,16 +55,18 @@ files:
|
|
69
55
|
- jekyll_plugin_logger.gemspec
|
70
56
|
- lib/jekyll_plugin_logger.rb
|
71
57
|
- lib/jekyll_plugin_logger/version.rb
|
58
|
+
- lib/jekyll_plugin_meta_logger.rb
|
72
59
|
- spec/jekyll_plugin_logger_spec.rb
|
73
60
|
- spec/spec_helper.rb
|
74
|
-
|
61
|
+
- spec/status_persistence.txt
|
62
|
+
homepage: https://www.mslinn.com/jekyll_plugins/jekyll_plugin_logger.html
|
75
63
|
licenses:
|
76
64
|
- MIT
|
77
65
|
metadata:
|
78
66
|
allowed_push_host: https://rubygems.org
|
79
67
|
bug_tracker_uri: https://github.com/mslinn/jekyll_plugin_logger/issues
|
80
68
|
changelog_uri: https://github.com/mslinn/jekyll_plugin_logger/CHANGELOG.md
|
81
|
-
homepage_uri: https://www.mslinn.com/
|
69
|
+
homepage_uri: https://www.mslinn.com/jekyll_plugins/jekyll_plugin_logger.html
|
82
70
|
source_code_uri: https://github.com/mslinn/jekyll_plugin_logger
|
83
71
|
post_install_message: |2+
|
84
72
|
|
@@ -98,10 +86,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
98
86
|
- !ruby/object:Gem::Version
|
99
87
|
version: '0'
|
100
88
|
requirements: []
|
101
|
-
rubygems_version: 3.
|
102
|
-
signing_key:
|
89
|
+
rubygems_version: 3.3.7
|
90
|
+
signing_key:
|
103
91
|
specification_version: 4
|
104
|
-
summary: Generates Jekyll logger with colored output.
|
92
|
+
summary: Generates a Jekyll logger with colored output.
|
105
93
|
test_files:
|
106
94
|
- spec/jekyll_plugin_logger_spec.rb
|
107
95
|
- spec/spec_helper.rb
|
96
|
+
- spec/status_persistence.txt
|
97
|
+
...
|