logfmtr 0.0.3

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 146cc26f000667e7b9b0e2f1bea127c978cb1779
4
+ data.tar.gz: e33b40c56b32aa4e8f2eda70a2739678e51e5337
5
+ SHA512:
6
+ metadata.gz: 75fd326021bec88056e151f8060d483abe0b2c02d606105dde69ffbca783c0b5639e6ca1861b3eeab3d5255c3f7f58a9cc61b01e227f5473b003e59cf16a7b60
7
+ data.tar.gz: f2a43274958e767f8b3dee197bfca8b19efc3f776c286be8c801cf352b7f55a403dc5cec166155d64b75d828a8ccf676bad7dd5f9165f1017c1f0d91323f263e
@@ -0,0 +1,2 @@
1
+ pkg/
2
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'bundler'
4
+
5
+ gemspec
@@ -0,0 +1,67 @@
1
+ # logfmtr
2
+ The default ruby logger (`require 'logger'`) outputs in this format:
3
+ ```
4
+ I, [2015-07-01T11:47:45.157173 #29367] INFO -- : some message here (StandardError)
5
+ ```
6
+ This provides a replacement for the default Logger::Formatter class, and it formats logs in key=value format.
7
+
8
+ Logs a hash as:
9
+ ```
10
+ { one: 1, two: 2 } => one=1 two=2
11
+ ```
12
+ Everything else as:
13
+ ```
14
+ => msg="your message here"
15
+ ```
16
+ ## Usage
17
+ ### Example logging error
18
+ Errors have their own `.to_s` implementation.
19
+ ```ruby
20
+ require 'logger'
21
+ require 'logfmtr'
22
+
23
+ logger = Logger.new($stdout)
24
+ logger.formatter = Logfmtr::LogfmtLogger.new
25
+
26
+ begin
27
+ raise StandardError.new('some output')
28
+ rescue => e
29
+ logger.error e
30
+ end
31
+
32
+ # output
33
+ # level=ERROR datetime="2015-07-01 08:29:52" -0500 progname= msg="some output"
34
+ ```
35
+ ### Example logging error with a custom datetime format
36
+ ```ruby
37
+ require 'logger'
38
+ require 'logfmtr'
39
+
40
+ logger = Logger.new($stdout)
41
+ logger.formatter = Logfmtr::LogfmtLogger.new("%Y-%m-%d %H:%M %Z")
42
+
43
+ begin
44
+ raise StandardError.new('some output')
45
+ rescue => e
46
+ logger.error e
47
+ end
48
+
49
+ # output
50
+ # level=ERROR datetime="2015-07-01 08:29 CDT" progname= msg="some output"
51
+ ```
52
+ ### Example logging hash
53
+ It pulls out hash values into their own key=value pairs in logfmt.
54
+ ```ruby
55
+ require 'logger'
56
+ require 'logfmtr'
57
+
58
+ logger = Logger.new($stdout)
59
+ logger.formatter = Logfmtr::LogfmtLogger.new
60
+
61
+ logger.info({ one: 1, two: 2 })
62
+
63
+ # output
64
+ # level=INFO datetime="2015-07-01 08:29 CDT" progname= one=1 two=2
65
+ ```
66
+ ### Note about datetime_format
67
+ The default datetime_format in Logger::Formatter appears to be `"%Y-%m-%d %H:%M:%S %z"`. When you set your `logger.datetime_format=`, it does not get used by the formatter class. Logger::Formatter appears to have its own default. This gem makes that explicit.
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
7
+ task :test => :spec
@@ -0,0 +1 @@
1
+ require 'logfmtr/base'
@@ -0,0 +1,41 @@
1
+ module Logfmtr
2
+ class LogfmtLogger
3
+ def initialize(datetime_format=nil)
4
+ @datetime_format = datetime_format || "%Y-%m-%d %H:%M:%S %z"
5
+ end
6
+
7
+ def call(severity, datetime, progname, msg)
8
+ if msg.is_a? Hash
9
+ msg_str = logfmtify_hash(msg)
10
+ else
11
+ msg_str = %Q[msg=#{add_quotes(msg)}]
12
+ end
13
+
14
+ %Q[level=#{severity} datetime="#{datetime.strftime(@datetime_format)}" progname=#{progname} #{msg_str}\n]
15
+ end
16
+
17
+ private
18
+
19
+ def logfmtify_hash(message)
20
+ message.collect do |key, value|
21
+ %Q[#{key}=#{add_quotes(value)}]
22
+ end.join(' ')
23
+ end
24
+
25
+ def add_quotes(message)
26
+ if needs_quotes(message)
27
+ %Q["#{message}"]
28
+ else
29
+ %Q[#{message}]
30
+ end
31
+ end
32
+
33
+ def needs_quotes(message)
34
+ if message.to_s =~ /[^a-zA-Z0-9\-\.]/
35
+ true
36
+ else
37
+ false
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,3 @@
1
+ module Logfmtr
2
+ VERSION = "0.0.3"
3
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $LOAD_PATH << File.expand_path("../lib", __FILE__)
3
+ require "logfmtr/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "logfmtr"
7
+ s.version = Logfmtr::VERSION
8
+ s.licenses = ['WTFPL']
9
+ s.platform = Gem::Platform::RUBY
10
+ s.date = %q{2015-06-30}
11
+ s.authors = ['Archana Sriram']
12
+ s.email = 'creativehandle@gmail.com'
13
+ s.homepage = "https://github.com/arachnid-cb/logfmtr"
14
+ s.summary = %q{a replacement for Logger::Formatter}
15
+ s.description = %q{for formatting logs in logfmt}
16
+
17
+ s.add_dependency "rake", "~> 10.4"
18
+ s.add_development_dependency "rspec", "~> 3.3"
19
+ s.add_development_dependency 'logfmt', '~> 0.0.7'
20
+
21
+ s.files = `git ls-files`.split("\n")
22
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ s.require_paths = ['lib']
24
+ end
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+ require 'logger'
3
+ require 'logfmt'
4
+ require 'stringio'
5
+
6
+ describe Logfmtr::LogfmtLogger do
7
+ it "exists" do
8
+ logfmtr = Logfmtr::LogfmtLogger.new
9
+ expect(logfmtr).to be
10
+ end
11
+
12
+ it "logs using default datetime format" do
13
+ dt_format = default_datetime_format
14
+ expect { log_error(nil) }.to output(%Q[level=ERROR datetime="#{Time.now.strftime(dt_format)}" progname= msg="some output"\n]).to_stdout
15
+ end
16
+
17
+ it "logs using custom datetime format" do
18
+ dt_format = custom_datetime_format
19
+ expect { log_error(dt_format) }.to output(%Q[level=ERROR datetime="#{Time.now.strftime(dt_format)}" progname= msg="some output"\n]).to_stdout
20
+ end
21
+
22
+ it "logs hashes basically" do
23
+ dt_format = default_datetime_format
24
+ expect { log_hash(dt_format) }.to output(%Q[level=INFO datetime="#{Time.now.strftime(dt_format)}" progname= one=1 two=2 three="!@#$$%^&*}"\n]).to_stdout
25
+ end
26
+
27
+ it "logs hashes in logfmt format" do
28
+ dt_format = default_datetime_format
29
+
30
+ output = log_to_buffer do |logger|
31
+ logger.formatter = Logfmtr::LogfmtLogger.new(dt_format)
32
+ logHash = { :foo => "bar", :baz => "hello world" }
33
+ logger.info logHash
34
+ end
35
+
36
+ expectedHash = {"level" => "INFO", "foo" => "bar", "baz" => "hello world"}
37
+ actualHash = Logfmt.parse output
38
+ expect(actualHash).to include(expectedHash)
39
+ end
40
+
41
+ it "puts quotes around values that need them" do
42
+
43
+ end
44
+ end
45
+
46
+ def custom_datetime_format
47
+ "%Y-%m-%d %H:%M %z"
48
+ end
49
+
50
+ def default_datetime_format
51
+ "%Y-%m-%d %H:%M:%S %z"
52
+ end
53
+
54
+ def log_to_buffer
55
+ buffer = StringIO.new
56
+ logger = Logger.new buffer
57
+ yield logger
58
+ buffer.string
59
+ end
60
+
61
+ def log_error(datetime_format)
62
+ begin
63
+ logger = logger_init(datetime_format)
64
+ raise StandardError.new('some output')
65
+ rescue => e
66
+ logger.error e
67
+ end
68
+ end
69
+
70
+ def log_hash(datetime_format)
71
+ logger = logger_init(datetime_format)
72
+ logger.info ({ one: 1, two: 2, three: "!@#$$%^&*}" })
73
+ end
74
+
75
+ def logger_init(datetime_format)
76
+ logger = Logger.new($stdout)
77
+ logger.formatter = Logfmtr::LogfmtLogger.new(datetime_format)
78
+ logger
79
+ end
@@ -0,0 +1 @@
1
+ require 'logfmtr'
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logfmtr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Archana Sriram
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '10.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '10.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: logfmt
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.0.7
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.0.7
55
+ description: for formatting logs in logfmt
56
+ email: creativehandle@gmail.com
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - ".gitignore"
62
+ - Gemfile
63
+ - README.md
64
+ - Rakefile
65
+ - lib/logfmtr.rb
66
+ - lib/logfmtr/base.rb
67
+ - lib/logfmtr/version.rb
68
+ - logfmtr.gemspec
69
+ - spec/lib/logfmtr_spec.rb
70
+ - spec/spec_helper.rb
71
+ homepage: https://github.com/arachnid-cb/logfmtr
72
+ licenses:
73
+ - WTFPL
74
+ metadata: {}
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 2.4.6
92
+ signing_key:
93
+ specification_version: 4
94
+ summary: a replacement for Logger::Formatter
95
+ test_files:
96
+ - spec/lib/logfmtr_spec.rb
97
+ - spec/spec_helper.rb