log4r 1.1.5 → 1.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/README +5 -3
- data/Rakefile +2 -2
- data/examples/chainsaw_settings.xml +7 -0
- data/src/log4r.rb +2 -2
- data/src/log4r/formatter/log4jxmlformatter.rb +61 -0
- data/src/log4r/outputter/datefileoutputter.patch +24 -0
- data/src/log4r/outputter/datefileoutputter.rb +9 -2
- data/src/log4r/outputter/diff +14 -0
- data/src/log4r/outputter/new-datefileoutputter.rb +117 -0
- data/src/log4r/outputter/udpoutputter.rb +53 -0
- data/tests/testchainsaw.rb +48 -0
- metadata +9 -2
data/README
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
Log4r - A flexible logging library for Ruby
|
2
2
|
|
3
3
|
|
4
|
-
This release: 1.1.
|
5
|
-
Release date:
|
4
|
+
This release: 1.1.6
|
5
|
+
Release date: 11/Mar/2010
|
6
6
|
License: Ruby's
|
7
7
|
Maintainer: Colby Gutierrez-Kraybill
|
8
8
|
Contributors: Leon Torres Original Maintainer
|
@@ -10,6 +10,7 @@ Contributors: Leon Torres Original Maintainer
|
|
10
10
|
Steve Lumos SyslogOutputter
|
11
11
|
Andreas Hund YamlConfigurator
|
12
12
|
Jamis Buck log4r.gemspec
|
13
|
+
Charles Strahan log4jxml/chainsaw integration
|
13
14
|
Homepage: http://rubyforge.org/projects/log4r/
|
14
15
|
Download: http://rubyforge.org/frs/?group_id=203
|
15
16
|
|
@@ -30,6 +31,7 @@ Requirements
|
|
30
31
|
* (optional) RubyGems for installing Log4r as a gem
|
31
32
|
* (optional) Ruby syslog library for SyslogOutputter
|
32
33
|
* (optional) XML configuration requires REXML
|
34
|
+
* (optional) log4j chainsaw integration requires 'builder' >= 2.0
|
33
35
|
|
34
36
|
|
35
37
|
More Info
|
@@ -87,4 +89,4 @@ code yourself. It's well documented and written in Ruby. :)
|
|
87
89
|
Also, try out the bug/request tracking system at
|
88
90
|
http://rubyforge.org/tracker/?group_id=203
|
89
91
|
|
90
|
-
Version: $Id: README,v 1.
|
92
|
+
Version: $Id: README,v 1.9 2010/03/11 23:00:56 colbygk Exp $
|
data/Rakefile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
# $Id: Rakefile,v 1.
|
2
|
+
# $Id: Rakefile,v 1.9 2010/03/11 23:00:56 colbygk Exp $
|
3
3
|
|
4
4
|
# incorporated from Revolution Health version of log4r
|
5
5
|
|
@@ -10,7 +10,7 @@ require 'date'
|
|
10
10
|
require 'fileutils'
|
11
11
|
|
12
12
|
GEM = "log4r"
|
13
|
-
GEM_VERSION = "1.1.
|
13
|
+
GEM_VERSION = "1.1.6"
|
14
14
|
AUTHOR = "Colby Gutierrez-Kraybill"
|
15
15
|
EMAIL = "colby@astro.berkeley.edu"
|
16
16
|
HOMEPAGE = %q{http://log4r.rubyforge.org}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
2
|
+
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
|
3
|
+
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
|
4
|
+
<plugin name="log4r_test" class="org.apache.log4j.net.UDPReceiver">
|
5
|
+
<param name="Port" value="8071" />
|
6
|
+
</plugin>
|
7
|
+
</log4j:configuration>
|
data/src/log4r.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# == Other Info
|
4
4
|
#
|
5
5
|
# Author:: Leon Torres
|
6
|
-
# Version:: $Id: log4r.rb,v 1.
|
6
|
+
# Version:: $Id: log4r.rb,v 1.9 2010/03/11 22:59:51 colbygk Exp $
|
7
7
|
|
8
8
|
require "log4r/outputter/fileoutputter"
|
9
9
|
require "log4r/outputter/consoleoutputters"
|
@@ -16,5 +16,5 @@ require "log4r/NDC"
|
|
16
16
|
require "log4r/MDC"
|
17
17
|
|
18
18
|
module Log4r
|
19
|
-
Log4rVersion = [1, 1,
|
19
|
+
Log4rVersion = [1, 1, 6].join '.'
|
20
20
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# :include: ../rdoc/log4jxmlformatter
|
2
|
+
#
|
3
|
+
# == Other Info
|
4
|
+
#
|
5
|
+
# Version:: $Id: log4jxmlformatter.rb,v 1.2 2010/03/11 23:38:22 colbygk Exp $
|
6
|
+
|
7
|
+
require "log4r/formatter/formatter"
|
8
|
+
|
9
|
+
require "rubygems"
|
10
|
+
require "builder"
|
11
|
+
|
12
|
+
module Log4r
|
13
|
+
|
14
|
+
class Log4jXmlFormatter < BasicFormatter
|
15
|
+
|
16
|
+
def format(logevent)
|
17
|
+
logger = logevent.fullname.gsub('::', '.')
|
18
|
+
timestamp = (Time.now.to_f * 1000).to_i
|
19
|
+
level = LNAMES[logevent.level]
|
20
|
+
message = format_object(logevent.data)
|
21
|
+
exception = message if logevent.data.kind_of? Exception
|
22
|
+
file, line, method = parse_caller(logevent.tracer[0]) if logevent.tracer
|
23
|
+
|
24
|
+
builder = Builder::XmlMarkup.new
|
25
|
+
xml = builder.log4j :event, :logger => logger,
|
26
|
+
:timestamp => timestamp,
|
27
|
+
:level => level,
|
28
|
+
:thread => '' do |e|
|
29
|
+
e.log4j :NDC, NDC.get
|
30
|
+
e.log4j :message, message
|
31
|
+
e.log4j :throwable, exception if exception
|
32
|
+
e.log4j :locationInfo, :class => '',
|
33
|
+
:method => method,
|
34
|
+
:file => file,
|
35
|
+
:line => line
|
36
|
+
e.log4j :properties do |p|
|
37
|
+
MDC.get_context.each do |key, value|
|
38
|
+
p.log4j :data, :name => key, :value => value
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
xml
|
43
|
+
end
|
44
|
+
|
45
|
+
#######
|
46
|
+
private
|
47
|
+
#######
|
48
|
+
|
49
|
+
def parse_caller(line)
|
50
|
+
if /^(.+?):(\d+)(?::in `(.*)')?/ =~ line
|
51
|
+
file = Regexp.last_match[1]
|
52
|
+
line = Regexp.last_match[2].to_i
|
53
|
+
method = Regexp.last_match[3]
|
54
|
+
[file, line, method]
|
55
|
+
else
|
56
|
+
[]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
--- datefileoutputter.rb 2004-03-18 19:31:09.000000000 -0800
|
2
|
+
+++ new-datefileoutputter.rb 2010-03-11 18:36:37.000000000 -0800
|
3
|
+
@@ -54,12 +54,19 @@
|
4
|
+
if not FileTest.directory?( _dirname)
|
5
|
+
raise StandardError, "'#{_dirname}' must be a valid directory", caller
|
6
|
+
end
|
7
|
+
+ end
|
8
|
+
+
|
9
|
+
+ _filename = (hash[:filename] or hash['filename'])
|
10
|
+
+ if _filename.nil?
|
11
|
+
@filebase = File.basename( $0, '.rb') + ".log"
|
12
|
+
else
|
13
|
+
@filebase = File.basename((hash[:filename] or hash['filename'] or ""))
|
14
|
+
end
|
15
|
+
- hash['filename'] = File.join(_dirname,
|
16
|
+
- @filebase.sub(/(\.\w*)$/, "_#{@DateStamp}" + '\1'))
|
17
|
+
+
|
18
|
+
+ # Get rid of the 'nil' in the path
|
19
|
+
+ path = [_dirname, @filebase.sub(/(\.\w*)$/, "_#{@DateStamp}" + '\1')].compact
|
20
|
+
+ hash[:filename] = hash['filename'] = File.join(path)
|
21
|
+
+
|
22
|
+
super(_name, hash)
|
23
|
+
end
|
24
|
+
|
@@ -54,12 +54,19 @@ module Log4r
|
|
54
54
|
if not FileTest.directory?( _dirname)
|
55
55
|
raise StandardError, "'#{_dirname}' must be a valid directory", caller
|
56
56
|
end
|
57
|
+
end
|
58
|
+
|
59
|
+
_filename = (hash[:filename] or hash['filename'])
|
60
|
+
if _filename.nil?
|
57
61
|
@filebase = File.basename( $0, '.rb') + ".log"
|
58
62
|
else
|
59
63
|
@filebase = File.basename((hash[:filename] or hash['filename'] or ""))
|
60
64
|
end
|
61
|
-
|
62
|
-
|
65
|
+
|
66
|
+
# Get rid of the 'nil' in the path
|
67
|
+
path = [_dirname, @filebase.sub(/(\.\w*)$/, "_#{@DateStamp}" + '\1')].compact
|
68
|
+
hash[:filename] = hash['filename'] = File.join(path)
|
69
|
+
|
63
70
|
super(_name, hash)
|
64
71
|
end
|
65
72
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
56a57,60
|
2
|
+
> end
|
3
|
+
>
|
4
|
+
> _filename = (hash[:filename] or hash['filename'])
|
5
|
+
> if _filename.nil?
|
6
|
+
61,62c65,69
|
7
|
+
< hash['filename'] = File.join(_dirname,
|
8
|
+
< @filebase.sub(/(\.\w*)$/, "_#{@DateStamp}" + '\1'))
|
9
|
+
---
|
10
|
+
>
|
11
|
+
> # Get rid of the 'nil' in the path
|
12
|
+
> path = [_dirname, @filebase.sub(/(\.\w*)$/, "_#{@DateStamp}" + '\1')].compact
|
13
|
+
> hash[:filename] = hash['filename'] = File.join(path)
|
14
|
+
>
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# = DateFileOutputter
|
2
|
+
#
|
3
|
+
# Subclass of FileOutputter that changes the log file daily. When a new
|
4
|
+
# day begins, a new file is created with the date included in the name.
|
5
|
+
#
|
6
|
+
# == Usage
|
7
|
+
#
|
8
|
+
# df_out = DateFileOutputter.new('name',
|
9
|
+
# :dirname="/tmp", :date_pattern=>"%m-%d"
|
10
|
+
# )
|
11
|
+
#
|
12
|
+
# == Rate of Change
|
13
|
+
#
|
14
|
+
# A new logfile is created whenever the current time as formatted by the date
|
15
|
+
# pattern no longer matches the previous time. (This is a simple String
|
16
|
+
# comparison.) So, in order to change the frequency of the rollover, just
|
17
|
+
# alter the date pattern to match how fast the files should be generated.
|
18
|
+
# For instance, to generate files by the minute,
|
19
|
+
#
|
20
|
+
# df_out.date_pattern = "%M"
|
21
|
+
#
|
22
|
+
# This causes the following files to show up one minute apart, asuming the
|
23
|
+
# script starts at the 4th minute of the hour:
|
24
|
+
#
|
25
|
+
# file_04.rb
|
26
|
+
# file_05.rb
|
27
|
+
# file_06.rb
|
28
|
+
# ...
|
29
|
+
#
|
30
|
+
# The only limitation of this approach is that the precise time cannot be
|
31
|
+
# recorded as the smallest time interval equals the rollover period for this
|
32
|
+
# system.
|
33
|
+
|
34
|
+
require "log4r/outputter/fileoutputter"
|
35
|
+
require "log4r/staticlogger"
|
36
|
+
|
37
|
+
module Log4r
|
38
|
+
|
39
|
+
# Additional hash arguments are:
|
40
|
+
#
|
41
|
+
# [<tt>:dirname</tt>] Directory of the log file
|
42
|
+
# [<tt>:date_pattern</tt>] Time.strftime format string (default is "%Y-%m-%d")
|
43
|
+
|
44
|
+
class DateFileOutputter < FileOutputter
|
45
|
+
DEFAULT_DATE_FMT = "%Y-%m-%d"
|
46
|
+
|
47
|
+
def initialize(_name, hash={})
|
48
|
+
@DatePattern = (hash[:date_pattern] or hash['date_pattern'] or
|
49
|
+
DEFAULT_DATE_FMT)
|
50
|
+
@DateStamp = Time.now.strftime( @DatePattern);
|
51
|
+
_dirname = (hash[:dirname] or hash['dirname'])
|
52
|
+
# hash[:dirname] masks hash[:filename]
|
53
|
+
if _dirname
|
54
|
+
if not FileTest.directory?( _dirname)
|
55
|
+
raise StandardError, "'#{_dirname}' must be a valid directory", caller
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
_filename = (hash[:filename] or hash['filename'])
|
60
|
+
if _filename.nil?
|
61
|
+
@filebase = File.basename( $0, '.rb') + ".log"
|
62
|
+
else
|
63
|
+
@filebase = File.basename((hash[:filename] or hash['filename'] or ""))
|
64
|
+
end
|
65
|
+
|
66
|
+
# Get rid of the 'nil' in the path
|
67
|
+
path = [_dirname, @filebase.sub(/(\.\w*)$/, "_#{@DateStamp}" + '\1')].compact
|
68
|
+
hash[:filename] = hash['filename'] = File.join(path)
|
69
|
+
|
70
|
+
super(_name, hash)
|
71
|
+
end
|
72
|
+
|
73
|
+
#######
|
74
|
+
private
|
75
|
+
#######
|
76
|
+
|
77
|
+
# perform the write
|
78
|
+
def write(data)
|
79
|
+
change if requiresChange
|
80
|
+
super
|
81
|
+
end
|
82
|
+
|
83
|
+
# construct a new filename from the DateStamp
|
84
|
+
def makeNewFilename
|
85
|
+
@DateStamp = Time.now.strftime( @DatePattern);
|
86
|
+
@filename = File.join(File.dirname(@filename),
|
87
|
+
@filebase.sub(/(\.\w*)$/, "_#{@DateStamp}" + '\1'))
|
88
|
+
end
|
89
|
+
|
90
|
+
# does the file require a change?
|
91
|
+
def requiresChange
|
92
|
+
_DateStamp = Time.now.strftime( @DatePattern);
|
93
|
+
if not _DateStamp == @DateStamp
|
94
|
+
@DateStamp = _DateStamp
|
95
|
+
return true
|
96
|
+
end
|
97
|
+
false
|
98
|
+
end
|
99
|
+
|
100
|
+
# change the file
|
101
|
+
def change
|
102
|
+
begin
|
103
|
+
@out.close
|
104
|
+
rescue
|
105
|
+
Logger.log_internal {
|
106
|
+
"DateFileOutputter '#{@name}' could not close #{@filename}"
|
107
|
+
}
|
108
|
+
end
|
109
|
+
makeNewFilename
|
110
|
+
@out = File.new(@filename, (@trunc ? "w" : "a"))
|
111
|
+
Logger.log_internal {
|
112
|
+
"DateFileOutputter '#{@name}' now writing to #{@filename}"
|
113
|
+
}
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# :include: ../rdoc/outputter
|
2
|
+
#
|
3
|
+
# == Other Info
|
4
|
+
#
|
5
|
+
# Version:: $Id: udpoutputter.rb,v 1.2 2010/03/11 23:38:36 colbygk Exp $
|
6
|
+
# Author:: Leon Torres <leon@ugcs.caltech.edu>
|
7
|
+
|
8
|
+
require "log4r/outputter/outputter"
|
9
|
+
require 'log4r/staticlogger'
|
10
|
+
require "socket"
|
11
|
+
|
12
|
+
module Log4r
|
13
|
+
|
14
|
+
class UDPOutputter < Outputter
|
15
|
+
attr_reader :host, :port
|
16
|
+
attr_accessor :udpsock
|
17
|
+
|
18
|
+
def initialize(_name, _host, _port, hash={})
|
19
|
+
super(_name, hash)
|
20
|
+
@host = _host
|
21
|
+
@port = _port
|
22
|
+
|
23
|
+
begin
|
24
|
+
Logger.log_internal {
|
25
|
+
"UDPOutputter will send to #{@host}:#{@port}"
|
26
|
+
}
|
27
|
+
@udpsock = UDPSocket.new
|
28
|
+
@udpsock.connect( @host, @port )
|
29
|
+
rescue Exception => e
|
30
|
+
Logger.log_internal(ERROR) {
|
31
|
+
"UDPOutputter failed to create UDP socket: #{e}"
|
32
|
+
}
|
33
|
+
Logger.log_internal {e}
|
34
|
+
self.level = OFF
|
35
|
+
raise e
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
#######
|
40
|
+
private
|
41
|
+
#######
|
42
|
+
|
43
|
+
def write(data)
|
44
|
+
@udpsock.send(data, 0)
|
45
|
+
rescue Exception => e
|
46
|
+
Logger.log_internal(ERROR) {
|
47
|
+
"UDPOutputter failed to send data to #{@host}:#{@port}, #{e}"
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
$: << File.join("..", "src")
|
2
|
+
|
3
|
+
require 'log4r'
|
4
|
+
require 'log4r/staticlogger'
|
5
|
+
require 'log4r/formatter/log4jxmlformatter'
|
6
|
+
require 'log4r/outputter/udpoutputter'
|
7
|
+
require 'log4r/outputter/consoleoutputters'
|
8
|
+
|
9
|
+
include Log4r
|
10
|
+
|
11
|
+
log4r = Logger.new 'log4r'
|
12
|
+
log4r.trace = true
|
13
|
+
log4r.outputters = StdoutOutputter.new 'log4r'
|
14
|
+
log4r.level = ALL
|
15
|
+
|
16
|
+
formatter = Log4jXmlFormatter.new
|
17
|
+
outputter = UDPOutputter.new 'udp', "localhost", 8071
|
18
|
+
outputter.formatter = formatter
|
19
|
+
|
20
|
+
mylog = Logger.new 'mylog'
|
21
|
+
mylog.trace = true
|
22
|
+
mylog.outputters = [outputter]
|
23
|
+
|
24
|
+
# Log4r::Formatter throws when formatting
|
25
|
+
# an excpetion with a nil backtrace (line 73).
|
26
|
+
def get_exception(msg)
|
27
|
+
begin
|
28
|
+
raise msg
|
29
|
+
rescue Exception => e
|
30
|
+
e
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
NDC.push "saw test"
|
35
|
+
|
36
|
+
MDC.put "clientip", %q{10.33.33.33}
|
37
|
+
|
38
|
+
def do_log(log)
|
39
|
+
log.debug "This is a message with level DEBUG"
|
40
|
+
log.info "This is a message with level INFO"
|
41
|
+
log.warn "This is a message with level WARN"
|
42
|
+
log.error "This is a message with level ERROR"
|
43
|
+
log.fatal "This is a message with level FATAL"
|
44
|
+
|
45
|
+
log.fatal get_exception( "This is an exception" )
|
46
|
+
end
|
47
|
+
|
48
|
+
do_log(mylog)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: log4r
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Colby Gutierrez-Kraybill
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-03-11 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -43,6 +43,7 @@ files:
|
|
43
43
|
- doc/log4r.css
|
44
44
|
- doc/rdoc-log4r.css
|
45
45
|
- doc/templates/main.html
|
46
|
+
- examples/chainsaw_settings.xml
|
46
47
|
- examples/customlevels.rb
|
47
48
|
- examples/filelog.rb
|
48
49
|
- examples/fileroll.rb
|
@@ -64,6 +65,7 @@ files:
|
|
64
65
|
- src/log4r/config.rb
|
65
66
|
- src/log4r/configurator.rb
|
66
67
|
- src/log4r/formatter/formatter.rb
|
68
|
+
- src/log4r/formatter/log4jxmlformatter.rb
|
67
69
|
- src/log4r/formatter/patternformatter.rb
|
68
70
|
- src/log4r/GDC.rb
|
69
71
|
- src/log4r/lib/drbloader.rb
|
@@ -75,16 +77,20 @@ files:
|
|
75
77
|
- src/log4r/MDC.rb
|
76
78
|
- src/log4r/NDC.rb
|
77
79
|
- src/log4r/outputter/consoleoutputters.rb
|
80
|
+
- src/log4r/outputter/datefileoutputter.patch
|
78
81
|
- src/log4r/outputter/datefileoutputter.rb
|
82
|
+
- src/log4r/outputter/diff
|
79
83
|
- src/log4r/outputter/emailoutputter.rb
|
80
84
|
- src/log4r/outputter/fileoutputter.rb
|
81
85
|
- src/log4r/outputter/iooutputter.rb
|
86
|
+
- src/log4r/outputter/new-datefileoutputter.rb
|
82
87
|
- src/log4r/outputter/outputter.rb
|
83
88
|
- src/log4r/outputter/outputterfactory.rb
|
84
89
|
- src/log4r/outputter/remoteoutputter.rb
|
85
90
|
- src/log4r/outputter/rollingfileoutputter.rb
|
86
91
|
- src/log4r/outputter/staticoutputter.rb
|
87
92
|
- src/log4r/outputter/syslogoutputter.rb
|
93
|
+
- src/log4r/outputter/udpoutputter.rb
|
88
94
|
- src/log4r/rdoc/configurator
|
89
95
|
- src/log4r/rdoc/emailoutputter
|
90
96
|
- src/log4r/rdoc/formatter
|
@@ -106,6 +112,7 @@ files:
|
|
106
112
|
- tests/README
|
107
113
|
- tests/testall.rb
|
108
114
|
- tests/testbase.rb
|
115
|
+
- tests/testchainsaw.rb
|
109
116
|
- tests/testconf.xml
|
110
117
|
- tests/testcustom.rb
|
111
118
|
- tests/testformatter.rb
|