lokilogger 0.5.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9d31b9a0ca62456df630504045404e80c8fdc08376afc0d6eb420457d9b0745b
4
- data.tar.gz: '0283cd8fe736ecf933699b54d60f31a3e973d232c8794e8cdebff560624d7802'
3
+ metadata.gz: 013c3df35dc258985f0bce263e8b891e77248458501166742e48323faf31a920
4
+ data.tar.gz: d333983151ff4524daedfdc1a5f7a94b6e25e427786dcf1103fba5113ce3adca
5
5
  SHA512:
6
- metadata.gz: 338a081fc21929144d234674eb0cdaf64baf35e8fec2b9f84cf01f58acae1039ef6c9a6fcde6257126aee677ea21a6e4123f30246b9c020711d636955414d36f
7
- data.tar.gz: eee408bb6e620234d75bee583aad338ae1200ce04d185027600bcd3d3ac4ac1bacd168002fc09abdfe52fca48baaee7d0a47d041351b1d29f3ae0f996370c33f
6
+ metadata.gz: 61907a403d311da65316452abf1beba6cc12fd8e98bf9283a576551b696972a42dd2496f77671f2d9491802269ad36153ff2f8fc894e375f505e9aa175847763
7
+ data.tar.gz: 4e392ebaf36816ce9442e6e1fa58b2fcadf68053280e79c0275b58daf89d0786b582a36371705595d19a5579ceaff99b3581583675ff005fdc465e24bcbc9914
data/README.adoc CHANGED
@@ -59,14 +59,15 @@ Start by creating a new logger instance:
59
59
 
60
60
  [source,ruby]
61
61
  ----
62
- # pass url, username, password
63
- logger = Lokilogger.new({url:, log_level: 0, version: "v1", username:, password:, tags: {foo: "bar"}})
62
+ # required: url, log_level, version and tags
63
+ # optional: username and password (if one of them is nil, no auth will be used)
64
+ logger = Lokilogger::Logger.new({url:, log_level: 0, version: "v1", username:, password:, tags: {foo: "bar"}})
64
65
  ----
65
66
 
66
67
  If you need proxy or custom TLS settings, you can optionally pass as well:
67
68
 
68
69
  - ssl_options (link:https://lostisland.github.io/faraday/#/customization/ssl-options[Faraday docs on ssl options])
69
- - proxy_options (link:https://lostisland.github.io/faraday/#/customization/proxy-options[Farady docs on proxy options])
70
+ - proxy_options (link:https://lostisland.github.io/faraday/#/customization/proxy-options[Faraday docs on proxy options])
70
71
 
71
72
  then it's straight forward:
72
73
 
@@ -17,15 +17,13 @@ module Lokilogger
17
17
 
18
18
  Faraday.default_adapter = :async_http
19
19
  @conn = Faraday.new url: @config[:url], headers: {"Content-Type" => "application/json"}, ssl: ssl_options, proxy: proxy_options, request: request_options do |builder|
20
- builder.request :authorization, :basic, @config[:username], @config[:password]
20
+ builder.request :authorization, :basic, @config[:username], @config[:password] if @config[:username] && @config[:password]
21
21
  end
22
22
  end
23
23
 
24
24
  def check_config
25
25
  fail ConfigError, "missing/malformed url in config" if !@config[:url] || @config[:url] !~ %r{^(http|https)://}
26
26
  fail ConfigError, "missing version in config" unless @config[:version]
27
- fail ConfigError, "missing auth username in config" unless @config[:username]
28
- fail ConfigError, "missing auth password in config" unless @config[:password]
29
27
  fail ConfigError, "missing tags in config" unless @config[:tags]
30
28
  fail ConfigError, "missing log_level in config" unless @config[:log_level]
31
29
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lokilogger
4
+ # Default formatter for log messages.
5
+ class Formatter
6
+ Format = "%.1s, [%s #%d] %5s -- %s: %s\n"
7
+ DatetimeFormat = "%Y-%m-%dT%H:%M:%S.%6N"
8
+
9
+ attr_accessor :datetime_format
10
+
11
+ def initialize
12
+ @datetime_format = nil
13
+ end
14
+
15
+ def call severity, time, progname, msg
16
+ format Format, severity, format_datetime(time), Process.pid, severity, progname, msg2str(msg)
17
+ end
18
+
19
+ private
20
+
21
+ def format_datetime time
22
+ time.strftime(@datetime_format || DatetimeFormat)
23
+ end
24
+
25
+ def msg2str msg
26
+ case msg
27
+ when ::String
28
+ msg
29
+ when ::Exception
30
+ "#{msg.message} (#{msg.class})\n#{msg.backtrace.join "\n" if msg.backtrace}"
31
+ else
32
+ msg.inspect
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lokilogger
4
+ # Logging severity.
5
+ module Severity
6
+ # Low-level information, mostly for developers.
7
+ DEBUG = 0
8
+ # Generic (useful) information about system operation.
9
+ INFO = 1
10
+ # A warning.
11
+ WARN = 2
12
+ # A handleable error condition.
13
+ ERROR = 3
14
+ # An unhandleable error that results in a program crash.
15
+ FATAL = 4
16
+ # An unknown message that should always be logged.
17
+ UNKNOWN = 5
18
+
19
+ LEVELS = {"debug" => DEBUG, "info" => INFO, "warn" => WARN, "error" => ERROR, "fatal" => FATAL, "unknown" => UNKNOWN}.freeze
20
+ private_constant :LEVELS
21
+
22
+ def self.coerce severity
23
+ if severity.is_a? Integer
24
+ severity
25
+ else
26
+ key = severity.to_s.downcase
27
+ LEVELS[key] || fail(ArgumentError, "invalid log level: #{severity}")
28
+ end
29
+ end
30
+ end
31
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Main namespace.
4
4
  module Lokilogger
5
- VERSION = "0.5.0"
5
+ VERSION = "1.0.0"
6
6
  end
data/lib/lokilogger.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "lokilogger/formatter"
4
+ require "lokilogger/severity"
3
5
  require "zeitwerk"
4
6
 
5
7
  Zeitwerk::Loader.new.then do |loader|
@@ -14,77 +16,109 @@ module Lokilogger
14
16
  @loader ||= registry.loaders.find { |loader| loader.tag == File.basename(__FILE__, ".rb") }
15
17
  end
16
18
 
17
- def self.new config
18
- @client = Lokilogger::Client.new config
19
- self
20
- end
19
+ class Logger
20
+ include Severity
21
21
 
22
- def self.debug(*args)
23
- message "debug", args
24
- end
22
+ def initialize config
23
+ @client = Lokilogger::Client.new config
24
+ @default_formatter = Formatter.new
25
+ end
25
26
 
26
- def self.debug?
27
- true
28
- end
27
+ def datetime_format= datetime_format
28
+ @default_formatter.datetime_format = datetime_format
29
+ end
29
30
 
30
- def self.info(*args)
31
- message "info", args
32
- end
31
+ def datetime_format
32
+ @default_formatter.datetime_format
33
+ end
33
34
 
34
- def self.info?
35
- true
36
- end
35
+ attr_accessor :formatter
37
36
 
38
- def self.warn(*args)
39
- message "warn", args
40
- end
37
+ def debug(*args)
38
+ message "debug", args
39
+ end
41
40
 
42
- def self.warn?
43
- true
44
- end
41
+ def debug?
42
+ @client.log_level <= DEBUG
43
+ end
45
44
 
46
- def self.error(*args)
47
- message "error", args
48
- end
45
+ def debug!
46
+ @client.log_level = DEBUG
47
+ end
49
48
 
50
- def self.error?
51
- true
52
- end
49
+ def info(*args)
50
+ message "info", args
51
+ end
53
52
 
54
- def self.fatal(*args)
55
- message "fatal", args
56
- end
53
+ def info?
54
+ @client.log_level <= INFO
55
+ end
57
56
 
58
- def self.fatal?
59
- true
60
- end
57
+ def info!
58
+ @client.log_level = INFO
59
+ end
61
60
 
62
- def self.unknown(*args)
63
- message "unknown", args
64
- end
61
+ def warn(*args)
62
+ message "warn", args
63
+ end
65
64
 
66
- def self.unknown?
67
- true
68
- end
65
+ def warn?
66
+ @client.log_level <= WARN
67
+ end
69
68
 
70
- def self.level= level
71
- @client.log_level = level
72
- end
69
+ def warn!
70
+ @client.log_level = WARN
71
+ end
73
72
 
74
- def self.level
75
- @client.log_level
76
- end
73
+ def error(*args)
74
+ message "error", args
75
+ end
77
76
 
78
- def self.formatter
79
- end
77
+ def error?
78
+ @client.log_level <= ERROR
79
+ end
80
80
 
81
- def self.formatter=(*args)
82
- end
81
+ def error!
82
+ @client.log_level = ERROR
83
+ end
84
+
85
+ def fatal(*args)
86
+ message "fatal", args
87
+ end
88
+
89
+ def fatal?
90
+ @client.log_level <= FATAL
91
+ end
92
+
93
+ def fatal!
94
+ @client.log_level = FATAL
95
+ end
96
+
97
+ def unknown(*args)
98
+ message "unknown", args
99
+ end
100
+
101
+ def unknown?
102
+ @client.log_level <= UNKNOWN
103
+ end
104
+
105
+ def unknown!
106
+ @client.log_level = UNKNOWN
107
+ end
108
+
109
+ def level= severity
110
+ @client.log_level = Severity.coerce severity
111
+ end
112
+
113
+ def level
114
+ @client.log_level
115
+ end
83
116
 
84
- def self.message(severity, *args)
85
- message = args[0][0]
86
- extra_tags = args[0][1] if args[0].count > 1
117
+ def message(severity, *args)
118
+ message = args[0][0]
119
+ extra_tags = args[0][1] if args[0].count > 1
87
120
 
88
- @client.request severity, message, extra_tags
121
+ @client.request severity, message, extra_tags
122
+ end
89
123
  end
90
124
  end
data/lokilogger.gemspec CHANGED
@@ -15,9 +15,6 @@ Gem::Specification.new do |spec|
15
15
 
16
16
  spec.metadata = {"label" => "lokilogger", "rubygems_mfa_required" => "true"}
17
17
 
18
- #spec.signing_key = Gem.default_key_path
19
- #spec.cert_chain = [Gem.default_cert_path]
20
-
21
18
  spec.required_ruby_version = "~> 3.2"
22
19
  spec.add_dependency "async", "~> 2.6", ">= 2.6.5"
23
20
  spec.add_dependency "async-http-faraday", "~> 0.12.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lokilogger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nils Bartels
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-03 00:00:00.000000000 Z
11
+ date: 2023-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async
@@ -106,6 +106,8 @@ files:
106
106
  - lib/lokilogger.rb
107
107
  - lib/lokilogger/client.rb
108
108
  - lib/lokilogger/error.rb
109
+ - lib/lokilogger/formatter.rb
110
+ - lib/lokilogger/severity.rb
109
111
  - lib/lokilogger/version.rb
110
112
  - lokilogger.gemspec
111
113
  homepage: https://gitlab.com/sukunai/lokilogger