journald-logger 1.0.0 → 1.0.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/.gitignore +1 -0
- data/README.md +28 -1
- data/journald-logger.gemspec +1 -1
- data/lib/journald/classes/logger.rb +93 -0
- data/lib/journald/classes/trace_logger.rb +40 -0
- data/lib/journald/logger.rb +6 -98
- data/lib/journald/{logger → modules}/exceptionable.rb +0 -0
- data/lib/journald/{logger → modules}/loggable.rb +0 -0
- data/lib/journald/{logger → modules}/sysloggable.rb +0 -0
- data/lib/journald/{logger → modules}/version.rb +1 -1
- metadata +9 -8
- data/lib/journald/tracer_logger.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9687426a5dfa6a08d6911f0039a2b96baf58f59b
|
4
|
+
data.tar.gz: bbd7f7f9ef41c560dbaff136dcbf7796c7785495
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e95eb9a3d24918e802228d5789916ffff5992182a33e4abf1f20fffbf11fc6159b6c394f44e3f34e52060c3b76721ba717a306d3a3976ab7ac569d870985e50
|
7
|
+
data.tar.gz: a995a08142c11a182ab6d8025b82aaf0b1b3d3d1b5d348d194fcaf845b2908e68346bf74abd190560e0fa4ce29d36e2f8d8ad544de10f4198468d247137dde79
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# journald-logger
|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/journald-logger)
|
4
|
+
[](https://www.versioneye.com/ruby/journald-logger/references)
|
5
|
+
|
3
6
|
A Logger drop-in replacement that logs directly to systemd-journal with some additional features
|
4
7
|
|
5
8
|
## Usage
|
@@ -8,7 +11,7 @@ A Logger drop-in replacement that logs directly to systemd-journal with some add
|
|
8
11
|
require 'journald/logger'
|
9
12
|
|
10
13
|
logger = Journald::Logger.new('gandalf') # simple logger, sets SYSLOG_IDENTIFIER to 'gandalf'
|
11
|
-
logger = Journald::
|
14
|
+
logger = Journald::TraceLogger.new('gandalf') # tracing logger, logs caller's file, line number and function name
|
12
15
|
```
|
13
16
|
|
14
17
|
## Logger replacement
|
@@ -77,6 +80,30 @@ logger.log_err 'Error'
|
|
77
80
|
logger.log_debug 'Debug'
|
78
81
|
```
|
79
82
|
|
83
|
+
## Exception logging
|
84
|
+
|
85
|
+
```ruby
|
86
|
+
begin
|
87
|
+
raise "Aw, snap!"
|
88
|
+
rescue => e
|
89
|
+
logger.exception e # log exception with LOG_CRIT level by default
|
90
|
+
logger.exception e, severity: Logger::WARN # use Logger severity
|
91
|
+
logger.exception e, priority: Journald::LOG_ALERT # use Syslog priority
|
92
|
+
end
|
93
|
+
```
|
94
|
+
|
95
|
+
Exception logger automatically fills the following fields:
|
96
|
+
|
97
|
+
```
|
98
|
+
EXCEPTION_CLASS=ExceptionRealClassName
|
99
|
+
EXCEPTION_MESSAGE=Original exception message
|
100
|
+
BACKTRACE=full backtrace
|
101
|
+
CAUSE=exception cause (Ruby >= 2.1)
|
102
|
+
GEM_LOGGER_MESSAGE_TYPE=Exception
|
103
|
+
```
|
104
|
+
|
105
|
+
In Ruby 2.1 it also tries to log ```CODE_LINE```, ```CODE_FILE``` and ```CODE_FUNC``` and try to recurse into Cause and log it into a separate message with ```GEM_LOGGER_MESSAGE_TYPE=ExceptionCause```
|
106
|
+
|
80
107
|
## License
|
81
108
|
|
82
109
|
MIT, see LICENSE.txt
|
data/journald-logger.gemspec
CHANGED
@@ -0,0 +1,93 @@
|
|
1
|
+
module Journald
|
2
|
+
class Logger
|
3
|
+
include Exceptionable
|
4
|
+
include Loggable
|
5
|
+
include Sysloggable
|
6
|
+
|
7
|
+
def initialize(progname = nil, tags = {})
|
8
|
+
@tags = tags
|
9
|
+
@logger = Native
|
10
|
+
self.progname = progname
|
11
|
+
end
|
12
|
+
|
13
|
+
def progname
|
14
|
+
tag_value(:syslog_identifier)
|
15
|
+
end
|
16
|
+
|
17
|
+
def progname=(value)
|
18
|
+
tag(:syslog_identifier, value)
|
19
|
+
end
|
20
|
+
|
21
|
+
# systemd-journal style
|
22
|
+
|
23
|
+
# send systemd-journal message
|
24
|
+
def send(hash)
|
25
|
+
hash_to_send = @tags.merge(hash)
|
26
|
+
real_send(hash_to_send)
|
27
|
+
end
|
28
|
+
|
29
|
+
def print(priority, message)
|
30
|
+
send({
|
31
|
+
priority: priority,
|
32
|
+
message: message,
|
33
|
+
})
|
34
|
+
end
|
35
|
+
|
36
|
+
# add tags
|
37
|
+
|
38
|
+
# add tag to all log messages
|
39
|
+
def tag(key, value)
|
40
|
+
@tags[key] = value
|
41
|
+
|
42
|
+
if block_given?
|
43
|
+
yield
|
44
|
+
untag(key)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# get tag value
|
49
|
+
def tag_value(key)
|
50
|
+
@tags[key]
|
51
|
+
end
|
52
|
+
|
53
|
+
# stop adding the tag
|
54
|
+
def untag(key)
|
55
|
+
@tags.delete(key)
|
56
|
+
end
|
57
|
+
|
58
|
+
protected
|
59
|
+
|
60
|
+
# used internally by exception() and TraceLogger
|
61
|
+
def tag_trace_location(location)
|
62
|
+
tag :code_file, location.path
|
63
|
+
tag :code_line, location.lineno
|
64
|
+
tag :code_func, location.label
|
65
|
+
|
66
|
+
if block_given?
|
67
|
+
yield
|
68
|
+
untag_trace_location
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def untag_trace_location
|
73
|
+
untag :code_file
|
74
|
+
untag :code_line
|
75
|
+
untag :code_func
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def real_send(hash)
|
81
|
+
hash = hash.delete_if { |_, v| v.nil? }
|
82
|
+
|
83
|
+
array_to_send = hash.map do |k,v|
|
84
|
+
key = k.to_s.upcase
|
85
|
+
value = v.to_s
|
86
|
+
|
87
|
+
"#{key}=#{value}"
|
88
|
+
end
|
89
|
+
|
90
|
+
@logger.send(*array_to_send)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Journald
|
2
|
+
class TraceLogger
|
3
|
+
def initialize(progname = nil, tags = {})
|
4
|
+
@wrapped_logger = Logger.new(progname, tags)
|
5
|
+
end
|
6
|
+
|
7
|
+
PASSTHROUGH_METHODS = [
|
8
|
+
:tag,
|
9
|
+
:tag_value,
|
10
|
+
:untag,
|
11
|
+
:progname,
|
12
|
+
:'progname=',
|
13
|
+
:level,
|
14
|
+
:'level=',
|
15
|
+
]
|
16
|
+
|
17
|
+
METHODS = (
|
18
|
+
Journald::Logger. public_instance_methods(false) +
|
19
|
+
Journald::Logger::Exceptionable.public_instance_methods(false) +
|
20
|
+
Journald::Logger::Loggable. public_instance_methods(false) +
|
21
|
+
Journald::Logger::Sysloggable. public_instance_methods(false)
|
22
|
+
)
|
23
|
+
|
24
|
+
METHODS.each do |method|
|
25
|
+
if PASSTHROUGH_METHODS.include? method
|
26
|
+
define_method(method) do |*args, &block|
|
27
|
+
@wrapped_logger.public_send(method, *args, &block)
|
28
|
+
end
|
29
|
+
else
|
30
|
+
define_method(method) do |*args, &block|
|
31
|
+
@wrapped_logger.__send__(:tag_trace_location, caller_locations[0])
|
32
|
+
@wrapped_logger.public_send(method, *args, &block)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# alias for the old class name
|
39
|
+
TracerLogger = TraceLogger
|
40
|
+
end
|
data/lib/journald/logger.rb
CHANGED
@@ -1,102 +1,10 @@
|
|
1
1
|
require 'logger'
|
2
2
|
require 'journald/native'
|
3
3
|
|
4
|
-
require_relative '
|
5
|
-
require_relative '
|
6
|
-
require_relative '
|
7
|
-
require_relative '
|
4
|
+
require_relative 'modules/version'
|
5
|
+
require_relative 'modules/exceptionable'
|
6
|
+
require_relative 'modules/loggable'
|
7
|
+
require_relative 'modules/sysloggable'
|
8
8
|
|
9
|
-
require_relative '
|
10
|
-
|
11
|
-
module Journald
|
12
|
-
class Logger
|
13
|
-
include Exceptionable
|
14
|
-
include Loggable
|
15
|
-
include Sysloggable
|
16
|
-
|
17
|
-
def initialize(progname = nil, tags = {})
|
18
|
-
@tags = tags
|
19
|
-
@logger = Native
|
20
|
-
self.progname = progname
|
21
|
-
end
|
22
|
-
|
23
|
-
def progname
|
24
|
-
tag_value(:syslog_identifier)
|
25
|
-
end
|
26
|
-
|
27
|
-
def progname=(value)
|
28
|
-
tag(:syslog_identifier, value)
|
29
|
-
end
|
30
|
-
|
31
|
-
# systemd-journal style
|
32
|
-
|
33
|
-
# send systemd-journal message
|
34
|
-
def send(hash)
|
35
|
-
hash_to_send = @tags.merge(hash)
|
36
|
-
real_send(hash_to_send)
|
37
|
-
end
|
38
|
-
|
39
|
-
def print(priority, message)
|
40
|
-
send({
|
41
|
-
priority: priority,
|
42
|
-
message: message,
|
43
|
-
})
|
44
|
-
end
|
45
|
-
|
46
|
-
# add tags
|
47
|
-
|
48
|
-
# add tag to all log messages
|
49
|
-
def tag(key, value)
|
50
|
-
@tags[key] = value
|
51
|
-
|
52
|
-
if block_given?
|
53
|
-
yield
|
54
|
-
untag(key)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
# get tag value
|
59
|
-
def tag_value(key)
|
60
|
-
@tags[key]
|
61
|
-
end
|
62
|
-
|
63
|
-
# stop adding the tag
|
64
|
-
def untag(key)
|
65
|
-
@tags.delete(key)
|
66
|
-
end
|
67
|
-
|
68
|
-
protected
|
69
|
-
|
70
|
-
def tag_trace_location(location)
|
71
|
-
tag :code_file, location.path
|
72
|
-
tag :code_line, location.lineno
|
73
|
-
tag :code_func, location.label
|
74
|
-
|
75
|
-
if block_given?
|
76
|
-
yield
|
77
|
-
untag_trace_location
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def untag_trace_location
|
82
|
-
untag :code_file
|
83
|
-
untag :code_line
|
84
|
-
untag :code_func
|
85
|
-
end
|
86
|
-
|
87
|
-
private
|
88
|
-
|
89
|
-
def real_send(hash)
|
90
|
-
hash = hash.delete_if { |_, v| v.nil? }
|
91
|
-
|
92
|
-
array_to_send = hash.map do |k,v|
|
93
|
-
key = k.to_s.upcase
|
94
|
-
value = v.to_s
|
95
|
-
|
96
|
-
"#{key}=#{value}"
|
97
|
-
end
|
98
|
-
|
99
|
-
@logger.send(*array_to_send)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
9
|
+
require_relative 'classes/logger'
|
10
|
+
require_relative 'classes/trace_logger'
|
File without changes
|
File without changes
|
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: journald-logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anton Smirnov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11
|
11
|
+
date: 2014-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: journald-native
|
@@ -65,12 +65,13 @@ files:
|
|
65
65
|
- README.md
|
66
66
|
- Rakefile
|
67
67
|
- journald-logger.gemspec
|
68
|
+
- lib/journald/classes/logger.rb
|
69
|
+
- lib/journald/classes/trace_logger.rb
|
68
70
|
- lib/journald/logger.rb
|
69
|
-
- lib/journald/
|
70
|
-
- lib/journald/
|
71
|
-
- lib/journald/
|
72
|
-
- lib/journald/
|
73
|
-
- lib/journald/tracer_logger.rb
|
71
|
+
- lib/journald/modules/exceptionable.rb
|
72
|
+
- lib/journald/modules/loggable.rb
|
73
|
+
- lib/journald/modules/sysloggable.rb
|
74
|
+
- lib/journald/modules/version.rb
|
74
75
|
homepage: https://github.com/sandfox-im/journald-logger
|
75
76
|
licenses:
|
76
77
|
- MIT
|
@@ -91,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
92
|
version: '0'
|
92
93
|
requirements: []
|
93
94
|
rubyforge_project:
|
94
|
-
rubygems_version: 2.4.
|
95
|
+
rubygems_version: 2.4.3
|
95
96
|
signing_key:
|
96
97
|
specification_version: 4
|
97
98
|
summary: systemd-journal native logger
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module Journald
|
2
|
-
class TracerLogger
|
3
|
-
def initialize(progname = nil, tags = {})
|
4
|
-
@wrapped_logger = Logger.new(progname, tags)
|
5
|
-
end
|
6
|
-
|
7
|
-
def method_missing(meth, *args, &block)
|
8
|
-
super unless @wrapped_logger.respond_to? meth
|
9
|
-
|
10
|
-
@wrapped_logger.__send__(:tag_trace_location, caller_locations[0])
|
11
|
-
@wrapped_logger.__send__(meth, *args, &block)
|
12
|
-
end
|
13
|
-
|
14
|
-
def respond_to_missing?(method_name, include_private = false)
|
15
|
-
@wrapped_logger.respond_to?(method_name, include_private)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|