dima_app_logger 0.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.
File without changes
@@ -0,0 +1 @@
1
+ require File.dirname(__FILE__) + '/app_logger/logger'
@@ -0,0 +1,101 @@
1
+ require 'fileutils'
2
+ require 'logger'
3
+
4
+ module Dima
5
+ class AppLogger
6
+ attr_accessor :_options
7
+
8
+ def initialize(options = {})
9
+ self._options = {}
10
+ self._options[:root] = options[:root]
11
+ self._options[:env] = options[:env]
12
+ self._options[:name] = options[:name] || ENV["APP_LOGGER_NAME"]
13
+ if defined?(Rails)
14
+ self._options[:root] ||= Rails.root
15
+ self._options[:env] ||= Rails.env
16
+ end
17
+ self._options[:env] ||= "development"
18
+ self._options[:root] ||= Dir.pwd
19
+ _expire!
20
+ end
21
+
22
+ def _logger
23
+ unless @logger
24
+ @logger = if _options[:env] == "test"
25
+ _create_test_logger
26
+ elsif ENV["_"] =~ /irb/ || ENV["APP_LOGGER_STDOUT"]
27
+ _create_stdout_logger
28
+ else
29
+ _create_app_logger
30
+ end
31
+ end
32
+ @logger
33
+ end
34
+
35
+ def _create_app_logger
36
+ name = _options[:env] + "." + (_options[:name] && "#{_options[:name]}.").to_s + _options[:pid].to_s + ".log"
37
+ name = File.join(self._options[:root], "log", _date_string, name)
38
+ _mkdir(_log_file)
39
+ AppLoggerInstance.new(name)
40
+ end
41
+
42
+ def _create_test_logger
43
+ name = File.join(_options[:root], "log", "test.log")
44
+ _mkdir(name)
45
+ AppLoggerInstance.new(name)
46
+ end
47
+
48
+ def _create_stdout_logger
49
+ AppStdoutLoggerInstance.new
50
+ end
51
+
52
+ def _expired?
53
+ tm = Time.now.utc
54
+ rs = _options[:pid] != Process.pid ||
55
+ _options[:time].day != tm.day ||
56
+ _options[:time].month != tm.month ||
57
+ _options[:time].year != tm.year
58
+ tm = nil
59
+ rs
60
+ end
61
+
62
+ def _expire!
63
+ self._options[:pid] = Process.pid
64
+ self._options[:time] = Time.now.utc
65
+ if @logger
66
+ @logger.close if @logger.respond_to?(:close)
67
+ @logger = nil
68
+ end
69
+ end
70
+
71
+ def _date_string
72
+ _options[:time].strftime("%Y%m%d")
73
+ end
74
+
75
+ def _mkdir(path)
76
+ FileUtils.mkdir_p(File.dirname(path))
77
+ end
78
+
79
+ def method_missing(method, *args, &block)
80
+ puts method.to_s
81
+ _expire! if _expired?
82
+ _logger.__send__(method, *args, &block)
83
+ end
84
+ end
85
+
86
+ class AppLoggerInstance < ::Logger
87
+ def format_message(level, time, progname, msg)
88
+ tm = time.utc.strftime("%Y/%m/%d %H:%M:%S") + "." + ("%.03d" % (time.usec / 1000))
89
+ "#{tm} UTC [#{level.split(//)[0]}] -- #{msg}\n"
90
+ end
91
+ end
92
+
93
+ class AppStdoutLoggerInstance < ::Logger
94
+ def initialize
95
+ super(STDOUT)
96
+ end
97
+ def format_message(level, time, progname, msg)
98
+ msg.to_s
99
+ end
100
+ end
101
+ end
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dima_app_logger
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Dmitry Galinsky
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-12-22 00:00:00 +03:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rr
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id002
49
+ description: Application logger
50
+ email: dima.exe@gmail.com
51
+ executables: []
52
+
53
+ extensions: []
54
+
55
+ extra_rdoc_files:
56
+ - README.rdoc
57
+ files:
58
+ - README.rdoc
59
+ - lib/app_logger/logger.rb
60
+ - lib/app_logger.rb
61
+ has_rdoc: true
62
+ homepage: https://github.com/dima-exe/app_logger
63
+ licenses: []
64
+
65
+ post_install_message:
66
+ rdoc_options:
67
+ - --line-numbers
68
+ - --main
69
+ - README.rdoc
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ hash: 3
78
+ segments:
79
+ - 0
80
+ version: "0"
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ requirements: []
91
+
92
+ rubyforge_project:
93
+ rubygems_version: 1.3.7
94
+ signing_key:
95
+ specification_version: 3
96
+ summary: Application logger
97
+ test_files: []
98
+