log4ruby 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/log4ruby/appender.rb +63 -56
- data/lib/log4ruby/appenders/console_appender.rb +9 -3
- data/lib/log4ruby/appenders/file_appender.rb +17 -8
- data/lib/log4ruby/appenders/nil_appender.rb +24 -15
- data/lib/log4ruby/appenders/stream_appender.rb +65 -31
- data/lib/log4ruby/formatters/default_formatter.rb +23 -0
- data/lib/log4ruby/formatters/pattern_formatter.rb +80 -81
- data/lib/log4ruby/level.rb +94 -94
- data/lib/log4ruby/logger.rb +147 -147
- data/lib/log4ruby/version.rb +8 -8
- data/lib/sample.rb +82 -0
- metadata +28 -53
- data/lib/tests.rb +0 -49
data/lib/log4ruby/appender.rb
CHANGED
@@ -1,57 +1,64 @@
|
|
1
|
-
#
|
2
|
-
# 21 Jul 2012
|
3
|
-
#
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
#
|
16
|
-
#
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
#
|
31
|
-
#
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
#
|
38
|
-
#
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
1
|
+
#
|
2
|
+
# 21 Jul 2012
|
3
|
+
#
|
4
|
+
|
5
|
+
require "log4ruby/formatters/default_formatter"
|
6
|
+
|
7
|
+
module Log4Ruby
|
8
|
+
|
9
|
+
# Base class for appenders.
|
10
|
+
class Appender
|
11
|
+
|
12
|
+
# Set the formatter this appender uses.
|
13
|
+
attr_writer :formatter
|
14
|
+
|
15
|
+
# New appender. This class should be treated as an abstract base class and should not be initialised directly.
|
16
|
+
#
|
17
|
+
# @param [Log4Ruby::Level] level the threshold level for the appender.
|
18
|
+
# @param [Hash] options configuration options. Supported keys are:
|
19
|
+
# :formatter - the formatter this appender should use. Uses the DefaultFormatter if not specified.
|
20
|
+
def initialize(level, options = {})
|
21
|
+
@level = level
|
22
|
+
@formatter = get_option(options, :formatter, false, DefaultFormatter.new)
|
23
|
+
@closed = false
|
24
|
+
|
25
|
+
at_exit { close }
|
26
|
+
end
|
27
|
+
|
28
|
+
# Closes this appender. Logs will not be emitted by this appender any longer.
|
29
|
+
# If the appender is already closed, this method should not do anything.
|
30
|
+
#
|
31
|
+
# @return [TrueClass] Always true.
|
32
|
+
def close
|
33
|
+
@closed = true
|
34
|
+
end
|
35
|
+
|
36
|
+
# Check if this appender is closed.
|
37
|
+
#
|
38
|
+
# @return [TrueClass, FalseClass] true if the appender is closed.
|
39
|
+
def closed?
|
40
|
+
@closed
|
41
|
+
end
|
42
|
+
|
43
|
+
# Process the log item.
|
44
|
+
#
|
45
|
+
# @param [Log4Ruby::Log] log
|
46
|
+
def process_log(log)
|
47
|
+
return if self.closed?
|
48
|
+
return if log[:level] < @level
|
49
|
+
|
50
|
+
# Format the log item and emit it.
|
51
|
+
emit(@formatter.format(log))
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
# Emits a log message to this appenders target.
|
57
|
+
#
|
58
|
+
# @param [String] message the message to emit.
|
59
|
+
def emit(message)
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
57
64
|
end
|
@@ -13,10 +13,16 @@ module Log4Ruby
|
|
13
13
|
|
14
14
|
# New console appender.
|
15
15
|
#
|
16
|
-
# @param [
|
17
|
-
|
16
|
+
# @param [Log4Ruby::Level] level the threshold level for the appender.
|
17
|
+
# @param [Hash] options configuration options. Supported keys are:
|
18
|
+
# :formatter - the formatter this appender should use. Uses the DefaultFormatter if not specified.
|
19
|
+
# :target - the target stream to use (:stdout or :stderr). Default is :stdout
|
20
|
+
def initialize(level, options = {})
|
21
|
+
target = get_option(options, :target, false, :stdout)
|
18
22
|
raise ArgumentError.new("Invalid target '#{target}'. Must be either 'stdout' or 'stderr'.") unless TARGETS.has_key?(target)
|
19
|
-
|
23
|
+
|
24
|
+
set_option(options, :stream, TARGETS[target], true)
|
25
|
+
super(level, options)
|
20
26
|
end
|
21
27
|
|
22
28
|
end
|
@@ -3,6 +3,7 @@
|
|
3
3
|
#
|
4
4
|
|
5
5
|
require "date"
|
6
|
+
require "fileutils"
|
6
7
|
|
7
8
|
require "log4ruby/appenders/stream_appender"
|
8
9
|
|
@@ -32,6 +33,7 @@ module Log4Ruby
|
|
32
33
|
# New stream appender.
|
33
34
|
#
|
34
35
|
# @param [Hash] options configuration hash. Supports the following parameters.
|
36
|
+
# :formatter - the formatter this appender should use. Uses the DefaultFormatter if not specified.
|
35
37
|
# :directory - the directory into which the logs should be saved. Defaults to the current directory.
|
36
38
|
# :prefix - the file name prefix for the log files. *required*
|
37
39
|
# :suffix - the file name suffix for the log files. Defaults to 'log'
|
@@ -51,8 +53,9 @@ module Log4Ruby
|
|
51
53
|
# roll_using_date:
|
52
54
|
# :frequency - the frequency with which to roll files (:hourly, :daily, :weekly, :monthly, :yearly).
|
53
55
|
# Default is :daily.
|
54
|
-
def initialize(level,
|
55
|
-
|
56
|
+
def initialize(level, options = {})
|
57
|
+
set_option(options, :stream, nil, true)
|
58
|
+
super(level, options)
|
56
59
|
|
57
60
|
@directory = get_option(options, :directory, false, "./")
|
58
61
|
@prefix = get_option(options, :prefix, true)
|
@@ -106,9 +109,12 @@ module Log4Ruby
|
|
106
109
|
# Create the emit method that will roll using the file date as the trigger.
|
107
110
|
class << self
|
108
111
|
self
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
+
|
113
|
+
# Override to roll using the date of the file.
|
114
|
+
def emit(message)
|
115
|
+
roll_using_date
|
116
|
+
super(message)
|
117
|
+
end
|
112
118
|
end
|
113
119
|
end
|
114
120
|
|
@@ -122,9 +128,12 @@ module Log4Ruby
|
|
122
128
|
# Create the emit method that will roll using the file size as the trigger.
|
123
129
|
class << self
|
124
130
|
self
|
125
|
-
|
126
|
-
|
127
|
-
|
131
|
+
|
132
|
+
# Override to roll using the size of the file.
|
133
|
+
def emit(message)
|
134
|
+
roll_using_size
|
135
|
+
super(message)
|
136
|
+
end
|
128
137
|
end
|
129
138
|
end
|
130
139
|
|
@@ -1,16 +1,25 @@
|
|
1
|
-
#
|
2
|
-
# 21 Jul 2012
|
3
|
-
#
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
1
|
+
#
|
2
|
+
# 21 Jul 2012
|
3
|
+
#
|
4
|
+
|
5
|
+
require "log4ruby/appender"
|
6
|
+
|
7
|
+
module Log4Ruby
|
8
|
+
|
9
|
+
# An appender that does nothing. All logs to it are ignored and just consumed.
|
10
|
+
class NilAppender < Log4Ruby::Appender
|
11
|
+
|
12
|
+
# New NilAppender. Does nothing.
|
13
|
+
#
|
14
|
+
# @param [Log4Ruby::Level] level - not used.
|
15
|
+
# @param [Hash] options - not used.
|
16
|
+
def initialize(level, options = {})
|
17
|
+
end
|
18
|
+
|
19
|
+
# Don't do anything with the log. Just return.
|
20
|
+
def process_log(log)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
16
25
|
end
|
@@ -1,31 +1,65 @@
|
|
1
|
-
#
|
2
|
-
# 21 Jul 2012
|
3
|
-
#
|
4
|
-
|
5
|
-
require "log4ruby/appender"
|
6
|
-
|
7
|
-
module Log4Ruby
|
8
|
-
|
9
|
-
# Simple appender that can emit to a stream (file, console, socket, etc i.e. anything that responds to the write method)
|
10
|
-
class StreamAppender < Log4Ruby::Appender
|
11
|
-
|
12
|
-
# New stream appender.
|
13
|
-
#
|
14
|
-
# @param [
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
#
|
25
|
-
def
|
26
|
-
@
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
1
|
+
#
|
2
|
+
# 21 Jul 2012
|
3
|
+
#
|
4
|
+
|
5
|
+
require "log4ruby/appender"
|
6
|
+
|
7
|
+
module Log4Ruby
|
8
|
+
|
9
|
+
# Simple appender that can emit to a stream (file, console, socket, etc i.e. anything that responds to the write method)
|
10
|
+
class StreamAppender < Log4Ruby::Appender
|
11
|
+
|
12
|
+
# New stream appender.
|
13
|
+
#
|
14
|
+
# @param [Log4Ruby::Level] level the threshold level for the appender.
|
15
|
+
# @param [Hash] options configuration options. Supported keys are:
|
16
|
+
# :formatter - the formatter this appender should use. Uses the DefaultFormatter if not specified.
|
17
|
+
# :stream - the stream this appender should log to. *required*.
|
18
|
+
def initialize(level, options = {})
|
19
|
+
super(level, options)
|
20
|
+
@stream = get_option(options, :stream)
|
21
|
+
@emit_header = true
|
22
|
+
end
|
23
|
+
|
24
|
+
# Overridden to emit the footer. If closed, does nothing.
|
25
|
+
def close
|
26
|
+
emit_footer unless @closed
|
27
|
+
@stream.close unless (@stream.nil? or @stream.closed?)
|
28
|
+
|
29
|
+
super
|
30
|
+
end
|
31
|
+
|
32
|
+
# Register a block that will serve as the callback for when the footer needs to be generated.
|
33
|
+
def footer(&block)
|
34
|
+
@footer = block
|
35
|
+
end
|
36
|
+
|
37
|
+
# Register a block that will serve as the callback for when the header needs to be generated.
|
38
|
+
def header(&block)
|
39
|
+
@header = block
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
# Emits the footer to the appender's target. This will be executed just before the appender is closed.
|
45
|
+
def emit_footer
|
46
|
+
@footer.call(@stream) unless @footer.nil?
|
47
|
+
end
|
48
|
+
|
49
|
+
# Emits the header to the appender's target. This will be executed just before the first line is emitted.
|
50
|
+
def emit_header
|
51
|
+
@header.call(@stream) unless @header.nil?
|
52
|
+
@emit_header = false
|
53
|
+
end
|
54
|
+
|
55
|
+
# Writes the message to the underlying stream.
|
56
|
+
#
|
57
|
+
# @param [String] message the message to write.
|
58
|
+
def emit(message)
|
59
|
+
emit_header if @emit_header
|
60
|
+
@stream.write(message)
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#
|
2
|
+
# 25 Jul 2012
|
3
|
+
#
|
4
|
+
|
5
|
+
require "log4ruby/formatter"
|
6
|
+
|
7
|
+
module Log4Ruby
|
8
|
+
|
9
|
+
# Default formatter for Log4Ruby.
|
10
|
+
class DefaultFormatter < Log4Ruby::Formatter
|
11
|
+
|
12
|
+
# Format a log item.
|
13
|
+
#
|
14
|
+
# @param [Log4Ruby::Log] log
|
15
|
+
#
|
16
|
+
# @return [String] the fully formatted log message.
|
17
|
+
def format(log)
|
18
|
+
"#{log[:level].name} - #{log[:message]}\n"
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -1,81 +1,80 @@
|
|
1
|
-
#
|
2
|
-
# 21 Jul 2012
|
3
|
-
#
|
4
|
-
|
5
|
-
require "log4ruby/formatter"
|
6
|
-
require "log4ruby/log"
|
7
|
-
|
8
|
-
module Log4Ruby
|
9
|
-
|
10
|
-
class PatternFormatter
|
11
|
-
|
12
|
-
# New pattern formatter.
|
13
|
-
#
|
14
|
-
# @param [String] format_string the pattern string to use when formatting log messages.
|
15
|
-
# @param [Array] subst_array the log parameters to substitute into the format string.
|
16
|
-
# @param [Hash] parameter_formatters custom formatters for log parameters. Maps parameter names to callable objects
|
17
|
-
# that will be invoked with the parameter's value. The values returned will be used when substituting into the
|
18
|
-
# format string.
|
19
|
-
#
|
20
|
-
# e.g.
|
21
|
-
# format_string = [%s] %7s - %s : %s
|
22
|
-
# subst_array = [:timestamp, :level, :full_logger_name, :message]
|
23
|
-
#
|
24
|
-
#
|
25
|
-
# The
|
26
|
-
#
|
27
|
-
|
28
|
-
|
29
|
-
@
|
30
|
-
@
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
#
|
35
|
-
#
|
36
|
-
# @param [
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
#
|
63
|
-
#
|
64
|
-
#
|
65
|
-
#
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
#
|
73
|
-
#
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
end
|
1
|
+
#
|
2
|
+
# 21 Jul 2012
|
3
|
+
#
|
4
|
+
|
5
|
+
require "log4ruby/formatter"
|
6
|
+
require "log4ruby/log"
|
7
|
+
|
8
|
+
module Log4Ruby
|
9
|
+
|
10
|
+
class PatternFormatter
|
11
|
+
|
12
|
+
# New pattern formatter.
|
13
|
+
#
|
14
|
+
# @param [String] format_string the pattern string to use when formatting log messages.
|
15
|
+
# @param [Array] subst_array the log parameters to substitute into the format string.
|
16
|
+
# @param [Hash] parameter_formatters custom formatters for log parameters. Maps parameter names to callable objects
|
17
|
+
# that will be invoked with the parameter's value. The values returned will be used when substituting into the
|
18
|
+
# format string.
|
19
|
+
#
|
20
|
+
# e.g.
|
21
|
+
# format_string = [%s] %7s - %s : %s
|
22
|
+
# subst_array = [:timestamp, :level, :full_logger_name, :message]
|
23
|
+
#
|
24
|
+
# The above example will print the timestamp in the format specified.
|
25
|
+
# The level will be right aligned padded on the left to use 7 spaces followed by the full logger name and the
|
26
|
+
# message.
|
27
|
+
def initialize(format_string, subst_array, parameter_formatters = {})
|
28
|
+
@format_string = format_string
|
29
|
+
@subst_array = subst_array
|
30
|
+
@parameter_formatters = parameter_formatters
|
31
|
+
end
|
32
|
+
|
33
|
+
# Adds a parameter formatter to this formatter.
|
34
|
+
#
|
35
|
+
# @param [Symbol] parameter the parameter to format.
|
36
|
+
# @param [Proc] callable the callable to invoke.
|
37
|
+
def add_parameter_formatter(parameter, callable)
|
38
|
+
@parameter_formatters[parameter] = callable
|
39
|
+
end
|
40
|
+
|
41
|
+
# Format the log item using the pattern string.
|
42
|
+
#
|
43
|
+
# @param [Log4Ruby::Log] log the log to format.
|
44
|
+
#
|
45
|
+
# @return [String] the fully formatted log message.
|
46
|
+
def format(log)
|
47
|
+
# Get the values of the parameters (apply custom formatters too).
|
48
|
+
parameters = @subst_array.map do |parameter|
|
49
|
+
value = log[parameter]
|
50
|
+
@parameter_formatters.has_key?(parameter) ? @parameter_formatters[parameter].call(value) : value.to_s
|
51
|
+
end
|
52
|
+
# Substitute into the format string.
|
53
|
+
@format_string % parameters
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
# Some common parameter formatters to use with the pattern formatter.
|
59
|
+
class ParameterFormatters
|
60
|
+
|
61
|
+
# Returns a logger formatter that will format logger objects.
|
62
|
+
#
|
63
|
+
# @param [Integer] index an integer that represents how far up the tree the logger's name should be resolved. So
|
64
|
+
# 1 would be only the name of the logger, 2 would be the name of the logger's parent and the name of the logger,
|
65
|
+
# and so on...
|
66
|
+
def self.logger_formatter(index)
|
67
|
+
start = 0 - index
|
68
|
+
Proc.new { |logger| logger.full_name.split(".")[start..-1].join(".") }
|
69
|
+
end
|
70
|
+
|
71
|
+
# Returns a timestamp formatter that will format time objects using the specified format string.
|
72
|
+
#
|
73
|
+
# @param [String] format_string the format string.
|
74
|
+
def self.timestamp_formatter(format_string)
|
75
|
+
Proc.new { |timestamp| timestamp.strftime(format_string) }
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
data/lib/log4ruby/level.rb
CHANGED
@@ -1,95 +1,95 @@
|
|
1
|
-
#
|
2
|
-
# 21 Jul 2012
|
3
|
-
#
|
4
|
-
|
5
|
-
require "log4ruby/logger"
|
6
|
-
|
7
|
-
module Log4Ruby
|
8
|
-
|
9
|
-
class Level
|
10
|
-
|
11
|
-
# Creates a new level with the specified name and weight. Only level's created using this method are
|
12
|
-
# automatically made available on the Logger class. Any other level's will have to be handled manually.
|
13
|
-
# The method with which it is made available is the same as the level, but with all lowercase characters.
|
14
|
-
#
|
15
|
-
# @param [String] name the name of the new level. Will overwrite an existing level with the same name, if it exists.
|
16
|
-
# The name is converted to all uppercase characters.
|
17
|
-
# @param [Float] weight the weight of the level. Higher the weight, higher the priority.
|
18
|
-
def self.register(name, weight)
|
19
|
-
name = name.upcase
|
20
|
-
method_name = name.downcase
|
21
|
-
query_method_name = "#{method_name}?"
|
22
|
-
level = Level.new(name, weight)
|
23
|
-
const_set(name, level)
|
24
|
-
# Create the logging method.
|
25
|
-
Logger.send(:define_method, method_name) do |message, parameters = {}|
|
26
|
-
return if self.closed?
|
27
|
-
return if level < self.effective_level
|
28
|
-
# Construct the log and dispatch it.
|
29
|
-
parameters[:message] = message
|
30
|
-
parameters[:level] = level
|
31
|
-
parameters[:logger] = self
|
32
|
-
self.process_log(Log.new(parameters))
|
33
|
-
end
|
34
|
-
# Create the query method - for checking the effective level of a logger / appender.
|
35
|
-
Logger.send(:define_method, query_method_name) { self.effective_level <= level }
|
36
|
-
Appender.send(:define_method, query_method_name) { self.level <= level }
|
37
|
-
end
|
38
|
-
|
39
|
-
# Parses the specified string in an attempt to convert it to a Level object.
|
40
|
-
#
|
41
|
-
# @param [String] name the name of the level.
|
42
|
-
#
|
43
|
-
# @return [Log4Ruby::Level] the level object.
|
44
|
-
def self.parse(name)
|
45
|
-
name = name.upcase
|
46
|
-
const_get(name)
|
47
|
-
end
|
48
|
-
|
49
|
-
# The weight of this level. Higher the value, more severe the log.
|
50
|
-
attr_reader :weight
|
51
|
-
# The name of the level.
|
52
|
-
attr_reader :name
|
53
|
-
|
54
|
-
# Creates a new level.
|
55
|
-
#
|
56
|
-
# @param [String] name the name of the level.
|
57
|
-
# @param [Float] weight the weight for this level. Higher the weight, higher the severity.
|
58
|
-
def initialize(name, weight)
|
59
|
-
@name = name
|
60
|
-
@weight = weight
|
61
|
-
end
|
62
|
-
|
63
|
-
# Check if this level is less than the specified other log level.
|
64
|
-
# Comparison is done using the weight attribute
|
65
|
-
def <(other)
|
66
|
-
self.weight < other.weight
|
67
|
-
end
|
68
|
-
|
69
|
-
# Check if this level is less than or equal to the specified other log level.
|
70
|
-
# Comparison is done using the weight attribute
|
71
|
-
def <=(other)
|
72
|
-
self.weight <= other.weight
|
73
|
-
end
|
74
|
-
|
75
|
-
# Override to return the name of the level.
|
76
|
-
#
|
77
|
-
# @return [String] the level's name.
|
78
|
-
def to_s
|
79
|
-
@name
|
80
|
-
end
|
81
|
-
|
82
|
-
register("ALL", Float::MIN)
|
83
|
-
register("TRACE", 100.0)
|
84
|
-
register("FINE", 200.0)
|
85
|
-
register("DEBUG", 300.0)
|
86
|
-
register("CONF", 400.0)
|
87
|
-
register("INFO", 500.0)
|
88
|
-
register("WARN", 600.0)
|
89
|
-
register("ERROR", 700.0)
|
90
|
-
register("FATAL", 800.0)
|
91
|
-
register("OFF", Float::MAX)
|
92
|
-
|
93
|
-
end
|
94
|
-
|
1
|
+
#
|
2
|
+
# 21 Jul 2012
|
3
|
+
#
|
4
|
+
|
5
|
+
require "log4ruby/logger"
|
6
|
+
|
7
|
+
module Log4Ruby
|
8
|
+
|
9
|
+
class Level
|
10
|
+
|
11
|
+
# Creates a new level with the specified name and weight. Only level's created using this method are
|
12
|
+
# automatically made available on the Logger class. Any other level's will have to be handled manually.
|
13
|
+
# The method with which it is made available is the same as the level, but with all lowercase characters.
|
14
|
+
#
|
15
|
+
# @param [String] name the name of the new level. Will overwrite an existing level with the same name, if it exists.
|
16
|
+
# The name is converted to all uppercase characters.
|
17
|
+
# @param [Float] weight the weight of the level. Higher the weight, higher the priority.
|
18
|
+
def self.register(name, weight)
|
19
|
+
name = name.upcase
|
20
|
+
method_name = name.downcase
|
21
|
+
query_method_name = "#{method_name}?"
|
22
|
+
level = Level.new(name, weight)
|
23
|
+
const_set(name, level)
|
24
|
+
# Create the logging method.
|
25
|
+
Logger.send(:define_method, method_name) do |message, parameters = {}|
|
26
|
+
return if self.closed?
|
27
|
+
return if level < self.effective_level
|
28
|
+
# Construct the log and dispatch it.
|
29
|
+
parameters[:message] = message
|
30
|
+
parameters[:level] = level
|
31
|
+
parameters[:logger] = self
|
32
|
+
self.process_log(Log.new(parameters))
|
33
|
+
end
|
34
|
+
# Create the query method - for checking the effective level of a logger / appender.
|
35
|
+
Logger.send(:define_method, query_method_name) { self.effective_level <= level }
|
36
|
+
Appender.send(:define_method, query_method_name) { self.level <= level }
|
37
|
+
end
|
38
|
+
|
39
|
+
# Parses the specified string in an attempt to convert it to a Level object.
|
40
|
+
#
|
41
|
+
# @param [String] name the name of the level.
|
42
|
+
#
|
43
|
+
# @return [Log4Ruby::Level] the level object.
|
44
|
+
def self.parse(name)
|
45
|
+
name = name.upcase
|
46
|
+
const_get(name)
|
47
|
+
end
|
48
|
+
|
49
|
+
# The weight of this level. Higher the value, more severe the log.
|
50
|
+
attr_reader :weight
|
51
|
+
# The name of the level.
|
52
|
+
attr_reader :name
|
53
|
+
|
54
|
+
# Creates a new level.
|
55
|
+
#
|
56
|
+
# @param [String] name the name of the level.
|
57
|
+
# @param [Float] weight the weight for this level. Higher the weight, higher the severity.
|
58
|
+
def initialize(name, weight)
|
59
|
+
@name = name
|
60
|
+
@weight = weight
|
61
|
+
end
|
62
|
+
|
63
|
+
# Check if this level is less than the specified other log level.
|
64
|
+
# Comparison is done using the weight attribute
|
65
|
+
def <(other)
|
66
|
+
self.weight < other.weight
|
67
|
+
end
|
68
|
+
|
69
|
+
# Check if this level is less than or equal to the specified other log level.
|
70
|
+
# Comparison is done using the weight attribute
|
71
|
+
def <=(other)
|
72
|
+
self.weight <= other.weight
|
73
|
+
end
|
74
|
+
|
75
|
+
# Override to return the name of the level.
|
76
|
+
#
|
77
|
+
# @return [String] the level's name.
|
78
|
+
def to_s
|
79
|
+
@name
|
80
|
+
end
|
81
|
+
|
82
|
+
register("ALL", Float::MIN)
|
83
|
+
register("TRACE", 100.0)
|
84
|
+
register("FINE", 200.0)
|
85
|
+
register("DEBUG", 300.0)
|
86
|
+
register("CONF", 400.0)
|
87
|
+
register("INFO", 500.0)
|
88
|
+
register("WARN", 600.0)
|
89
|
+
register("ERROR", 700.0)
|
90
|
+
register("FATAL", 800.0)
|
91
|
+
register("OFF", Float::MAX)
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
95
|
end
|
data/lib/log4ruby/logger.rb
CHANGED
@@ -1,148 +1,148 @@
|
|
1
|
-
#
|
2
|
-
# 22 Jul 2012
|
3
|
-
#
|
4
|
-
|
5
|
-
require "singleton"
|
6
|
-
|
7
|
-
module Log4Ruby
|
8
|
-
|
9
|
-
# Represents a logger.
|
10
|
-
# Loggers are arranged into a tree, where each logger, after having dispatched the log to its appenders,
|
11
|
-
# forwards the log to its parents too.
|
12
|
-
class Logger
|
13
|
-
|
14
|
-
# The effective level of this logger. This will be the parent's effective level if a level has not been
|
15
|
-
# explicitly set for this logger.
|
16
|
-
attr_reader :effective_level
|
17
|
-
# The full name of this logger.
|
18
|
-
attr_reader :full_name
|
19
|
-
# The name of this logger.
|
20
|
-
attr_reader :name
|
21
|
-
# True to use parent appenders (the default) false to use only this logger's appenders.
|
22
|
-
attr_writer :use_parent_appenders
|
23
|
-
|
24
|
-
# Creates a new logger. Users should not use this method, and should use the Log4Ruby.get_logger method.
|
25
|
-
#
|
26
|
-
# @param [String] name the name for this logger.
|
27
|
-
# @param [Log4Ruby::Logger] parent the parent to this logger. If set to nil, becomes the child of the root logger.
|
28
|
-
# @param [Log4Ruby::Level] level the level of this logger. If set to nil, uses the parent's effective level
|
29
|
-
# (defaults to DEBUG for the root logger).
|
30
|
-
# @param [Array] appenders a list of appenders this logger will use.
|
31
|
-
def initialize(name, parent = nil, level = nil, appenders = [])
|
32
|
-
@name = name
|
33
|
-
@parent = parent.nil? ? RootLogger.instance : parent
|
34
|
-
@level = level
|
35
|
-
@appenders = appenders
|
36
|
-
@children = {}
|
37
|
-
@closed = false
|
38
|
-
|
39
|
-
@use_parent_appenders = true
|
40
|
-
@full_name = @parent.kind_of?(RootLogger) ? @name : @parent.full_name + "." + @name
|
41
|
-
@effective_level = level.nil? ? @parent.effective_level : level
|
42
|
-
end
|
43
|
-
|
44
|
-
# Adds an appender to this logger.
|
45
|
-
#
|
46
|
-
# @param [Log4Ruby::Appender] appender the appender to add.
|
47
|
-
def add_appender(appender)
|
48
|
-
@appenders << appender
|
49
|
-
end
|
50
|
-
|
51
|
-
# Shuts down this logger. It will no longer dispatch logs to its appenders, not will it forward logs to its parent.
|
52
|
-
#
|
53
|
-
# @return [TrueClass] Always true.
|
54
|
-
def close
|
55
|
-
@closed = true
|
56
|
-
end
|
57
|
-
|
58
|
-
# Check if this logger is closed.
|
59
|
-
#
|
60
|
-
# @return [TrueClass, FalseClass] true if the logger is closed.
|
61
|
-
def closed?
|
62
|
-
@closed
|
63
|
-
end
|
64
|
-
|
65
|
-
# Gets a child logger with the specified name. If the create flag is true, it will create a new logger
|
66
|
-
# with this name.
|
67
|
-
#
|
68
|
-
# @param [String] name the name of the logger.
|
69
|
-
# @param [TrueClass, FalseClass] create if true, create a logger if it does not exist.
|
70
|
-
def get_logger(name, create = false)
|
71
|
-
if @children.has_key?(name)
|
72
|
-
@children[name]
|
73
|
-
elsif create
|
74
|
-
@children[name] = Logger.new(name, self)
|
75
|
-
else
|
76
|
-
raise Log4Ruby::LoggerNotFoundError.new("Logger '#{name}' does not exist under '#@full_name'!")
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
# Update this logger's level. This will update the effective level for all child loggers too (except for the ones
|
81
|
-
# that have had their level explicitly set.
|
82
|
-
#
|
83
|
-
# @param [Log4Ruby::Level] new_level the new level.
|
84
|
-
def set_level(new_level)
|
85
|
-
@level = new_level
|
86
|
-
@effective_level = new_level
|
87
|
-
@children.each_value { |logger| logger.update_effective_level(new_level) }
|
88
|
-
end
|
89
|
-
|
90
|
-
# Returns the full name of the logger.
|
91
|
-
#
|
92
|
-
# @return [String] the full name of the logger.
|
93
|
-
def to_s
|
94
|
-
@full_name
|
95
|
-
end
|
96
|
-
|
97
|
-
protected
|
98
|
-
|
99
|
-
# Updates the effective level for this logger. This method is called internally when a logger's level is updated
|
100
|
-
# and should not be invoked directly.
|
101
|
-
#
|
102
|
-
# @param [Log4Ruby::Level] new_level the new effective level.
|
103
|
-
def update_effective_level(new_level)
|
104
|
-
if @level.nil?
|
105
|
-
@effective_level = new_level
|
106
|
-
@children.each_value { |logger| logger.update_effective_level(new_level) }
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
# Process the log message.
|
111
|
-
#
|
112
|
-
# @param [Log4Ruby::Log] log the log item to process. Does nothing if the log does not meet this logger's
|
113
|
-
# threshold level.
|
114
|
-
def process_log(log)
|
115
|
-
return if self.closed?
|
116
|
-
return if log[:level] < self.effective_level
|
117
|
-
# Forward to each appender. Once done, send to the parent.
|
118
|
-
@appenders.each { |appender| appender.process_log(log) }
|
119
|
-
@parent.process_log(log) if @use_parent_appenders
|
120
|
-
end
|
121
|
-
|
122
|
-
end
|
123
|
-
|
124
|
-
# Represents the root logger. This logger is similar to any other logger, except since it does not have a parent
|
125
|
-
# logger, it does not forward logs.
|
126
|
-
class RootLogger < Logger
|
127
|
-
|
128
|
-
include Singleton
|
129
|
-
|
130
|
-
# New root logger. The root logger is the parent of all loggers in the system.
|
131
|
-
def initialize
|
132
|
-
@full_name = @name = "Root"
|
133
|
-
@parent = nil
|
134
|
-
@effective_level = @level = Log4Ruby::Level::DEBUG
|
135
|
-
@appenders = []
|
136
|
-
@children = {}
|
137
|
-
@use_parent_appenders = false
|
138
|
-
end
|
139
|
-
|
140
|
-
# Override to do nothing. Since the root doesn't have a parent.
|
141
|
-
#
|
142
|
-
# @param [Log4Ruby::Level] new_level ignored, since the root doesn't have a parent.
|
143
|
-
def use_parent_appenders=(new_level)
|
144
|
-
end
|
145
|
-
|
146
|
-
end
|
147
|
-
|
1
|
+
#
|
2
|
+
# 22 Jul 2012
|
3
|
+
#
|
4
|
+
|
5
|
+
require "singleton"
|
6
|
+
|
7
|
+
module Log4Ruby
|
8
|
+
|
9
|
+
# Represents a logger.
|
10
|
+
# Loggers are arranged into a tree, where each logger, after having dispatched the log to its appenders,
|
11
|
+
# forwards the log to its parents too.
|
12
|
+
class Logger
|
13
|
+
|
14
|
+
# The effective level of this logger. This will be the parent's effective level if a level has not been
|
15
|
+
# explicitly set for this logger.
|
16
|
+
attr_reader :effective_level
|
17
|
+
# The full name of this logger.
|
18
|
+
attr_reader :full_name
|
19
|
+
# The name of this logger.
|
20
|
+
attr_reader :name
|
21
|
+
# True to use parent appenders (the default) false to use only this logger's appenders.
|
22
|
+
attr_writer :use_parent_appenders
|
23
|
+
|
24
|
+
# Creates a new logger. Users should not use this method, and should use the Log4Ruby.get_logger method.
|
25
|
+
#
|
26
|
+
# @param [String] name the name for this logger.
|
27
|
+
# @param [Log4Ruby::Logger] parent the parent to this logger. If set to nil, becomes the child of the root logger.
|
28
|
+
# @param [Log4Ruby::Level] level the level of this logger. If set to nil, uses the parent's effective level
|
29
|
+
# (defaults to DEBUG for the root logger).
|
30
|
+
# @param [Array] appenders a list of appenders this logger will use.
|
31
|
+
def initialize(name, parent = nil, level = nil, appenders = [])
|
32
|
+
@name = name
|
33
|
+
@parent = parent.nil? ? RootLogger.instance : parent
|
34
|
+
@level = level
|
35
|
+
@appenders = appenders
|
36
|
+
@children = {}
|
37
|
+
@closed = false
|
38
|
+
|
39
|
+
@use_parent_appenders = true
|
40
|
+
@full_name = @parent.kind_of?(RootLogger) ? @name : @parent.full_name + "." + @name
|
41
|
+
@effective_level = level.nil? ? @parent.effective_level : level
|
42
|
+
end
|
43
|
+
|
44
|
+
# Adds an appender to this logger.
|
45
|
+
#
|
46
|
+
# @param [Log4Ruby::Appender] appender the appender to add.
|
47
|
+
def add_appender(appender)
|
48
|
+
@appenders << appender
|
49
|
+
end
|
50
|
+
|
51
|
+
# Shuts down this logger. It will no longer dispatch logs to its appenders, not will it forward logs to its parent.
|
52
|
+
#
|
53
|
+
# @return [TrueClass] Always true.
|
54
|
+
def close
|
55
|
+
@closed = true
|
56
|
+
end
|
57
|
+
|
58
|
+
# Check if this logger is closed.
|
59
|
+
#
|
60
|
+
# @return [TrueClass, FalseClass] true if the logger is closed.
|
61
|
+
def closed?
|
62
|
+
@closed
|
63
|
+
end
|
64
|
+
|
65
|
+
# Gets a child logger with the specified name. If the create flag is true, it will create a new logger
|
66
|
+
# with this name.
|
67
|
+
#
|
68
|
+
# @param [String] name the name of the logger.
|
69
|
+
# @param [TrueClass, FalseClass] create if true, create a logger if it does not exist.
|
70
|
+
def get_logger(name, create = false)
|
71
|
+
if @children.has_key?(name)
|
72
|
+
@children[name]
|
73
|
+
elsif create
|
74
|
+
@children[name] = Logger.new(name, self)
|
75
|
+
else
|
76
|
+
raise Log4Ruby::LoggerNotFoundError.new("Logger '#{name}' does not exist under '#@full_name'!")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Update this logger's level. This will update the effective level for all child loggers too (except for the ones
|
81
|
+
# that have had their level explicitly set.
|
82
|
+
#
|
83
|
+
# @param [Log4Ruby::Level] new_level the new level.
|
84
|
+
def set_level(new_level)
|
85
|
+
@level = new_level
|
86
|
+
@effective_level = new_level
|
87
|
+
@children.each_value { |logger| logger.update_effective_level(new_level) }
|
88
|
+
end
|
89
|
+
|
90
|
+
# Returns the full name of the logger.
|
91
|
+
#
|
92
|
+
# @return [String] the full name of the logger.
|
93
|
+
def to_s
|
94
|
+
@full_name
|
95
|
+
end
|
96
|
+
|
97
|
+
protected
|
98
|
+
|
99
|
+
# Updates the effective level for this logger. This method is called internally when a logger's level is updated
|
100
|
+
# and should not be invoked directly.
|
101
|
+
#
|
102
|
+
# @param [Log4Ruby::Level] new_level the new effective level.
|
103
|
+
def update_effective_level(new_level)
|
104
|
+
if @level.nil?
|
105
|
+
@effective_level = new_level
|
106
|
+
@children.each_value { |logger| logger.update_effective_level(new_level) }
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# Process the log message.
|
111
|
+
#
|
112
|
+
# @param [Log4Ruby::Log] log the log item to process. Does nothing if the log does not meet this logger's
|
113
|
+
# threshold level.
|
114
|
+
def process_log(log)
|
115
|
+
return if self.closed?
|
116
|
+
return if log[:level] < self.effective_level
|
117
|
+
# Forward to each appender. Once done, send to the parent.
|
118
|
+
@appenders.each { |appender| appender.process_log(log) }
|
119
|
+
@parent.process_log(log) if @use_parent_appenders
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
# Represents the root logger. This logger is similar to any other logger, except since it does not have a parent
|
125
|
+
# logger, it does not forward logs.
|
126
|
+
class RootLogger < Logger
|
127
|
+
|
128
|
+
include Singleton
|
129
|
+
|
130
|
+
# New root logger. The root logger is the parent of all loggers in the system.
|
131
|
+
def initialize
|
132
|
+
@full_name = @name = "Root"
|
133
|
+
@parent = nil
|
134
|
+
@effective_level = @level = Log4Ruby::Level::DEBUG
|
135
|
+
@appenders = []
|
136
|
+
@children = {}
|
137
|
+
@use_parent_appenders = false
|
138
|
+
end
|
139
|
+
|
140
|
+
# Override to do nothing. Since the root doesn't have a parent.
|
141
|
+
#
|
142
|
+
# @param [Log4Ruby::Level] new_level ignored, since the root doesn't have a parent.
|
143
|
+
def use_parent_appenders=(new_level)
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
148
|
end
|
data/lib/log4ruby/version.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
#
|
2
|
-
# 21 Jul 2012
|
3
|
-
#
|
4
|
-
|
5
|
-
module Log4Ruby
|
6
|
-
|
7
|
-
VERSION = "0.0.
|
8
|
-
|
1
|
+
#
|
2
|
+
# 21 Jul 2012
|
3
|
+
#
|
4
|
+
|
5
|
+
module Log4Ruby
|
6
|
+
|
7
|
+
VERSION = "0.0.4"
|
8
|
+
|
9
9
|
end
|
data/lib/sample.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
#
|
2
|
+
# 22 Jul 2012
|
3
|
+
#
|
4
|
+
|
5
|
+
$LOAD_PATH << "."
|
6
|
+
|
7
|
+
require "log4ruby"
|
8
|
+
require "log4ruby/appenders/console_appender"
|
9
|
+
require "log4ruby/appenders/file_appender"
|
10
|
+
require "log4ruby/formatters/pattern_formatter"
|
11
|
+
|
12
|
+
# The pattern formatter, with a custom parameter formatter for the timestamp and the logger.
|
13
|
+
formatter = Log4Ruby::PatternFormatter.new("[%s] %7s - %s : %s (%s)\n", [:timestamp, :level, :logger, :message, :extra])
|
14
|
+
formatter.add_parameter_formatter(:logger, Log4Ruby::ParameterFormatters.logger_formatter(1))
|
15
|
+
formatter.add_parameter_formatter(:timestamp, Log4Ruby::ParameterFormatters.timestamp_formatter("%Y-%m-%d %H:%M:%S.%L"))
|
16
|
+
# Console appender for printing to stdout.
|
17
|
+
console_appender = Log4Ruby::ConsoleAppender.new(Log4Ruby::Level::ALL, :target => :stdout)
|
18
|
+
# Rolling file appender
|
19
|
+
file_appender = Log4Ruby::FileAppender.new(Log4Ruby::Level::ALL, :roll_type => :dont_roll,
|
20
|
+
:directory => "../logs", :prefix => "TestLogger")
|
21
|
+
size_appender = Log4Ruby::FileAppender.new(Log4Ruby::Level::ALL, :formatter => formatter, :roll_type => :roll_using_size,
|
22
|
+
:directory => "../logs", :prefix => "TestLoggerSize", :max_size => 1024)
|
23
|
+
date_appender = Log4Ruby::FileAppender.new(Log4Ruby::Level::ALL, :formatter => formatter, :roll_type => :roll_using_date,
|
24
|
+
:directory => "../logs", :prefix => "TestLoggerDate", :frequency => :hourly)
|
25
|
+
|
26
|
+
# XML formatter.
|
27
|
+
indent = " "
|
28
|
+
log_start_element = "#{indent}<log>"
|
29
|
+
timestamp_element = "#{indent * 2}<timestamp>%s</timestamp>"
|
30
|
+
level_element = "#{indent * 2}<level>%s</level>"
|
31
|
+
logger_element = "#{indent * 2}<logger>%s</logger>"
|
32
|
+
message_element = "#{indent * 2}<message>%s</message>"
|
33
|
+
log_end_element = "#{indent}</log>"
|
34
|
+
format_string = [log_start_element, timestamp_element, level_element, logger_element, message_element, log_end_element].join("\n")
|
35
|
+
xml_formatter = Log4Ruby::PatternFormatter.new("#{format_string}\n", [:timestamp, :level, :logger, :message])
|
36
|
+
# XML appender (with custom header and footer methods)
|
37
|
+
xml_appender = Log4Ruby::FileAppender.new(Log4Ruby::Level::ALL, :formatter => xml_formatter, :roll_type => :dont_roll,
|
38
|
+
:directory => "../logs", :prefix => "TestLogger", :suffix => "xml")
|
39
|
+
|
40
|
+
# Custom header / footer methods.
|
41
|
+
xml_appender.header { |stream| stream.write("<logs>\n") }
|
42
|
+
xml_appender.footer { |stream| stream.write("</logs>\n") }
|
43
|
+
|
44
|
+
# Register a custom level FINER, that is between TRACE and FINE
|
45
|
+
Log4Ruby::Level.register("FINER", 150.0)
|
46
|
+
|
47
|
+
# The loggers.
|
48
|
+
# TestLogger is a child of the Log4Ruby logger. So even though the ConsoleAppender is added to the Log4Ruby logger,
|
49
|
+
# logs created using TestLogger are printed on the console (upto the level DEBUG). This is because TestLogger will
|
50
|
+
# forward logs to its parent's appenders. This behaviour can be turned off using the use_parent_appenders flag.
|
51
|
+
log4ruby_logger = Log4Ruby.get_logger("Log4Ruby")
|
52
|
+
log4ruby_logger.set_level(Log4Ruby::Level::DEBUG)
|
53
|
+
log4ruby_logger.add_appender(console_appender)
|
54
|
+
test_logger = Log4Ruby.get_logger("Log4Ruby::TestLogger")
|
55
|
+
test_logger.add_appender(xml_appender)
|
56
|
+
test_logger.add_appender(file_appender)
|
57
|
+
test_logger.add_appender(size_appender)
|
58
|
+
test_logger.add_appender(date_appender)
|
59
|
+
|
60
|
+
# Additionally, the test logger will inherit the effective level of its parent, unless explicitly overridden.
|
61
|
+
puts "Inherited level is #{test_logger.effective_level}"
|
62
|
+
puts "Logger will print TRACE? : #{test_logger.trace?}"
|
63
|
+
puts "Logger will print FINER? : #{test_logger.finer?}"
|
64
|
+
puts "Logger will print FINE? : #{test_logger.fine?}"
|
65
|
+
test_logger.set_level(Log4Ruby::Level::FINER)
|
66
|
+
puts "Updated level to #{test_logger.effective_level}."
|
67
|
+
puts "Logger will print TRACE? : #{test_logger.trace?}"
|
68
|
+
puts "Logger will print FINER? : #{test_logger.finer?}"
|
69
|
+
puts "Logger will print FINE? : #{test_logger.fine?}"
|
70
|
+
|
71
|
+
# Logs are created by directly invoking the required methods (these are dynamically created on the Logger class).
|
72
|
+
# The log methods can also take an optional hash of attributes. The formatter can then be configured to print those
|
73
|
+
# values.
|
74
|
+
test_logger.trace("Test!", :extra => "Trace")
|
75
|
+
test_logger.finer("Test!", :extra => "Finer")
|
76
|
+
test_logger.fine("Test!", :extra => "Fine")
|
77
|
+
test_logger.debug("Test!", :extra => "Debug")
|
78
|
+
test_logger.conf("Test!", :extra => "Conf")
|
79
|
+
test_logger.info("Test!")
|
80
|
+
test_logger.warn("Test!")
|
81
|
+
test_logger.error("Test!")
|
82
|
+
test_logger.fatal("Test!")
|
metadata
CHANGED
@@ -1,48 +1,34 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: log4ruby
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 3
|
10
|
-
version: 0.0.3
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Suraj Vijayakumar
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-07-26 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: options-arg
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &7797456 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 29
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
- 0
|
32
|
-
- 1
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
33
21
|
version: 0.0.1
|
34
22
|
type: :runtime
|
35
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *7797456
|
36
25
|
description: A logging system for Ruby applications inspired by Java's logging API.
|
37
|
-
email:
|
26
|
+
email:
|
38
27
|
- vijayakumar.suraj@gmail.com
|
39
28
|
executables: []
|
40
|
-
|
41
29
|
extensions: []
|
42
|
-
|
43
30
|
extra_rdoc_files: []
|
44
|
-
|
45
|
-
files:
|
31
|
+
files:
|
46
32
|
- lib/log4ruby/appender.rb
|
47
33
|
- lib/log4ruby/appenders/console_appender.rb
|
48
34
|
- lib/log4ruby/appenders/file_appender.rb
|
@@ -50,47 +36,36 @@ files:
|
|
50
36
|
- lib/log4ruby/appenders/stream_appender.rb
|
51
37
|
- lib/log4ruby/exceptions.rb
|
52
38
|
- lib/log4ruby/formatter.rb
|
39
|
+
- lib/log4ruby/formatters/default_formatter.rb
|
53
40
|
- lib/log4ruby/formatters/pattern_formatter.rb
|
54
41
|
- lib/log4ruby/level.rb
|
55
42
|
- lib/log4ruby/log.rb
|
56
43
|
- lib/log4ruby/logger.rb
|
57
44
|
- lib/log4ruby/version.rb
|
58
45
|
- lib/log4ruby.rb
|
59
|
-
- lib/
|
46
|
+
- lib/sample.rb
|
60
47
|
homepage:
|
61
48
|
licenses: []
|
62
|
-
|
63
49
|
post_install_message:
|
64
50
|
rdoc_options: []
|
65
|
-
|
66
|
-
require_paths:
|
51
|
+
require_paths:
|
67
52
|
- lib
|
68
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
54
|
none: false
|
70
|
-
requirements:
|
71
|
-
- -
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
hash: 51
|
74
|
-
segments:
|
75
|
-
- 1
|
76
|
-
- 9
|
77
|
-
- 0
|
55
|
+
requirements:
|
56
|
+
- - ! '>='
|
57
|
+
- !ruby/object:Gem::Version
|
78
58
|
version: 1.9.0
|
79
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
60
|
none: false
|
81
|
-
requirements:
|
82
|
-
- -
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
|
85
|
-
segments:
|
86
|
-
- 0
|
87
|
-
version: "0"
|
61
|
+
requirements:
|
62
|
+
- - ! '>='
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
88
65
|
requirements: []
|
89
|
-
|
90
66
|
rubyforge_project:
|
91
|
-
rubygems_version: 1.
|
67
|
+
rubygems_version: 1.7.2
|
92
68
|
signing_key:
|
93
69
|
specification_version: 3
|
94
70
|
summary: A simple and customizable logging system inspired by Java logging API.
|
95
71
|
test_files: []
|
96
|
-
|
data/lib/tests.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# 22 Jul 2012
|
3
|
-
#
|
4
|
-
|
5
|
-
$LOAD_PATH << "."
|
6
|
-
|
7
|
-
require "log4ruby"
|
8
|
-
require "log4ruby/appenders/console_appender"
|
9
|
-
require "log4ruby/appenders/file_appender"
|
10
|
-
require "log4ruby/formatters/pattern_formatter"
|
11
|
-
|
12
|
-
# The pattern formatter, with a custom parameter formatter for the timestamp.
|
13
|
-
formatter = Log4Ruby::PatternFormatter.new("[%s] %7s - %s : %s\n", [:timestamp, :level, :logger, :message])
|
14
|
-
formatter.add_parameter_formatter(:logger, Log4Ruby::ParameterFormatters.logger_formatter(1))
|
15
|
-
formatter.add_parameter_formatter(:timestamp, Log4Ruby::ParameterFormatters.timestamp_formatter("%Y-%m-%d %H:%M:%S.%L"))
|
16
|
-
# Stream appender for printing to stdout.
|
17
|
-
console_appender = Log4Ruby::ConsoleAppender.new(Log4Ruby::Level::ALL, formatter, :stdout)
|
18
|
-
# Rolling file appender
|
19
|
-
file_appender = Log4Ruby::FileAppender.new(Log4Ruby::Level::ALL, formatter, :roll_type => :dont_roll,
|
20
|
-
:directory => "../logs", :prefix => "TestLogger")
|
21
|
-
size_appender = Log4Ruby::FileAppender.new(Log4Ruby::Level::ALL, formatter, :roll_type => :roll_using_size,
|
22
|
-
:directory => "../logs", :prefix => "TestLoggerSize", :max_size => 1024)
|
23
|
-
date_appender = Log4Ruby::FileAppender.new(Log4Ruby::Level::ALL, formatter, :roll_type => :roll_using_date,
|
24
|
-
:directory => "../logs", :prefix => "TestLoggerDate", :frequency => :hourly)
|
25
|
-
|
26
|
-
# Register a custom level FINER, that is between TRACE and FINE
|
27
|
-
Log4Ruby::Level.register("FINER", 150.0)
|
28
|
-
|
29
|
-
# The logger.
|
30
|
-
logger = Log4Ruby.get_logger("Log4Ruby::TestLogger")
|
31
|
-
logger.set_level(Log4Ruby::Level::FINER)
|
32
|
-
logger.add_appender(console_appender)
|
33
|
-
logger.add_appender(file_appender)
|
34
|
-
logger.add_appender(size_appender)
|
35
|
-
logger.add_appender(date_appender)
|
36
|
-
|
37
|
-
puts "Logger will print TRACE? : #{logger.trace?}"
|
38
|
-
puts "Logger will print FINER? : #{logger.finer?}"
|
39
|
-
puts "Logger will print FINE? : #{logger.fine?}"
|
40
|
-
|
41
|
-
logger.trace("Test!")
|
42
|
-
logger.finer("Test!")
|
43
|
-
logger.fine("Test!")
|
44
|
-
logger.debug("Test!")
|
45
|
-
logger.conf("Test!")
|
46
|
-
logger.info("Test!")
|
47
|
-
logger.warn("Test!")
|
48
|
-
logger.error("Test!")
|
49
|
-
logger.fatal("Test!")
|