lumberjack_redis_device 1.0.0 → 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.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +12 -0
- data/.github/workflows/continuous_integration.yml +70 -0
- data/.standard.yml +10 -0
- data/CHANGE_LOG.md +33 -1
- data/README.md +43 -3
- data/VERSION +1 -1
- data/lib/lumberjack/redis_device.rb +171 -0
- data/lib/lumberjack_redis_device.rb +1 -128
- data/lumberjack_redis_device.gemspec +19 -14
- metadata +16 -55
- /data/{MIT_LICENSE → MIT_LICENSE.txt} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 848ce30a84453889a51a97492666fdc53e1c5e8b8299a046814dfb4eaf28c110
|
4
|
+
data.tar.gz: 4e71adc0700954dd842963c0e09be7cdb1ae440c45673938f98cbcec86004bdd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37057976e7025438f3d53798a43b977dd8534c5cecd1265edf66a5dc71c84facdb03d2e489eae1def40ca9335674edca82fec8507dda1f09344505d17bdfb9fd
|
7
|
+
data.tar.gz: 22dcfeacde23ef63f04a97c73e33f99790d18a3bec8c8a13c58891ba9a0e9366ec83131ba98a8c0da13a3c9f48b9e81eee3c0124f6b45b1501b0802929ce9e30
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# Dependabot update strategy
|
2
|
+
version: 2
|
3
|
+
updates:
|
4
|
+
- package-ecosystem: bundler
|
5
|
+
directory: "/"
|
6
|
+
schedule:
|
7
|
+
interval: weekly
|
8
|
+
allow:
|
9
|
+
# Automatically keep all runtime dependencies updated
|
10
|
+
- dependency-name: "*"
|
11
|
+
dependency-type: "production"
|
12
|
+
versioning-strategy: lockfile-only
|
@@ -0,0 +1,70 @@
|
|
1
|
+
name: Continuous Integration
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- main
|
7
|
+
- actions-*
|
8
|
+
pull_request:
|
9
|
+
branches-ignore:
|
10
|
+
- actions-*
|
11
|
+
workflow_dispatch:
|
12
|
+
|
13
|
+
env:
|
14
|
+
BUNDLE_CLEAN: "true"
|
15
|
+
BUNDLE_PATH: vendor/bundle
|
16
|
+
BUNDLE_JOBS: 3
|
17
|
+
BUNDLE_RETRY: 3
|
18
|
+
|
19
|
+
jobs:
|
20
|
+
build:
|
21
|
+
name: build ruby-${{ matrix.ruby }} ${{ matrix.appraisal }}
|
22
|
+
runs-on: ubuntu-latest
|
23
|
+
services:
|
24
|
+
redis:
|
25
|
+
image: redis
|
26
|
+
ports:
|
27
|
+
- 6379:6379
|
28
|
+
options: >-
|
29
|
+
--health-cmd "redis-cli ping"
|
30
|
+
--health-interval 10s
|
31
|
+
--health-timeout 5s
|
32
|
+
--health-retries 5
|
33
|
+
strategy:
|
34
|
+
fail-fast: false
|
35
|
+
matrix:
|
36
|
+
include:
|
37
|
+
- ruby: "ruby"
|
38
|
+
standardrb: true
|
39
|
+
yard: true
|
40
|
+
- ruby: "3.0"
|
41
|
+
appraisal: redis_5
|
42
|
+
- ruby: "2.7"
|
43
|
+
appraisal: redis_4
|
44
|
+
steps:
|
45
|
+
- uses: actions/checkout@v4
|
46
|
+
- name: Set up Ruby ${{ matrix.ruby }}
|
47
|
+
uses: ruby/setup-ruby@v1
|
48
|
+
with:
|
49
|
+
ruby-version: "${{ matrix.ruby }}"
|
50
|
+
- name: Setup bundler
|
51
|
+
if: matrix.bundler != ''
|
52
|
+
run: |
|
53
|
+
gem uninstall bundler --all
|
54
|
+
gem install bundler --no-document --version ${{ matrix.bundler }}
|
55
|
+
- name: Set Appraisal bundle
|
56
|
+
if: matrix.appraisal != ''
|
57
|
+
run: |
|
58
|
+
echo "using gemfile gemfiles/${{ matrix.appraisal }}.gemfile"
|
59
|
+
bundle config set gemfile "gemfiles/${{ matrix.appraisal }}.gemfile"
|
60
|
+
- name: Install gems
|
61
|
+
run: |
|
62
|
+
bundle update
|
63
|
+
- name: Run Tests
|
64
|
+
run: bundle exec rake
|
65
|
+
- name: standardrb
|
66
|
+
if: matrix.standardrb == true
|
67
|
+
run: bundle exec standardrb
|
68
|
+
- name: yard
|
69
|
+
if: matrix.yard == true
|
70
|
+
run: bundle exec yard --fail-on-warning
|
data/.standard.yml
ADDED
data/CHANGE_LOG.md
CHANGED
@@ -1,3 +1,35 @@
|
|
1
|
+
# Changelog
|
2
|
+
All notable changes to this project will be documented in this file.
|
3
|
+
|
4
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
|
+
|
7
|
+
## 1.1.0
|
8
|
+
|
9
|
+
### Changed
|
10
|
+
|
11
|
+
- Bumped lumberjack version to >= 2.0.
|
12
|
+
|
13
|
+
### Removed
|
14
|
+
|
15
|
+
- Removed support for Ruby < 2.7.
|
16
|
+
- Removed dependency on multi_json.
|
17
|
+
|
18
|
+
## 1.0.2
|
19
|
+
|
20
|
+
## Fixed
|
21
|
+
|
22
|
+
- Fixed return value from `exists` to always be a boolean regardless of the version of the redis gem being used.
|
23
|
+
|
24
|
+
## 1.0.1
|
25
|
+
|
26
|
+
### Added
|
27
|
+
|
28
|
+
- Add helper to test if log exists in redis or has been expired
|
29
|
+
- Add helper to get the timestamp of the last written log entry
|
30
|
+
|
1
31
|
# 1.0.0
|
2
32
|
|
3
|
-
|
33
|
+
### Added
|
34
|
+
|
35
|
+
- Initial release
|
data/README.md
CHANGED
@@ -1,11 +1,17 @@
|
|
1
1
|
# Lumberjack Redis Device
|
2
2
|
|
3
|
-
[](https://github.com/bdurand/lumberjack_redis_device/actions/workflows/continuous_integration.yml)
|
4
|
+
[](https://github.com/testdouble/standard)
|
5
|
+
[](https://badge.fury.io/rb/lumberjack_redis_device)
|
5
6
|
|
6
7
|
This is a simple reference implementation of a device for the [lumberjack](https://github.com/bdurand/lumberjack) to send logs to a data store.
|
7
8
|
|
8
|
-
|
9
|
+
> [!WARNING]
|
10
|
+
> This gem is not intended for high volume production use. It is intended to be a simple way to expose a smallish volume of logs from a remote system via Redis.
|
11
|
+
>
|
12
|
+
> In a high traffic system, the logs will roll over too quickly to be useful.
|
13
|
+
>
|
14
|
+
> It can be useful as a temporary store in log shipment, or as a debug tool for seeing only recent log entries.
|
9
15
|
|
10
16
|
The number of entries in the list can be capped with the `:limit` paramter on the constructor. An expiration time can also be set on the redis key as well with the `:ttl` parameter.
|
11
17
|
|
@@ -20,3 +26,37 @@ The log entries can then be read out again with the `read` method. The result wi
|
|
20
26
|
```ruby
|
21
27
|
entries = device.read
|
22
28
|
```
|
29
|
+
|
30
|
+
## Installation
|
31
|
+
|
32
|
+
Add this line to your application's Gemfile:
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
gem "lumberjack_redis_device"
|
36
|
+
```
|
37
|
+
|
38
|
+
And then execute:
|
39
|
+
```bash
|
40
|
+
$ bundle
|
41
|
+
```
|
42
|
+
|
43
|
+
Or install it yourself as:
|
44
|
+
```bash
|
45
|
+
$ gem install lumberjack_redis_device
|
46
|
+
```
|
47
|
+
|
48
|
+
## Contributing
|
49
|
+
|
50
|
+
Open a pull request on GitHub.
|
51
|
+
|
52
|
+
Please use the [standardrb](https://github.com/testdouble/standard) syntax and lint your code with `standardrb --fix` before submitting.
|
53
|
+
|
54
|
+
You'll need a redis server running to run the tests. You can spin one up using Docker:
|
55
|
+
|
56
|
+
```bash
|
57
|
+
$ docker run --rm -p 6379:6379 redis
|
58
|
+
```
|
59
|
+
|
60
|
+
## License
|
61
|
+
|
62
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.1.0
|
@@ -0,0 +1,171 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "lumberjack"
|
4
|
+
require "redis"
|
5
|
+
require "json"
|
6
|
+
|
7
|
+
# Lumberjack logging framework with device support for Redis
|
8
|
+
module Lumberjack
|
9
|
+
# This Lumberjack device logs output to a redis list. The redis list will automatically truncate
|
10
|
+
# to a given size to prevent running out of memory on the server. This is not intended to be a
|
11
|
+
# scalable logging solution, but it can be useful as an additional logging tool to expose recent logs.
|
12
|
+
class RedisDevice < Device
|
13
|
+
VERSION = ::File.read(::File.join(__dir__, "..", "..", "VERSION")).strip.freeze
|
14
|
+
|
15
|
+
DeviceRegistry.add(:redis, self)
|
16
|
+
|
17
|
+
attr_reader :name, :ttl, :limit
|
18
|
+
|
19
|
+
# Create a device. The name will be used as the key for the log entries in redis.
|
20
|
+
#
|
21
|
+
# The redis object can either be a `Redis` instance or a block that yields a `Redis`
|
22
|
+
# instance.
|
23
|
+
#
|
24
|
+
# You can also specify a time to live in seconds (ttl) and set the limit for the size of the list.
|
25
|
+
def initialize(name:, redis:, limit: 10_000, ttl: nil)
|
26
|
+
@name = name
|
27
|
+
@redis = redis
|
28
|
+
@ttl = ttl.to_i
|
29
|
+
@limit = limit
|
30
|
+
end
|
31
|
+
|
32
|
+
# Write an entry to the list in redis
|
33
|
+
def write(entry)
|
34
|
+
data = entry_as_json(entry)
|
35
|
+
json = dump_json(data)
|
36
|
+
redis.multi do |transaction|
|
37
|
+
transaction.lpush(name, json)
|
38
|
+
transaction.ltrim(name, 0, limit - 1)
|
39
|
+
transaction.expire(name, ttl) if ttl && ttl > 0
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Read a set number of entries from the list. The result will be an array of
|
44
|
+
# Lumberjack::LogEntry objects.
|
45
|
+
def read(count = limit)
|
46
|
+
docs = redis.lrange(name, 0, count - 1)
|
47
|
+
docs.collect { |json| entry_from_json(json) }
|
48
|
+
end
|
49
|
+
|
50
|
+
# Return true if the logs exist in redis. Will return false if the
|
51
|
+
# logs have expired.
|
52
|
+
def exists?
|
53
|
+
retval = redis.exists(name)
|
54
|
+
if retval.is_a?(Integer)
|
55
|
+
retval = (retval > 0)
|
56
|
+
end
|
57
|
+
retval
|
58
|
+
end
|
59
|
+
|
60
|
+
# Return the timestamp of the last log entry.
|
61
|
+
def last_written_at
|
62
|
+
entry = read(1).first
|
63
|
+
entry&.time
|
64
|
+
end
|
65
|
+
|
66
|
+
# Get the datetime format used for formatting time values in log entries.
|
67
|
+
# @return [String, nil] the datetime format string, or nil if no custom format is set
|
68
|
+
def datetime_format
|
69
|
+
@time_formatter&.format
|
70
|
+
end
|
71
|
+
|
72
|
+
# Set the datetime format for formatting time values in log entries.
|
73
|
+
# @param format [String] the datetime format string to use for time formatting
|
74
|
+
def datetime_format=(format)
|
75
|
+
@time_formatter = Lumberjack::Formatter::DateTimeFormatter.new(format)
|
76
|
+
end
|
77
|
+
|
78
|
+
# Get the Redis connection instance.
|
79
|
+
# @return [Redis] the Redis connection, either from the stored instance or by calling the proc
|
80
|
+
def redis
|
81
|
+
if @redis.is_a?(Proc)
|
82
|
+
@redis.call
|
83
|
+
else
|
84
|
+
@redis
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def entry_as_json(entry)
|
91
|
+
data = {}
|
92
|
+
set_attribute(data, "timestamp", entry.time.to_f) unless entry.time.nil?
|
93
|
+
set_attribute(data, "time", entry.time)
|
94
|
+
set_attribute(data, "severity", entry.severity_label)
|
95
|
+
set_attribute(data, "progname", entry.progname)
|
96
|
+
set_attribute(data, "pid", entry.pid)
|
97
|
+
set_attribute(data, "message", entry.message)
|
98
|
+
set_attribute(data, "attributes", entry.attributes)
|
99
|
+
|
100
|
+
data = @formatter.format(data) if @formatter
|
101
|
+
data
|
102
|
+
end
|
103
|
+
|
104
|
+
def entry_from_json(json)
|
105
|
+
data = JSON.parse(json)
|
106
|
+
time = Time.at(data["timestamp"]) if data["timestamp"]
|
107
|
+
severity = data["severity"]
|
108
|
+
progname = data["progname"]
|
109
|
+
pid = data["pid"]
|
110
|
+
message = data["message"]
|
111
|
+
attributes = data["attributes"] || data["tags"] # Fallback to tags for compatibility with 1.x format
|
112
|
+
LogEntry.new(time, severity, message, progname, pid, attributes)
|
113
|
+
end
|
114
|
+
|
115
|
+
def set_attribute(data, key, value)
|
116
|
+
return if value.nil?
|
117
|
+
|
118
|
+
if (value.is_a?(Time) || value.is_a?(DateTime)) && @time_formatter
|
119
|
+
value = @time_formatter.call(value)
|
120
|
+
end
|
121
|
+
|
122
|
+
if key.is_a?(Array)
|
123
|
+
unless key.empty?
|
124
|
+
if key.size == 1
|
125
|
+
data[key.first] = value
|
126
|
+
else
|
127
|
+
data[key.first] ||= {}
|
128
|
+
set_attribute(data[key.first], key[1, key.size], value)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
elsif key.respond_to?(:call)
|
132
|
+
hash = key.call(value)
|
133
|
+
if hash.is_a?(Hash)
|
134
|
+
data.merge!(hash)
|
135
|
+
end
|
136
|
+
else
|
137
|
+
data[key] = value unless key.nil?
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def default_formatter
|
142
|
+
formatter = Lumberjack::Formatter.new.clear
|
143
|
+
object_formatter = Lumberjack::Formatter::ObjectFormatter.new
|
144
|
+
formatter.add(String, object_formatter)
|
145
|
+
formatter.add(Object, object_formatter)
|
146
|
+
formatter.add(Enumerable, Formatter::StructuredFormatter.new(formatter))
|
147
|
+
formatter.add(Exception, Formatter::InspectFormatter.new)
|
148
|
+
end
|
149
|
+
|
150
|
+
def dump_json(data)
|
151
|
+
JSON.generate(json_safe(data))
|
152
|
+
end
|
153
|
+
|
154
|
+
def json_safe(value)
|
155
|
+
return nil if value.nil?
|
156
|
+
|
157
|
+
# Check if the as_json method is defined takes no parameters
|
158
|
+
as_json_arity = value.method(:as_json).arity if value.respond_to?(:as_json)
|
159
|
+
|
160
|
+
if as_json_arity == 0 || as_json_arity == -1
|
161
|
+
value.as_json
|
162
|
+
elsif value.is_a?(Hash)
|
163
|
+
value.transform_values { |v| json_safe(v) }
|
164
|
+
elsif value.is_a?(Enumerable)
|
165
|
+
value.collect { |v| json_safe(v) }
|
166
|
+
else
|
167
|
+
value
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
@@ -1,130 +1,3 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
require 'multi_json'
|
5
|
-
require 'redis'
|
6
|
-
|
7
|
-
module Lumberjack
|
8
|
-
# This Lumberjack device logs output to a redis list. The redis list will automatically truncate
|
9
|
-
# to a given size to prevent running out of memory on the server. This is not inteneded to be a
|
10
|
-
# scalable logging solution, but it can be useful as an additional logging tool to expose recent logs.
|
11
|
-
class RedisDevice < Device
|
12
|
-
|
13
|
-
attr_reader :name, :ttl, :limit
|
14
|
-
|
15
|
-
# Create a device. The name will be used as the key for the log entris in redis.
|
16
|
-
#
|
17
|
-
# The redis object can either be a `Redis` instance or a block that yields a `Redis`
|
18
|
-
# instance.
|
19
|
-
#
|
20
|
-
# You can also specify a time to live in seconds (ttl) and set the limit for the size of the list.
|
21
|
-
def initialize(name:, redis:, limit: 10_000, ttl: nil)
|
22
|
-
@name = name
|
23
|
-
@redis = redis
|
24
|
-
@ttl = ttl.to_i
|
25
|
-
@limit = limit
|
26
|
-
end
|
27
|
-
|
28
|
-
# Write an entry to the list in redis
|
29
|
-
def write(entry)
|
30
|
-
data = entry_as_json(entry)
|
31
|
-
json = MultiJson.dump(data)
|
32
|
-
redis.multi do |transaction|
|
33
|
-
transaction.lpush(name, json)
|
34
|
-
transaction.ltrim(name, 0, limit - 1)
|
35
|
-
transaction.expire(name, ttl) if ttl && ttl > 0
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
# Read a set number of entries from the list. The result will be an array of
|
40
|
-
# Lumberjack::LogEntry objects.
|
41
|
-
def read(count = limit)
|
42
|
-
docs = redis.lrange(name, 0, count - 1)
|
43
|
-
docs.collect { |json| entry_from_json(json) }
|
44
|
-
end
|
45
|
-
|
46
|
-
def datetime_format
|
47
|
-
@time_formatter.format if @time_formatter
|
48
|
-
end
|
49
|
-
|
50
|
-
def datetime_format=(format)
|
51
|
-
@time_formatter = Lumberjack::Formatter::DateTimeFormatter.new(format)
|
52
|
-
end
|
53
|
-
|
54
|
-
def redis
|
55
|
-
if @redis.is_a?(Proc)
|
56
|
-
@redis.call
|
57
|
-
else
|
58
|
-
@redis
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
private
|
63
|
-
|
64
|
-
def entry_as_json(entry)
|
65
|
-
data = {}
|
66
|
-
set_attribute(data, "timestamp", entry.time.to_f) unless entry.time.nil?
|
67
|
-
set_attribute(data, "time", entry.time)
|
68
|
-
set_attribute(data, "severity", entry.severity_label)
|
69
|
-
set_attribute(data, "progname", entry.progname)
|
70
|
-
set_attribute(data, "pid", entry.pid)
|
71
|
-
set_attribute(data, "message", entry.message)
|
72
|
-
set_attribute(data, "tags", entry.tags)
|
73
|
-
|
74
|
-
unless @tags_key.nil?
|
75
|
-
tags ||= {}
|
76
|
-
set_attribute(data, @tags_key, tags)
|
77
|
-
end
|
78
|
-
|
79
|
-
data = @formatter.format(data) if @formatter
|
80
|
-
data
|
81
|
-
end
|
82
|
-
|
83
|
-
def entry_from_json(json)
|
84
|
-
data = MultiJson.load(json)
|
85
|
-
time = Time.at(data["timestamp"]) if data["timestamp"]
|
86
|
-
severity = data["severity"]
|
87
|
-
progname = data["progname"]
|
88
|
-
pid = data["pid"]
|
89
|
-
message = data["message"]
|
90
|
-
tags = data["tags"]
|
91
|
-
LogEntry.new(time, severity, message, progname, pid, tags)
|
92
|
-
end
|
93
|
-
|
94
|
-
def set_attribute(data, key, value)
|
95
|
-
return if value.nil?
|
96
|
-
|
97
|
-
if (value.is_a?(Time) || value.is_a?(DateTime)) && @time_formatter
|
98
|
-
value = @time_formatter.call(value)
|
99
|
-
end
|
100
|
-
|
101
|
-
if key.is_a?(Array)
|
102
|
-
unless key.empty?
|
103
|
-
if key.size == 1
|
104
|
-
data[key.first] = value
|
105
|
-
else
|
106
|
-
data[key.first] ||= {}
|
107
|
-
set_attribute(data[key.first], key[1, key.size], value)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
elsif key.respond_to?(:call)
|
111
|
-
hash = key.call(value)
|
112
|
-
if hash.is_a?(Hash)
|
113
|
-
data.merge!(Lumberjack::Tags.stringify_keys(hash))
|
114
|
-
end
|
115
|
-
else
|
116
|
-
data[key] = value unless key.nil?
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
def default_formatter
|
121
|
-
formatter = Formatter.new.clear
|
122
|
-
object_formatter = Lumberjack::Formatter::ObjectFormatter.new
|
123
|
-
formatter.add(String, object_formatter)
|
124
|
-
formatter.add(Object, object_formatter)
|
125
|
-
formatter.add(Enumerable, Formatter::StructuredFormatter.new(formatter))
|
126
|
-
formatter.add(Exception, Formatter::InspectFormatter.new)
|
127
|
-
end
|
128
|
-
|
129
|
-
end
|
130
|
-
end
|
3
|
+
require_relative "lumberjack/redis_device"
|
@@ -1,16 +1,22 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
|
-
spec.name =
|
3
|
-
spec.version = File.read(File.
|
4
|
-
spec.authors = [
|
5
|
-
spec.email = [
|
2
|
+
spec.name = "lumberjack_redis_device"
|
3
|
+
spec.version = File.read(File.join(__dir__, "VERSION")).strip
|
4
|
+
spec.authors = ["Brian Durand"]
|
5
|
+
spec.email = ["bbdurand@gmail.com"]
|
6
6
|
|
7
7
|
spec.summary = "A logging device for the lumberjack gem that writes log entries as JSON documentspec."
|
8
8
|
spec.homepage = "https://github.com/bdurand/lumberjack_redis_device"
|
9
9
|
spec.license = "MIT"
|
10
10
|
|
11
|
+
spec.metadata = {
|
12
|
+
"homepage_uri" => spec.homepage,
|
13
|
+
"source_code_uri" => spec.homepage,
|
14
|
+
"changelog_uri" => "#{spec.homepage}/blob/main/CHANGE_LOG.md"
|
15
|
+
}
|
16
|
+
|
11
17
|
# Specify which files should be added to the gem when it is released.
|
12
18
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
13
|
-
ignore_files = %w
|
19
|
+
ignore_files = %w[
|
14
20
|
.gitignore
|
15
21
|
.travis.yml
|
16
22
|
Appraisals
|
@@ -19,18 +25,17 @@ Gem::Specification.new do |spec|
|
|
19
25
|
Rakefile
|
20
26
|
gemfiles/
|
21
27
|
spec/
|
22
|
-
|
23
|
-
spec.files = Dir.chdir(
|
24
|
-
`git ls-files -z`.split("\x0").reject{ |f| ignore_files.any?{ |path| f.start_with?(path) } }
|
28
|
+
]
|
29
|
+
spec.files = Dir.chdir(__dir__) do
|
30
|
+
`git ls-files -z`.split("\x0").reject { |f| ignore_files.any? { |path| f.start_with?(path) } }
|
25
31
|
end
|
26
32
|
|
27
|
-
spec.require_paths = [
|
33
|
+
spec.require_paths = ["lib"]
|
34
|
+
|
35
|
+
spec.required_ruby_version = ">=2.7"
|
28
36
|
|
29
|
-
spec.add_dependency "lumberjack", ">=
|
30
|
-
spec.add_dependency "multi_json"
|
37
|
+
spec.add_dependency "lumberjack", ">=2.0"
|
31
38
|
spec.add_dependency "redis"
|
32
39
|
|
33
|
-
spec.add_development_dependency
|
34
|
-
spec.add_development_dependency "rake"
|
35
|
-
spec.add_development_dependency "fakeredis"
|
40
|
+
spec.add_development_dependency "bundler"
|
36
41
|
end
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lumberjack_redis_device
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Durand
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: lumberjack
|
@@ -16,28 +15,14 @@ dependencies:
|
|
16
15
|
requirements:
|
17
16
|
- - ">="
|
18
17
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
18
|
+
version: '2.0'
|
20
19
|
type: :runtime
|
21
20
|
prerelease: false
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
23
22
|
requirements:
|
24
23
|
- - ">="
|
25
24
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: multi_json
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
25
|
+
version: '2.0'
|
41
26
|
- !ruby/object:Gem::Dependency
|
42
27
|
name: redis
|
43
28
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,35 +38,7 @@ dependencies:
|
|
53
38
|
- !ruby/object:Gem::Version
|
54
39
|
version: '0'
|
55
40
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '3.0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '3.0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rake
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: fakeredis
|
41
|
+
name: bundler
|
85
42
|
requirement: !ruby/object:Gem::Requirement
|
86
43
|
requirements:
|
87
44
|
- - ">="
|
@@ -94,24 +51,29 @@ dependencies:
|
|
94
51
|
- - ">="
|
95
52
|
- !ruby/object:Gem::Version
|
96
53
|
version: '0'
|
97
|
-
description:
|
98
54
|
email:
|
99
55
|
- bbdurand@gmail.com
|
100
56
|
executables: []
|
101
57
|
extensions: []
|
102
58
|
extra_rdoc_files: []
|
103
59
|
files:
|
60
|
+
- ".github/dependabot.yml"
|
61
|
+
- ".github/workflows/continuous_integration.yml"
|
62
|
+
- ".standard.yml"
|
104
63
|
- CHANGE_LOG.md
|
105
|
-
- MIT_LICENSE
|
64
|
+
- MIT_LICENSE.txt
|
106
65
|
- README.md
|
107
66
|
- VERSION
|
67
|
+
- lib/lumberjack/redis_device.rb
|
108
68
|
- lib/lumberjack_redis_device.rb
|
109
69
|
- lumberjack_redis_device.gemspec
|
110
70
|
homepage: https://github.com/bdurand/lumberjack_redis_device
|
111
71
|
licenses:
|
112
72
|
- MIT
|
113
|
-
metadata:
|
114
|
-
|
73
|
+
metadata:
|
74
|
+
homepage_uri: https://github.com/bdurand/lumberjack_redis_device
|
75
|
+
source_code_uri: https://github.com/bdurand/lumberjack_redis_device
|
76
|
+
changelog_uri: https://github.com/bdurand/lumberjack_redis_device/blob/main/CHANGE_LOG.md
|
115
77
|
rdoc_options: []
|
116
78
|
require_paths:
|
117
79
|
- lib
|
@@ -119,15 +81,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
119
81
|
requirements:
|
120
82
|
- - ">="
|
121
83
|
- !ruby/object:Gem::Version
|
122
|
-
version: '
|
84
|
+
version: '2.7'
|
123
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
86
|
requirements:
|
125
87
|
- - ">="
|
126
88
|
- !ruby/object:Gem::Version
|
127
89
|
version: '0'
|
128
90
|
requirements: []
|
129
|
-
rubygems_version: 3.
|
130
|
-
signing_key:
|
91
|
+
rubygems_version: 3.6.9
|
131
92
|
specification_version: 4
|
132
93
|
summary: A logging device for the lumberjack gem that writes log entries as JSON documentspec.
|
133
94
|
test_files: []
|
File without changes
|