logging-journald 1.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ad48095f0f3c6a845ce0d02b237d930fa6cf7f7e
4
+ data.tar.gz: 5c0e263ef33b5ef0f1424ca188ac37af33ff7323
5
+ SHA512:
6
+ metadata.gz: f677953b81185870ca3ca2559a49eb12227f4e6f769baf6bc4aa212b0188bf1117cbbd8ebf45eb744703b282a452b682bd6db922900411558801a337b32c5100
7
+ data.tar.gz: 67c8a31e1470e1987dba165b9deafecc29b2f797f6d1e3fb90c0e41646677097f8f8da3be38d7d864b4ead4d8cd4dd86f1ad9e7154e3097a3b25d6c02eb87a39
data/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ coverage/
2
+ doc/
3
+ pkg/
4
+ tmp/
5
+ vendor/
6
+ .rbx
7
+ .rvmrc
data/.rubocop.yml ADDED
@@ -0,0 +1,6 @@
1
+ ---
2
+ Metrics:
3
+ Enabled: false
4
+
5
+ Style/StringLiterals:
6
+ Enabled: false
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ before_install:
3
+ - sudo apt-get install -y libsystemd-journal-dev
4
+ install: "bundle install"
5
+ script: "bundle exec rake"
6
+ rvm:
7
+ - 2.1.0
8
+ - 2.2.0
9
+ - 2.3.0
10
+ - 2.4.0
11
+
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,38 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ logging-journald (1.0.0)
5
+ journald-logger
6
+ logging
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ journald-logger (2.0.3)
12
+ journald-native (~> 1.0)
13
+ journald-native (1.0.9)
14
+ little-plugger (1.1.4)
15
+ logging (2.2.2)
16
+ little-plugger (~> 1.1)
17
+ multi_json (~> 1.10)
18
+ metaclass (0.0.4)
19
+ mocha (1.3.0)
20
+ metaclass (~> 0.0.1)
21
+ multi_json (1.13.1)
22
+ power_assert (1.1.1)
23
+ rake (12.3.0)
24
+ test-unit (3.2.7)
25
+ power_assert
26
+
27
+ PLATFORMS
28
+ ruby
29
+
30
+ DEPENDENCIES
31
+ bundler
32
+ logging-journald!
33
+ mocha
34
+ rake
35
+ test-unit
36
+
37
+ BUNDLED WITH
38
+ 1.15.3
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2007-2016 Tim Pease
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ 'Software'), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,89 @@
1
+ ## Logging Journald
2
+ by Lukas Zapletal [![](https://secure.travis-ci.org/lzap/logging-journald.svg)](https://travis-ci.org/lzap/logging-journald)
3
+
4
+ * [Homepage](http://rubygems.org/gems/logging-journald)
5
+ * [Github Project](https://github.com/lzap/logging-journald)
6
+
7
+ ### Description
8
+
9
+ **Logging Journald** is a plugin for [logging gem](https://github.com/TwP/logging) - the flexible logging library for use in Ruby programs. It supports logging to system journal via journald-logger and journald-native gems.
10
+
11
+ ### Installation
12
+
13
+ ```
14
+ gem install logging-journald
15
+ ```
16
+
17
+ The gem provides journald appender and noop layout that does no formatting since core library does not provide such a layout. Apppender options are:
18
+
19
+ * name - name of the appender (required)
20
+ * ident - optional log ident (appender name by default)
21
+ * layout - optional layout (no formatting by default)
22
+ * mdc - log mdc into custom journal fields (true by default)
23
+ * ndc - log ndc hash values into custom journal fields (true by default)
24
+ * facility - optional syslog facility rendered as SYSLOG_FACILITY (LOG_USER (8) by default)
25
+ * extra - extra custom journal fields as hash
26
+
27
+ All custom fields are converted to uppercase by joudnald automatically, for more details [visit official documentation](https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html).
28
+
29
+ ### Examples
30
+
31
+ Use MDC to send arbitrary key/value pairs to system journal:
32
+
33
+ ```ruby
34
+ require 'logging'
35
+
36
+ log = Logging.logger['app']
37
+ log.add_appenders(Logging.appenders.journald('myservice'))
38
+
39
+ # use mapped diagnostic context to send custom fields
40
+ Logging.mdc['signed_user'] = 'Ondra'
41
+ logger.debug "blah blah"
42
+ ```
43
+
44
+ The example above will be rendered as:
45
+
46
+ ```
47
+ # journalctl -o verbose
48
+ MESSAGE=blah blah
49
+ SYSLOG_FACILITY=8
50
+ SIGNED_USER=Ondra
51
+ PRIORITY=2
52
+ SYSLOG_IDENTIFIER=myapp
53
+ _PID=25979
54
+ _TRANSPORT=journal
55
+ _UID=1000
56
+ _GID=1000
57
+ _MACHINE_ID=xxx
58
+ _HOSTNAME=xxx
59
+ _BOOT_ID=xxx
60
+ ...
61
+ ```
62
+
63
+ Mapped diagnostic contexts are great for global values like logged user, request or session id. There are two more options to send arbitrary key/value pairs:
64
+
65
+ ```ruby
66
+ require 'logging'
67
+
68
+ log = Logging.logger['app']
69
+ log.add_appenders(Logging.appenders.journald('myservice'))
70
+
71
+ # nested diagnostic context is a stack of values and
72
+ # it can be used but only hashes are taken into account
73
+ begin
74
+ Logging.ndc << { exception: err, backtrace: err.backtrace }
75
+ log.fatal "an exception occured"
76
+ ensure
77
+ Logging.ndc.clear
78
+ end
79
+
80
+ # hash can be provided instead of string but in this case
81
+ # layout cannot be used to format message in the system journal
82
+ log.info message: "this must be called 'message'", akey: "a value"
83
+ ```
84
+
85
+ There are some examples in the [examples folder](/examples).
86
+
87
+ ### License
88
+
89
+ The MIT License - see the [LICENSE](/LICENSE) file for the full text.
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask.rb'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << "test"
6
+ t.test_files = FileList['test/test*.rb']
7
+ t .verbose = true
8
+ end
9
+
10
+ task :default => [:test]
@@ -0,0 +1,31 @@
1
+ require 'logging'
2
+
3
+ log = Logging.logger['example']
4
+ log.add_appenders(Logging.appenders.journald('simple',
5
+ ident: 'simple', # optional log ident (appender name by default)
6
+ layout: Logging.layouts.pattern(pattern: "%m\n"), # optional layout
7
+ mdc: true, # log mdc into custom journal fields (true by default)
8
+ ndc: true, # log ndc hash values into custom journal fields (true by default)
9
+ facility: ::Syslog::Constants::LOG_USER, # optional syslog facility
10
+ extra: {}, # extra custom journal fields
11
+ ))
12
+ log.add_appenders(Logging.appenders.stdout)
13
+ log.level = :debug
14
+
15
+ # mapped diagnostic context is logged when mdc is set to true
16
+ Logging.mdc['USERNAME'] = 'Ondra'
17
+
18
+ # logging into journal is straight-forward
19
+ log.debug "this is debug message"
20
+ log.info "a very nice little info message"
21
+ log.warn "this is your last warning"
22
+
23
+ # hash instead string is supported with arbitrary key/value pairs but
24
+ # layout is ignored in this case
25
+ log.error message: "oh no an error", akey: "a value"
26
+
27
+ # when ndc is enabled, any number of hash objects can be pushed
28
+ # and will be logged with the message
29
+ Logging.ndc << { akey: "a value" }
30
+ log.fatal "an exception occured"
31
+ Logging.ndc.clear
@@ -0,0 +1,95 @@
1
+ require 'journald/logger'
2
+
3
+ module Logging
4
+ module Appenders
5
+
6
+ def self.journald(name, *args)
7
+ if args.empty?
8
+ return self['journald'] || ::Logging::Appenders::Journald.new(name)
9
+ end
10
+ ::Logging::Appenders::Journald.new(name, *args)
11
+ end
12
+
13
+ class Journald < ::Logging::Appender
14
+ attr_reader :ident, :mdc, :ndc, :facility, :extra, :journal
15
+
16
+ def initialize(name, opts = {})
17
+ opts[:layout] ||= ::Logging::Layouts::Noop.new
18
+ @ident = opts.fetch(:ident, name)
19
+ @mdc = opts.fetch(:mdc, true)
20
+ @ndc = opts.fetch(:ndc, true)
21
+ @facility = Integer(opts.fetch(:facility, -1))
22
+ @extra = opts.fetch(:extra, {})
23
+ @logger_name = opts.fetch(:logger_name, false)
24
+ @map = [
25
+ ::Journald::LOG_DEBUG,
26
+ ::Journald::LOG_INFO,
27
+ ::Journald::LOG_WARNING,
28
+ ::Journald::LOG_ERR,
29
+ ::Journald::LOG_CRIT
30
+ ]
31
+ map = opts.fetch(:map, nil)
32
+ self.map = map unless map.nil?
33
+ @journal = ::Journald::Logger.new(ident, ::Journald::LOG_DEBUG)
34
+ #@journal.sev_threshold = ::Journald::LOG_DEBUG
35
+ super(name, opts)
36
+ end
37
+
38
+ def map=(levels)
39
+ map = []
40
+ levels.keys.each do |lvl|
41
+ num = ::Logging.level_num(lvl)
42
+ map[num] = syslog_level_num(levels[lvl])
43
+ end
44
+ @map = map
45
+ end
46
+
47
+ def close(*args)
48
+ super(false)
49
+ end
50
+
51
+ private
52
+
53
+ def syslog_level_num(level)
54
+ case level
55
+ when Integer; level
56
+ when String, Symbol
57
+ level = level.to_s.upcase
58
+ self.class.const_get level
59
+ else
60
+ raise ArgumentError, "unknown level '#{level}'"
61
+ end
62
+ end
63
+
64
+ def write(event)
65
+ record = {}
66
+ record.merge!(extra) unless extra.empty?
67
+ record[:SYSLOG_FACILITY] = @facility if @facility >= 0
68
+ record.merge!(Logging.mdc.context) if mdc
69
+ if ndc
70
+ Logging.ndc.context.each do |item|
71
+ record.merge!(item) if item.instance_of?(Hash)
72
+ end
73
+ end
74
+ if event.instance_of?(::Logging::LogEvent)
75
+ record[:priority] = (@map[event.level] || ::Journald::LOG_DEBUG)
76
+ record[@logger_name] = event.logger if @logger_name
77
+ if event.data.instance_of?(Hash)
78
+ record.merge!(event.data)
79
+ else
80
+ record[:message] = @layout.format(event)
81
+ end
82
+ else
83
+ record[:message] = event
84
+ end
85
+ @journal.send(record)
86
+ self
87
+ rescue StandardError => err
88
+ self.level = :off
89
+ ::Logging.log_internal 'system journal appender have been disabled'
90
+ ::Logging.log_internal_error(err)
91
+ raise(err)
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,13 @@
1
+ module Logging::Layouts
2
+
3
+ def self.noop(*args)
4
+ return ::Logging::Layouts::Noop if args.empty?
5
+ ::Logging::Layouts::Noop.new(*args)
6
+ end
7
+
8
+ class Noop < ::Logging::Layout
9
+ def format(event)
10
+ event.data.to_s
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module Logging
2
+ module Plugins
3
+ module Journald
4
+ extend self
5
+
6
+ VERSION ||= '1.0.0'.freeze
7
+
8
+ def initialize_journald
9
+ require File.expand_path('../../layouts/noop', __FILE__)
10
+ require File.expand_path('../../appenders/journald', __FILE__)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,28 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'logging/plugins/journald'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'logging-journald'
7
+ spec.version = Logging::Plugins::Journald::VERSION
8
+ spec.authors = ['Lukas Zapletal']
9
+ spec.email = ['lukas-x@zapletalovi.com']
10
+ spec.summary = "Journald appender for logging gem"
11
+ spec.description = "Plugin for logging gem providing journald appender"
12
+ spec.homepage = 'https://github.com/lzap/logging-journald'
13
+ spec.license = 'MIT'
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.require_paths = ['lib']
18
+
19
+ spec.required_ruby_version = '>= 2.1.0'
20
+
21
+ spec.add_runtime_dependency 'journald-logger'
22
+ spec.add_runtime_dependency 'logging'
23
+
24
+ spec.add_development_dependency 'bundler'
25
+ spec.add_development_dependency 'mocha'
26
+ spec.add_development_dependency 'rake'
27
+ spec.add_development_dependency 'test-unit'
28
+ end
@@ -0,0 +1,125 @@
1
+ require 'logging'
2
+ require 'test/unit'
3
+ require 'mocha/test_unit'
4
+
5
+ Logging.initialize_plugins
6
+
7
+ module TestLogging
8
+ module TestAppenders
9
+ DEBUG = ::Journald::LOG_DEBUG
10
+ INFO = ::Journald::LOG_INFO
11
+ WARN = ::Journald::LOG_WARNING
12
+ ERR = ::Journald::LOG_ERR
13
+ CRIT = ::Journald::LOG_CRIT
14
+
15
+ class TestJournald < Test::Unit::TestCase
16
+ def setup
17
+ @log = Logging.logger['test']
18
+ @log.clear_appenders
19
+ @log.level = :debug
20
+ end
21
+
22
+ def setup_appender(*args)
23
+ @appender = Logging.appenders.journald('simple', *args)
24
+ @log.add_appenders(@appender)
25
+ end
26
+
27
+ def test_initialize
28
+ setup_appender
29
+ assert_equal "test", @log.name
30
+ assert_equal 1, @log.appenders.size
31
+ end
32
+
33
+ def test_simple_debug_line
34
+ setup_appender
35
+ @appender.journal.expects(:send).with(has_entries(message: "test", priority: DEBUG)).once.returns(true)
36
+ @log.debug "test"
37
+ end
38
+
39
+ def test_simple_debug_line_with_facility
40
+ setup_appender facility: 10
41
+ @appender.journal.expects(:send).with(has_entries(message: "test", SYSLOG_FACILITY: 10, priority: DEBUG)).once.returns(true)
42
+ @log.debug "test"
43
+ end
44
+
45
+ def test_simple_debug_line_with_logger
46
+ setup_appender logger_name: :lg
47
+ @appender.journal.expects(:send).with(has_entries(message: "test", lg: 'test', priority: DEBUG)).once.returns(true)
48
+ @log.debug "test"
49
+ end
50
+
51
+ def test_simple_debug_line_level_info
52
+ setup_appender
53
+ @log.level = :info
54
+ @appender.journal.expects(:send).with(has_entries(message: "test", priority: DEBUG)).never.returns(true)
55
+ @log.debug "test"
56
+ end
57
+
58
+ def test_simple_info_line
59
+ setup_appender
60
+ @appender.journal.expects(:send).with(has_entries(message: "test", priority: INFO)).once.returns(true)
61
+ @log.info "test"
62
+ end
63
+
64
+ def test_simple_warning_line
65
+ setup_appender
66
+ @appender.journal.expects(:send).with(has_entries(message: "test", priority: WARN)).once.returns(true)
67
+ @log.warn "test"
68
+ end
69
+
70
+ def test_simple_error_line
71
+ setup_appender
72
+ @appender.journal.expects(:send).with(has_entries(message: "test", priority: ERR)).once.returns(true)
73
+ @log.error "test"
74
+ end
75
+
76
+ def test_simple_fatal_line
77
+ setup_appender
78
+ @appender.journal.expects(:send).with(has_entries(message: "test", priority: CRIT)).once.returns(true)
79
+ @log.fatal "test"
80
+ end
81
+
82
+ def test_simple_debug_line_as_hash
83
+ setup_appender
84
+ @appender.journal.expects(:send).with(has_entries("message" => "test", priority: DEBUG)).once.returns(true)
85
+ @log.debug "message" => "test"
86
+ end
87
+
88
+ def test_simple_debug_line_as_hash_with_layout
89
+ setup_appender(layout: Logging.layouts.pattern(pattern: "X %m X"))
90
+ @appender.journal.expects(:send).with(has_entries("message" => "test", priority: DEBUG)).once.returns(true)
91
+ @log.debug "message" => "test"
92
+ end
93
+
94
+ def test_simple_info_line_with_mdc
95
+ setup_appender
96
+ Logging.mdc['test'] = 'value'
97
+ @appender.journal.expects(:send).with(has_entries(message: "test", priority: INFO, "test" => "value")).once.returns(true)
98
+ @log.info "test"
99
+ ensure
100
+ Logging.mdc.clear
101
+ end
102
+
103
+ def test_simple_info_line_with_ndc
104
+ setup_appender
105
+ Logging.ndc << { test: "value" }
106
+ @appender.journal.expects(:send).with(has_entries(message: "test", priority: INFO, test: "value")).once.returns(true)
107
+ @log.info "test"
108
+ ensure
109
+ Logging.ndc.clear
110
+ end
111
+
112
+ def test_simple_info_line_with_layout_mdc_ndc
113
+ setup_appender(layout: Logging.layouts.pattern(pattern: "%m %X{test1} %x"))
114
+ Logging.mdc['test1'] = 'value'
115
+ Logging.ndc << { "test2" => "value" }
116
+ @appender.journal.expects(:send).with(has_entries(message: "test value {\"test2\"=>\"value\"}", priority: INFO, "test1" => "value", "test2" => "value")).once.returns(true)
117
+ @log.info "test"
118
+ ensure
119
+ Logging.mdc.clear
120
+ Logging.ndc.clear
121
+ end
122
+ end
123
+ end
124
+ end
125
+
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logging-journald
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Lukas Zapletal
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-02-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: journald-logger
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
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: logging
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'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
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: mocha
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: 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: test-unit
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Plugin for logging gem providing journald appender
98
+ email:
99
+ - lukas-x@zapletalovi.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - ".rubocop.yml"
106
+ - ".travis.yml"
107
+ - Gemfile
108
+ - Gemfile.lock
109
+ - LICENSE
110
+ - README.md
111
+ - Rakefile
112
+ - examples/simple.rb
113
+ - lib/logging/appenders/journald.rb
114
+ - lib/logging/layouts/noop.rb
115
+ - lib/logging/plugins/journald.rb
116
+ - logging-journald.gemspec
117
+ - test/test_appenders.rb
118
+ homepage: https://github.com/lzap/logging-journald
119
+ licenses:
120
+ - MIT
121
+ metadata: {}
122
+ post_install_message:
123
+ rdoc_options: []
124
+ require_paths:
125
+ - lib
126
+ required_ruby_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: 2.1.0
131
+ required_rubygems_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ requirements: []
137
+ rubyforge_project:
138
+ rubygems_version: 2.6.11
139
+ signing_key:
140
+ specification_version: 4
141
+ summary: Journald appender for logging gem
142
+ test_files:
143
+ - test/test_appenders.rb