logging 2.1.0 → 2.2.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 +4 -4
- data/.travis.yml +6 -6
- data/History.txt +15 -0
- data/LICENSE +22 -0
- data/README.md +20 -41
- data/examples/layouts.rb +1 -1
- data/examples/lazy.rb +1 -1
- data/examples/reusing_layouts.rb +51 -0
- data/lib/logging.rb +52 -3
- data/lib/logging/appender.rb +2 -2
- data/lib/logging/appenders/console.rb +1 -1
- data/lib/logging/appenders/rolling_file.rb +11 -1
- data/lib/logging/color_scheme.rb +1 -1
- data/lib/logging/diagnostic_context.rb +99 -74
- data/lib/logging/layout.rb +46 -1
- data/lib/logging/layouts/parseable.rb +7 -4
- data/lib/logging/layouts/pattern.rb +4 -2
- data/lib/logging/log_event.rb +18 -11
- data/lib/logging/logger.rb +2 -2
- data/lib/logging/rails_compat.rb +4 -13
- data/lib/logging/version.rb +1 -1
- data/logging.gemspec +32 -33
- data/test/layouts/test_json.rb +13 -0
- data/test/layouts/test_pattern.rb +15 -2
- data/test/layouts/test_yaml.rb +14 -0
- data/test/test_layout.rb +40 -0
- data/test/test_log_event.rb +8 -0
- data/test/test_logging.rb +28 -0
- data/test/test_mapped_diagnostic_context.rb +15 -6
- data/test/test_nested_diagnostic_context.rb +6 -1
- metadata +8 -6
data/lib/logging/layout.rb
CHANGED
@@ -41,7 +41,8 @@ class Layout
|
|
41
41
|
when :inspect, :yaml, :json; f
|
42
42
|
else :string end
|
43
43
|
|
44
|
-
self.backtrace
|
44
|
+
self.backtrace = opts.fetch(:backtrace, ::Logging.backtrace)
|
45
|
+
self.utc_offset = opts.fetch(:utc_offset, ::Logging.utc_offset)
|
45
46
|
end
|
46
47
|
|
47
48
|
# call-seq:
|
@@ -63,6 +64,50 @@ class Layout
|
|
63
64
|
attr_reader :backtrace
|
64
65
|
alias :backtrace? :backtrace
|
65
66
|
|
67
|
+
# Set the UTC offset used when formatting time values. If left unset, the
|
68
|
+
# default local time zone will be used for time values. This method accepts
|
69
|
+
# the `utc_offset` format supported by the `Time#localtime` method in Ruby.
|
70
|
+
#
|
71
|
+
# Passing "UTC" or `0` as the UTC offset will cause all times to be reported
|
72
|
+
# in the UTC timezone.
|
73
|
+
#
|
74
|
+
# layout.utc_offset = "-07:00" # Mountain Standard Time in North America
|
75
|
+
# layout.utc_offset = "+01:00" # Central European Time
|
76
|
+
# layout.utc_offset = "UTC" # UTC
|
77
|
+
# layout.utc_offset = 0 # UTC
|
78
|
+
#
|
79
|
+
def utc_offset=( value )
|
80
|
+
@utc_offset = case value
|
81
|
+
when nil; nil
|
82
|
+
when "UTC", "GMT", 0; 0
|
83
|
+
else
|
84
|
+
Time.now.localtime(value)
|
85
|
+
value
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# Returns the UTC offset.
|
90
|
+
attr_reader :utc_offset
|
91
|
+
|
92
|
+
# Internal: Helper method that applies the UTC offset to the given `time`
|
93
|
+
# instance. A new Time is returned that is equivalent to the original `time`
|
94
|
+
# but pinned to the timezone given by the UTC offset.
|
95
|
+
#
|
96
|
+
# If a UTC offset has not been set, then the original `time` instance is
|
97
|
+
# returned unchanged.
|
98
|
+
#
|
99
|
+
def apply_utc_offset( time )
|
100
|
+
return time if utc_offset.nil?
|
101
|
+
|
102
|
+
time = time.dup
|
103
|
+
if utc_offset == 0
|
104
|
+
time.utc
|
105
|
+
else
|
106
|
+
time.localtime(utc_offset)
|
107
|
+
end
|
108
|
+
time
|
109
|
+
end
|
110
|
+
|
66
111
|
# call-seq:
|
67
112
|
# format( event )
|
68
113
|
#
|
@@ -177,8 +177,9 @@ module Logging::Layouts
|
|
177
177
|
#
|
178
178
|
# Creates a new Parseable layout using the following options:
|
179
179
|
#
|
180
|
-
# :style
|
181
|
-
# :items
|
180
|
+
# :style => :json or :yaml
|
181
|
+
# :items => %w[timestamp level logger message]
|
182
|
+
# :utc_offset => "-06:00" or -21600 or "UTC"
|
182
183
|
#
|
183
184
|
def initialize( opts = {} )
|
184
185
|
super
|
@@ -241,9 +242,11 @@ module Logging::Layouts
|
|
241
242
|
else raise ArgumentError, "unknown format style '#@style'" end
|
242
243
|
end
|
243
244
|
|
244
|
-
# Convert the given time
|
245
|
+
# Convert the given `time` into an ISO8601 formatted time string.
|
245
246
|
#
|
246
|
-
def iso8601_format(
|
247
|
+
def iso8601_format( time )
|
248
|
+
value = apply_utc_offset(time)
|
249
|
+
|
247
250
|
str = value.strftime('%Y-%m-%dT%H:%M:%S')
|
248
251
|
str << ('.%06d' % value.usec)
|
249
252
|
|
@@ -164,6 +164,7 @@ module Logging::Layouts
|
|
164
164
|
def self.create_date_format_methods( pl )
|
165
165
|
code = "undef :format_date if method_defined? :format_date\n"
|
166
166
|
code << "def format_date( time )\n"
|
167
|
+
code << "time = apply_utc_offset(time)\n"
|
167
168
|
if pl.date_method.nil?
|
168
169
|
if pl.date_pattern =~ %r/%s/
|
169
170
|
code << "time.strftime('#{pl.date_pattern.gsub('%s','%6N')}')\n"
|
@@ -203,7 +204,8 @@ module Logging::Layouts
|
|
203
204
|
#
|
204
205
|
# :pattern => "[%d] %-5l -- %c : %m\n"
|
205
206
|
# :date_pattern => "%Y-%m-%d %H:%M:%S"
|
206
|
-
# :date_method =>
|
207
|
+
# :date_method => "usec" or "to_s"
|
208
|
+
# :utc_offset => "-06:00" or -21600 or "UTC"
|
207
209
|
# :color_scheme => :default
|
208
210
|
#
|
209
211
|
# If used, :date_method will supersede :date_pattern.
|
@@ -216,7 +218,7 @@ module Logging::Layouts
|
|
216
218
|
#
|
217
219
|
def initialize( opts = {} )
|
218
220
|
super
|
219
|
-
@created_at = Time.now
|
221
|
+
@created_at = Time.now.freeze
|
220
222
|
|
221
223
|
@date_pattern = opts.fetch(:date_pattern, nil)
|
222
224
|
@date_method = opts.fetch(:date_method, nil)
|
data/lib/logging/log_event.rb
CHANGED
@@ -2,8 +2,7 @@
|
|
2
2
|
module Logging
|
3
3
|
|
4
4
|
# This class defines a logging event.
|
5
|
-
|
6
|
-
LogEvent = Struct.new( :logger, :level, :data, :time, :file, :line, :method ) {
|
5
|
+
class LogEvent
|
7
6
|
# :stopdoc:
|
8
7
|
|
9
8
|
# Regular expression used to parse out caller information
|
@@ -16,6 +15,8 @@ module Logging
|
|
16
15
|
CALLER_INDEX = ((defined? JRUBY_VERSION and JRUBY_VERSION > '1.6') or (defined? RUBY_ENGINE and RUBY_ENGINE[%r/^rbx/i])) ? 1 : 2
|
17
16
|
# :startdoc:
|
18
17
|
|
18
|
+
attr_accessor :logger, :level, :data, :time, :file, :line, :method
|
19
|
+
|
19
20
|
# call-seq:
|
20
21
|
# LogEvent.new( logger, level, [data], caller_tracing )
|
21
22
|
#
|
@@ -25,20 +26,26 @@ module Logging
|
|
25
26
|
# invoked to get the execution trace of the logging method.
|
26
27
|
#
|
27
28
|
def initialize( logger, level, data, caller_tracing )
|
28
|
-
|
29
|
+
self.logger = logger
|
30
|
+
self.level = level
|
31
|
+
self.data = data
|
32
|
+
self.time = Time.now.freeze
|
29
33
|
|
30
34
|
if caller_tracing
|
31
35
|
stack = Kernel.caller[CALLER_INDEX]
|
32
36
|
return if stack.nil?
|
33
37
|
|
34
38
|
match = CALLER_RGXP.match(stack)
|
35
|
-
|
36
|
-
|
37
|
-
|
39
|
+
self.file = match[1]
|
40
|
+
self.line = Integer(match[2])
|
41
|
+
self.method = match[3] unless match[3].nil?
|
42
|
+
|
43
|
+
if (bp = ::Logging.basepath) && !bp.empty? && file.index(bp) == 0
|
44
|
+
self.file = file.slice(bp.length + 1, file.length - bp.length)
|
45
|
+
end
|
46
|
+
else
|
47
|
+
self.file = self.line = self.method = ''
|
38
48
|
end
|
39
|
-
|
40
|
-
super(logger, level, data, Time.now, f, l, m)
|
41
49
|
end
|
42
|
-
|
43
|
-
end
|
44
|
-
|
50
|
+
end
|
51
|
+
end
|
data/lib/logging/logger.rb
CHANGED
@@ -264,7 +264,7 @@ module Logging
|
|
264
264
|
# level = :all
|
265
265
|
#
|
266
266
|
# Set the level for this logger. The level can be either a +String+, a
|
267
|
-
# +Symbol+, or
|
267
|
+
# +Symbol+, or an +Integer+. An +ArgumentError+ is raised if this is not
|
268
268
|
# the case.
|
269
269
|
#
|
270
270
|
# There are two special levels -- "all" and "off". The former will
|
@@ -294,7 +294,7 @@ module Logging
|
|
294
294
|
else
|
295
295
|
lvl = case level
|
296
296
|
when String, Symbol; ::Logging::level_num(level)
|
297
|
-
when
|
297
|
+
when Integer; level
|
298
298
|
else
|
299
299
|
raise ArgumentError,
|
300
300
|
"level must be a String, Symbol, or Integer"
|
data/lib/logging/rails_compat.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
|
2
|
-
if defined? ActiveSupport
|
3
|
-
|
4
1
|
module Logging
|
5
2
|
|
6
3
|
# Rails compatibility module.
|
@@ -9,10 +6,9 @@ module Logging
|
|
9
6
|
# some Rails extensions expect these methods to exist. Those methods are
|
10
7
|
# implemented in this module and included in the Logging::Logger class when
|
11
8
|
# the ActiveSupport gem is present.
|
12
|
-
#
|
13
9
|
module RailsCompat
|
14
10
|
|
15
|
-
# A no-op implementation of the
|
11
|
+
# A no-op implementation of the `formatter` method.
|
16
12
|
def formatter; end
|
17
13
|
|
18
14
|
# A no-op implementation of the +silence+ method. Setting of log levels
|
@@ -20,17 +16,12 @@ module Logging
|
|
20
16
|
# opinion that overriding the log level programmatically is a logical
|
21
17
|
# error.
|
22
18
|
#
|
23
|
-
# Please see https://github.com/TwP/logging/issues/11 for a more
|
19
|
+
# Please see https://github.com/TwP/logging/issues/11 for a more detailed
|
24
20
|
# discussion of the issue.
|
25
|
-
#
|
26
21
|
def silence( *args )
|
27
22
|
yield self
|
28
23
|
end
|
29
|
-
|
30
|
-
end # RailsCompat
|
24
|
+
end
|
31
25
|
|
32
26
|
Logger.send :include, RailsCompat
|
33
|
-
|
34
|
-
end # Logging
|
35
|
-
end # if defined?
|
36
|
-
|
27
|
+
end
|
data/lib/logging/version.rb
CHANGED
data/logging.gemspec
CHANGED
@@ -1,47 +1,46 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: logging 2.0.
|
2
|
+
# stub: logging 2.1.0.48 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
|
-
s.name = "logging"
|
6
|
-
s.version = "2.0.
|
5
|
+
s.name = "logging".freeze
|
6
|
+
s.version = "2.1.0.48"
|
7
7
|
|
8
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
|
-
s.require_paths = ["lib"]
|
10
|
-
s.authors = ["Tim Pease"]
|
11
|
-
s.date = "
|
12
|
-
s.
|
13
|
-
s.
|
14
|
-
s.
|
15
|
-
s.
|
16
|
-
s.
|
17
|
-
s.
|
18
|
-
s.
|
19
|
-
s.
|
20
|
-
s.
|
21
|
-
s.
|
22
|
-
s.test_files = ["test/appenders/test_buffered_io.rb", "test/appenders/test_console.rb", "test/appenders/test_file.rb", "test/appenders/test_io.rb", "test/appenders/test_periodic_flushing.rb", "test/appenders/test_rolling_file.rb", "test/appenders/test_string_io.rb", "test/appenders/test_syslog.rb", "test/layouts/test_basic.rb", "test/layouts/test_color_pattern.rb", "test/layouts/test_json.rb", "test/layouts/test_pattern.rb", "test/layouts/test_yaml.rb", "test/test_appender.rb", "test/test_color_scheme.rb", "test/test_filter.rb", "test/test_layout.rb", "test/test_log_event.rb", "test/test_logger.rb", "test/test_logging.rb", "test/test_mapped_diagnostic_context.rb", "test/test_nested_diagnostic_context.rb", "test/test_proxy.rb", "test/test_repository.rb", "test/test_root_logger.rb", "test/test_utils.rb"]
|
8
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
|
+
s.require_paths = ["lib".freeze]
|
10
|
+
s.authors = ["Tim Pease".freeze]
|
11
|
+
s.date = "2017-01-08"
|
12
|
+
s.description = "**Logging** is a flexible logging library for use in Ruby programs based on the\ndesign of Java's log4j library. It features a hierarchical logging system,\ncustom level names, multiple output destinations per log event, custom\nformatting, and more.".freeze
|
13
|
+
s.email = "tim.pease@gmail.com".freeze
|
14
|
+
s.extra_rdoc_files = ["History.txt".freeze]
|
15
|
+
s.files = [".gitignore".freeze, ".travis.yml".freeze, "History.txt".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "examples/appenders.rb".freeze, "examples/classes.rb".freeze, "examples/colorization.rb".freeze, "examples/custom_log_levels.rb".freeze, "examples/fork.rb".freeze, "examples/formatting.rb".freeze, "examples/hierarchies.rb".freeze, "examples/layouts.rb".freeze, "examples/lazy.rb".freeze, "examples/loggers.rb".freeze, "examples/mdc.rb".freeze, "examples/names.rb".freeze, "examples/rails4.rb".freeze, "examples/reusing_layouts.rb".freeze, "examples/rspec_integration.rb".freeze, "examples/simple.rb".freeze, "lib/logging.rb".freeze, "lib/logging/appender.rb".freeze, "lib/logging/appenders.rb".freeze, "lib/logging/appenders/buffering.rb".freeze, "lib/logging/appenders/console.rb".freeze, "lib/logging/appenders/file.rb".freeze, "lib/logging/appenders/io.rb".freeze, "lib/logging/appenders/rolling_file.rb".freeze, "lib/logging/appenders/string_io.rb".freeze, "lib/logging/appenders/syslog.rb".freeze, "lib/logging/color_scheme.rb".freeze, "lib/logging/diagnostic_context.rb".freeze, "lib/logging/filter.rb".freeze, "lib/logging/filters.rb".freeze, "lib/logging/filters/level.rb".freeze, "lib/logging/layout.rb".freeze, "lib/logging/layouts.rb".freeze, "lib/logging/layouts/basic.rb".freeze, "lib/logging/layouts/parseable.rb".freeze, "lib/logging/layouts/pattern.rb".freeze, "lib/logging/log_event.rb".freeze, "lib/logging/logger.rb".freeze, "lib/logging/proxy.rb".freeze, "lib/logging/rails_compat.rb".freeze, "lib/logging/repository.rb".freeze, "lib/logging/root_logger.rb".freeze, "lib/logging/utils.rb".freeze, "lib/logging/version.rb".freeze, "lib/rspec/logging_helper.rb".freeze, "lib/spec/logging_helper.rb".freeze, "logging.gemspec".freeze, "script/bootstrap".freeze, "script/console".freeze, "test/appenders/test_async_flushing.rb".freeze, "test/appenders/test_buffered_io.rb".freeze, "test/appenders/test_console.rb".freeze, "test/appenders/test_file.rb".freeze, "test/appenders/test_io.rb".freeze, "test/appenders/test_rolling_file.rb".freeze, "test/appenders/test_string_io.rb".freeze, "test/appenders/test_syslog.rb".freeze, "test/benchmark.rb".freeze, "test/layouts/test_basic.rb".freeze, "test/layouts/test_color_pattern.rb".freeze, "test/layouts/test_json.rb".freeze, "test/layouts/test_pattern.rb".freeze, "test/layouts/test_yaml.rb".freeze, "test/performance.rb".freeze, "test/setup.rb".freeze, "test/test_appender.rb".freeze, "test/test_color_scheme.rb".freeze, "test/test_filter.rb".freeze, "test/test_layout.rb".freeze, "test/test_log_event.rb".freeze, "test/test_logger.rb".freeze, "test/test_logging.rb".freeze, "test/test_mapped_diagnostic_context.rb".freeze, "test/test_nested_diagnostic_context.rb".freeze, "test/test_proxy.rb".freeze, "test/test_repository.rb".freeze, "test/test_root_logger.rb".freeze, "test/test_utils.rb".freeze]
|
16
|
+
s.homepage = "http://rubygems.org/gems/logging".freeze
|
17
|
+
s.rdoc_options = ["--main".freeze, "README.md".freeze]
|
18
|
+
s.rubyforge_project = "logging".freeze
|
19
|
+
s.rubygems_version = "2.5.2".freeze
|
20
|
+
s.summary = "A flexible and extendable logging library for Ruby".freeze
|
21
|
+
s.test_files = ["test/appenders/test_async_flushing.rb".freeze, "test/appenders/test_buffered_io.rb".freeze, "test/appenders/test_console.rb".freeze, "test/appenders/test_file.rb".freeze, "test/appenders/test_io.rb".freeze, "test/appenders/test_rolling_file.rb".freeze, "test/appenders/test_string_io.rb".freeze, "test/appenders/test_syslog.rb".freeze, "test/layouts/test_basic.rb".freeze, "test/layouts/test_color_pattern.rb".freeze, "test/layouts/test_json.rb".freeze, "test/layouts/test_pattern.rb".freeze, "test/layouts/test_yaml.rb".freeze, "test/test_appender.rb".freeze, "test/test_color_scheme.rb".freeze, "test/test_filter.rb".freeze, "test/test_layout.rb".freeze, "test/test_log_event.rb".freeze, "test/test_logger.rb".freeze, "test/test_logging.rb".freeze, "test/test_mapped_diagnostic_context.rb".freeze, "test/test_nested_diagnostic_context.rb".freeze, "test/test_proxy.rb".freeze, "test/test_repository.rb".freeze, "test/test_root_logger.rb".freeze, "test/test_utils.rb".freeze]
|
23
22
|
|
24
23
|
if s.respond_to? :specification_version then
|
25
24
|
s.specification_version = 4
|
26
25
|
|
27
26
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
28
|
-
s.add_runtime_dependency(%q<little-plugger
|
29
|
-
s.add_runtime_dependency(%q<multi_json
|
30
|
-
s.add_development_dependency(%q<
|
31
|
-
s.add_development_dependency(%q<bones-git
|
32
|
-
s.add_development_dependency(%q<bones
|
27
|
+
s.add_runtime_dependency(%q<little-plugger>.freeze, ["~> 1.1"])
|
28
|
+
s.add_runtime_dependency(%q<multi_json>.freeze, ["~> 1.10"])
|
29
|
+
s.add_development_dependency(%q<test-unit>.freeze, ["~> 3.1"])
|
30
|
+
s.add_development_dependency(%q<bones-git>.freeze, ["~> 1.3"])
|
31
|
+
s.add_development_dependency(%q<bones>.freeze, [">= 3.8.4"])
|
33
32
|
else
|
34
|
-
s.add_dependency(%q<little-plugger
|
35
|
-
s.add_dependency(%q<multi_json
|
36
|
-
s.add_dependency(%q<
|
37
|
-
s.add_dependency(%q<bones-git
|
38
|
-
s.add_dependency(%q<bones
|
33
|
+
s.add_dependency(%q<little-plugger>.freeze, ["~> 1.1"])
|
34
|
+
s.add_dependency(%q<multi_json>.freeze, ["~> 1.10"])
|
35
|
+
s.add_dependency(%q<test-unit>.freeze, ["~> 3.1"])
|
36
|
+
s.add_dependency(%q<bones-git>.freeze, ["~> 1.3"])
|
37
|
+
s.add_dependency(%q<bones>.freeze, [">= 3.8.4"])
|
39
38
|
end
|
40
39
|
else
|
41
|
-
s.add_dependency(%q<little-plugger
|
42
|
-
s.add_dependency(%q<multi_json
|
43
|
-
s.add_dependency(%q<
|
44
|
-
s.add_dependency(%q<bones-git
|
45
|
-
s.add_dependency(%q<bones
|
40
|
+
s.add_dependency(%q<little-plugger>.freeze, ["~> 1.1"])
|
41
|
+
s.add_dependency(%q<multi_json>.freeze, ["~> 1.10"])
|
42
|
+
s.add_dependency(%q<test-unit>.freeze, ["~> 3.1"])
|
43
|
+
s.add_dependency(%q<bones-git>.freeze, ["~> 1.3"])
|
44
|
+
s.add_dependency(%q<bones>.freeze, [">= 3.8.4"])
|
46
45
|
end
|
47
46
|
end
|
data/test/layouts/test_json.rb
CHANGED
@@ -166,6 +166,19 @@ module TestLayouts
|
|
166
166
|
assert_match %r/"ndc":\[\]/, format
|
167
167
|
end
|
168
168
|
|
169
|
+
def test_utc_offset
|
170
|
+
layout = Logging.layouts.json(:items => %w[timestamp])
|
171
|
+
event = Logging::LogEvent.new('TimestampLogger', @levels['info'], 'log message', false)
|
172
|
+
event.time = Time.utc(2016, 12, 1, 12, 0, 0).freeze
|
173
|
+
|
174
|
+
assert_equal %Q/{"timestamp":"2016-12-01T12:00:00.000000Z"}\n/, layout.format(event)
|
175
|
+
|
176
|
+
layout.utc_offset = "-06:00"
|
177
|
+
assert_equal %Q/{"timestamp":"2016-12-01T06:00:00.000000-06:00"}\n/, layout.format(event)
|
178
|
+
|
179
|
+
layout.utc_offset = "+01:00"
|
180
|
+
assert_equal %Q/{"timestamp":"2016-12-01T13:00:00.000000+01:00"}\n/, layout.format(event)
|
181
|
+
end
|
169
182
|
end # class TestJson
|
170
183
|
end # module TestLayouts
|
171
184
|
end # module TestLogging
|
@@ -26,7 +26,7 @@ module TestLayouts
|
|
26
26
|
|
27
27
|
@layout.date_method = 'usec'
|
28
28
|
assert_equal 'usec', @layout.date_method
|
29
|
-
|
29
|
+
assert_kind_of Integer, @layout.format_date(Time.now)
|
30
30
|
|
31
31
|
@layout.date_method = :to_s
|
32
32
|
assert_equal :to_s, @layout.date_method
|
@@ -38,7 +38,7 @@ module TestLayouts
|
|
38
38
|
|
39
39
|
@layout.date_method = 'usec'
|
40
40
|
assert_equal 'usec', @layout.date_method
|
41
|
-
|
41
|
+
assert_kind_of Integer, @layout.format_date(Time.now)
|
42
42
|
end
|
43
43
|
|
44
44
|
def test_date_pattern
|
@@ -230,6 +230,19 @@ module TestLayouts
|
|
230
230
|
assert_equal 'context a', @layout.format(event)
|
231
231
|
end
|
232
232
|
|
233
|
+
def test_utc_offset
|
234
|
+
layout = Logging.layouts.pattern(:pattern => "%d", :utc_offset => "UTC")
|
235
|
+
event = Logging::LogEvent.new('DateLogger', @levels['info'], 'log message', false)
|
236
|
+
event.time = Time.utc(2016, 12, 1, 12, 0, 0).freeze
|
237
|
+
|
238
|
+
assert_equal "2016-12-01T12:00:00", layout.format(event)
|
239
|
+
|
240
|
+
layout.utc_offset = "-06:00"
|
241
|
+
assert_equal "2016-12-01T06:00:00", layout.format(event)
|
242
|
+
|
243
|
+
layout.utc_offset = "+01:00"
|
244
|
+
assert_equal "2016-12-01T13:00:00", layout.format(event)
|
245
|
+
end
|
233
246
|
end # TestBasic
|
234
247
|
end # TestLayouts
|
235
248
|
end # TestLogging
|
data/test/layouts/test_yaml.rb
CHANGED
@@ -148,6 +148,20 @@ module TestLayouts
|
|
148
148
|
assert_match %r/\nndc: \[\]\n/, format
|
149
149
|
end
|
150
150
|
|
151
|
+
def test_utc_offset
|
152
|
+
layout = Logging.layouts.yaml(:items => %w[timestamp])
|
153
|
+
event = Logging::LogEvent.new('TimestampLogger', @levels['info'], 'log message', false)
|
154
|
+
event.time = Time.utc(2016, 12, 1, 12, 0, 0).freeze
|
155
|
+
|
156
|
+
assert_equal %Q{---\ntimestamp: '2016-12-01T12:00:00.000000Z'\n}, layout.format(event)
|
157
|
+
|
158
|
+
layout.utc_offset = "-06:00"
|
159
|
+
assert_equal %Q{---\ntimestamp: '2016-12-01T06:00:00.000000-06:00'\n}, layout.format(event)
|
160
|
+
|
161
|
+
layout.utc_offset = "+01:00"
|
162
|
+
assert_equal %Q{---\ntimestamp: '2016-12-01T13:00:00.000000+01:00'\n}, layout.format(event)
|
163
|
+
end
|
164
|
+
|
151
165
|
private
|
152
166
|
|
153
167
|
def assert_yaml_match( expected, actual )
|
data/test/test_layout.rb
CHANGED
@@ -120,6 +120,46 @@ module TestLogging
|
|
120
120
|
@layout.backtrace = 'on'
|
121
121
|
assert_equal true, @layout.backtrace
|
122
122
|
end
|
123
|
+
|
124
|
+
def test_utc_offset
|
125
|
+
assert_nil @layout.utc_offset
|
126
|
+
|
127
|
+
@layout.utc_offset = 0
|
128
|
+
assert_equal 0, @layout.utc_offset
|
129
|
+
|
130
|
+
@layout.utc_offset = "UTC"
|
131
|
+
assert_equal 0, @layout.utc_offset
|
132
|
+
|
133
|
+
@layout.utc_offset = "+01:00"
|
134
|
+
assert_equal "+01:00", @layout.utc_offset
|
135
|
+
|
136
|
+
assert_raise(ArgumentError) {@layout.utc_offset = "06:00"}
|
137
|
+
|
138
|
+
@layout.utc_offset = nil
|
139
|
+
::Logging.utc_offset = "UTC"
|
140
|
+
assert_nil @layout.utc_offset
|
141
|
+
|
142
|
+
layout = ::Logging::Layout.new
|
143
|
+
assert_equal 0, layout.utc_offset
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_apply_utc_offset
|
147
|
+
time = Time.now.freeze
|
148
|
+
|
149
|
+
offset_time = @layout.apply_utc_offset(time)
|
150
|
+
assert_same time, offset_time
|
151
|
+
|
152
|
+
@layout.utc_offset = "UTC"
|
153
|
+
offset_time = @layout.apply_utc_offset(time)
|
154
|
+
assert_not_same time, offset_time
|
155
|
+
assert offset_time.utc?
|
156
|
+
|
157
|
+
@layout.utc_offset = "+01:00"
|
158
|
+
offset_time = @layout.apply_utc_offset(time)
|
159
|
+
assert_not_same time, offset_time
|
160
|
+
assert !offset_time.utc?
|
161
|
+
assert_equal 3600, offset_time.utc_offset
|
162
|
+
end
|
123
163
|
end # class TestLayout
|
124
164
|
end # module TestLogging
|
125
165
|
|
data/test/test_log_event.rb
CHANGED
@@ -34,6 +34,14 @@ module TestLogging
|
|
34
34
|
assert_match %r/test_log_event.rb\z/, @appender.event.file
|
35
35
|
end
|
36
36
|
|
37
|
+
def test_file_with_basepath
|
38
|
+
::Logging.basepath = File.expand_path("../../", __FILE__)
|
39
|
+
|
40
|
+
@logger.caller_tracing = true
|
41
|
+
@logger.warn "warning message"
|
42
|
+
assert_equal "test/test_log_event.rb", @appender.event.file
|
43
|
+
end
|
44
|
+
|
37
45
|
def test_level
|
38
46
|
assert_equal 1, @event.level
|
39
47
|
end
|