journald-logger 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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