zog 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/zog/version.rb +3 -0
  3. data/lib/zog.rb +175 -0
  4. metadata +60 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 52d8aa35adbf7eed8579bce46fb9b7baeffa0682
4
+ data.tar.gz: a570f8e1ee6325bc7ff5eb423995829a0e4d4d91
5
+ SHA512:
6
+ metadata.gz: 2299f8bfe79a5231e466fc8b9f337e0ca5be3de1a542ae01651770ed40ca6729d97f208a30a2b3fe3740eeb7583724aaaccff8eace57719cd019acda0da1615b
7
+ data.tar.gz: 60b83c775285cc718a2a28054ce74f1469ed1ad4180372cadfa7f17aeba9e45f5c65de0665906b02ee1ad65a4217ddfcce6eb22c2abf0bdcfa69a3adbbfdda47
@@ -0,0 +1,3 @@
1
+ module Zog
2
+ VERSION = "0.4.0"
3
+ end
data/lib/zog.rb ADDED
@@ -0,0 +1,175 @@
1
+ # Zog - an alternate logger
2
+ # (C) 2012, 2014, 2016 Lyjia
3
+ # http://www.github.com/lyjia
4
+ # version 0.4
5
+
6
+ class Zog
7
+
8
+ if defined?(Rails)
9
+ @@log_dir = "#{Rails.root}/log"
10
+ else
11
+ @@log_dir = "#{Dir.pwd}/log"
12
+ end
13
+
14
+ Dir.mkdir(@@log_dir) unless File.exist?(@@log_dir)
15
+ @@log_filename = "#{@@log_dir}/Zog.log"
16
+
17
+ @@log = File.open(@@log_filename, 'a')
18
+ @@silenced = false
19
+
20
+ LOG_CATS = { debug: "[35m",
21
+ info: "[34m",
22
+
23
+ warn: "[33m",
24
+ error: "[31m",
25
+ fatal: "[31;1m",
26
+ other: "[32m" }
27
+
28
+ ESC_PREFIX = "\e"
29
+ COLOR_NORMAL = "[0m"
30
+ TYPES = [:both, :display, :log]
31
+
32
+ @@allowed_disp = LOG_CATS.keys
33
+ @@allowed_log = LOG_CATS.keys
34
+
35
+
36
+ # User-facing functions
37
+ def self.allow_only(type = :both, cats = [])
38
+ raise ArgumentError, "Invalid type #{type}, must be one of these symbols: "<<TYPES.join(" ") unless TYPES.include?(type)
39
+
40
+ cats.each do |c|
41
+ raise ArgumentError, "Invalid category #{c}, must be one of these symbols: "<<LOG_CATS.keys.join(" ") unless LOG_CATS.keys.include?(c)
42
+ end
43
+
44
+ if type == :both || type == :display
45
+ @@allowed_disp = []
46
+ @@allowed_disp << cats
47
+ @@allowed_disp.flatten!
48
+ end
49
+
50
+ if type == :both || type == :log
51
+ @@allowed_log = []
52
+ @@allowed_log << cats
53
+ @@allowed_log.flatten!
54
+ end
55
+
56
+ self.info("Allowed categories changed. Display: #{@@allowed_disp}, log: #{@@allowed_log}")
57
+
58
+ end
59
+
60
+
61
+ def self.deny(type = :both, cats = [])
62
+ raise ArgumentError, "Invalid type, must be one of these symbols: "<<TYPES.join(" ") unless TYPES.include?(type)
63
+
64
+ cats.each do |c|
65
+ if type == :both || type == :display
66
+ @@allowed_disp.delete(c)
67
+ end
68
+
69
+ if type == :both || type == :log
70
+ @@allowed_log.delete(c)
71
+ end
72
+ end
73
+
74
+ self.info("Allowed categories changed. Display: #{@@allowed_disp}, log: #{@@allowed_log}")
75
+ end
76
+
77
+
78
+ def self.reset
79
+ @@allowed_disp = LOG_CATS.keys
80
+ @@allowed_log = LOG_CATS.keys
81
+ self.info("Allowed categories changed. Display: #{@@allowed_disp}, log: #{@@allowed_log}")
82
+ end
83
+
84
+
85
+ def self.shut_up!
86
+ Zog.debug("Shutting up...")
87
+ @@silenced = true
88
+ end
89
+
90
+
91
+ def self.talk_again!
92
+ @@silenced = false
93
+ Zog.debug("I can talk again!")
94
+ end
95
+
96
+
97
+ # responds to Zog.info, Zog.error, etc
98
+ def self.method_missing(meth, *args, &block)
99
+
100
+ #$stderr.puts "MM: Is meth '#{meth}' a valid word from #{LOG_CATS.keys}? (#{LOG_CATS.keys.include?(meth)})"
101
+ meth = meth.downcase.to_sym
102
+
103
+ if LOG_CATS.keys.include?(meth)
104
+ self::msg(meth, args[0])
105
+ else
106
+ super
107
+ end
108
+
109
+ end
110
+
111
+
112
+ private
113
+
114
+ # internal functions
115
+ def self.format_message(severity, msg)
116
+ hello = self::get_my_caller()
117
+ ["#{Time.now.strftime("%Y%m%d-%H%M%S")} #{severity} #{hello}():", "#{msg}"]
118
+ end
119
+
120
+
121
+ def self.colorize(severity, msg)
122
+
123
+ color = LOG_CATS[severity.downcase.to_sym]
124
+
125
+ col = "#{ESC_PREFIX}#{color}"
126
+ if [:error, :fatal].include?(severity)
127
+ white = "#{ESC_PREFIX}[37;1m"
128
+ else
129
+ white = "#{ESC_PREFIX}#{COLOR_NORMAL}"
130
+ end
131
+ reset = "#{ESC_PREFIX}#{COLOR_NORMAL}"
132
+
133
+ return "#{col}#{msg[0]} #{white}#{msg[1]}#{reset}"
134
+
135
+ end
136
+
137
+
138
+ def self.msg(level, msg)
139
+ m = Zog::format_message(level, msg)
140
+
141
+ displayer = :puts
142
+ writer = :Zog
143
+
144
+ unless @@silenced == true
145
+
146
+ if @@allowed_disp.include?(level)
147
+ case displayer
148
+ when :puts
149
+ $stderr.puts Zog::colorize(level, m)
150
+ end
151
+ end
152
+
153
+ if @@allowed_log.include?(level)
154
+ case writer
155
+ when :Zog
156
+ @@log.puts m.join(" ")
157
+ end
158
+ end
159
+
160
+ end
161
+
162
+ end
163
+
164
+
165
+ def self.get_my_caller()
166
+ #s = caller.grep(/\/app\//)[2]
167
+ #/in .([^']+)/.match(s)
168
+ #ap caller
169
+ #$1
170
+ step = 3
171
+ caller(step+1)[0][/`.*'/][1..-2]
172
+ end
173
+
174
+
175
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zog
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0
5
+ platform: ruby
6
+ authors:
7
+ - Lyjia
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-06-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ description: Colorizing, introspective, independent logging library.
28
+ email:
29
+ - tom@tomcorelis.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - lib/zog.rb
35
+ - lib/zog/version.rb
36
+ homepage: ''
37
+ licenses:
38
+ - MIT
39
+ metadata: {}
40
+ post_install_message:
41
+ rdoc_options: []
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubyforge_project:
56
+ rubygems_version: 2.4.5.1
57
+ signing_key:
58
+ specification_version: 4
59
+ summary: Logging library for Ruby projects with colorization and caller introspection
60
+ test_files: []