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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: facbc1ed0842610f785cefd1744337d8f76c282f
4
- data.tar.gz: 3f90384e426a5009ba0dab5dfd412572e1407946
3
+ metadata.gz: 9687426a5dfa6a08d6911f0039a2b96baf58f59b
4
+ data.tar.gz: bbd7f7f9ef41c560dbaff136dcbf7796c7785495
5
5
  SHA512:
6
- metadata.gz: f269abff54386cb0cfadbbadffec2125e782c8d91e9093850c546fa369b59273ff3a694d1925651c7f72bc961c8944eb5046e59084a92b9f8c8dd856defe58ca
7
- data.tar.gz: 4d41970f8f8bb429ef8d1067ab65b6c0112c4572caf02daa6414ff4a00cc55911109a2268b2e7a32edc0d0f3ac68384375ec6dc20592cf65872fe13972f45fb9
6
+ metadata.gz: 6e95eb9a3d24918e802228d5789916ffff5992182a33e4abf1f20fffbf11fc6159b6c394f44e3f34e52060c3b76721ba717a306d3a3976ab7ac569d870985e50
7
+ data.tar.gz: a995a08142c11a182ab6d8025b82aaf0b1b3d3d1b5d348d194fcaf845b2908e68346bf74abd190560e0fa4ce29d36e2f8d8ad544de10f4198468d247137dde79
data/.gitignore CHANGED
@@ -21,6 +21,7 @@ tmp
21
21
  *.a
22
22
  mkmf.log
23
23
  Makefile
24
+ .idea/
24
25
  *.iml
25
26
  *.ipr
26
27
  *.iws
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # journald-logger
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/journald-logger.svg)](http://badge.fury.io/rb/journald-logger)
4
+ [![Reference Status](https://www.versioneye.com/ruby/journald-logger/reference_badge.svg)](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::TracerLogger.new('gandalf') # tracing logger, logs caller's file, line number and function name
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
@@ -1,6 +1,6 @@
1
1
  lib = File.expand_path('../lib', __FILE__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'journald/logger/version'
3
+ require 'journald/modules/version'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'journald-logger'
@@ -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
@@ -1,102 +1,10 @@
1
1
  require 'logger'
2
2
  require 'journald/native'
3
3
 
4
- require_relative 'logger/version'
5
- require_relative 'logger/exceptionable'
6
- require_relative 'logger/loggable'
7
- require_relative 'logger/sysloggable'
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 'tracer_logger'
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
@@ -1,5 +1,5 @@
1
1
  module Journald
2
2
  class Logger
3
- VERSION = '1.0.0'
3
+ VERSION = '1.0.1'
4
4
  end
5
5
  end
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.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-20 00:00:00.000000000 Z
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/logger/exceptionable.rb
70
- - lib/journald/logger/loggable.rb
71
- - lib/journald/logger/sysloggable.rb
72
- - lib/journald/logger/version.rb
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.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