Class: Log::Entry

Inherits:
Object
  • Object
show all
Defined in:
lib/log/entry.rb

Constant Summary collapse

Severity =
Hash.new{|h,k|k}.merge({
	:debug => 1,
	:info  => 2,
	:warn  => 4,
	:error => 8,
	:fail  => 16,
})
InvSeverity =
Severity.invert

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(text, severity = :info, data = nil, *flags) ⇒ Entry

Returns a new instance of Entry.



85
86
87
88
89
90
91
92
93
# File 'lib/log/entry.rb', line 85

def initialize(text, severity=:info, data=nil, *flags)
	@time     = flags.first.kind_of?(Time) ? flags.shift : Time.now
	@severity = severity
	@text     = text
	@data     = data
	@flags    = flags.last.kind_of?(Hash) ? flags.pop : {}
	@flags.each_key { |k,v| @flags[k.to_s] = @flags.delete(k) }
	flags.each { |flag| @flags[flag.to_s] = true }
end

Class Attribute Details

.time_formatObject

Returns the value of attribute time_format.



27
28
29
# File 'lib/log/entry.rb', line 27

def time_format
  @time_format
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



84
85
86
# File 'lib/log/entry.rb', line 84

def data
  @data
end

#flagsObject (readonly)

Returns the value of attribute flags.



83
84
85
# File 'lib/log/entry.rb', line 83

def flags
  @flags
end

#severityObject (readonly)

Returns the value of attribute severity.



81
82
83
# File 'lib/log/entry.rb', line 81

def severity
  @severity
end

#textObject (readonly)

Returns the value of attribute text.



82
83
84
# File 'lib/log/entry.rb', line 82

def text
  @text
end

#timeObject (readonly)

Returns the value of attribute time.



80
81
82
# File 'lib/log/entry.rb', line 80

def time
  @time
end

Class Method Details

.deserialize(line) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/log/entry.rb', line 29

def deserialize(line)
	time, severity, text, flagstr, data = line.chomp(RecordTerminator).split(RecordSeparator)
	flags = {}
	flagstr.split(UnitSeparator).each_cons(2) { |key, value|
		flagstr[key] = value
	}
	severity = Integer(severity) rescue severity
	new(text, InvSeverity[severity], Marshal.load(Log.unescape(data)), Time.at(time.to_i), flags)
end

.format(entity, value, *args) ⇒ Object



43
44
45
# File 'lib/log/entry.rb', line 43

def format(entity, value, *args)
	@formatter[entity].call(value, *args)
end

.format_flags(entry, flags) ⇒ Object



55
56
57
# File 'lib/log/entry.rb', line 55

def format_flags(entry, flags)
	entry.flags.map{ |k,v| "#{k}: #{v}"}.join(", ")
end

.format_severity(entry) ⇒ Object



51
52
53
# File 'lib/log/entry.rb', line 51

def format_severity(entry)
	entry.severity.to_s
end

.format_text(entry) ⇒ Object



59
60
61
# File 'lib/log/entry.rb', line 59

def format_text(entry)
	entry.text.chomp.gsub(/[\r\n]+/, '; ').gsub(/[\x00-\x1f\x7f]/, '.')
end

.format_time(entry, time, format = nil) ⇒ Object



47
48
49
# File 'lib/log/entry.rb', line 47

def format_time(entry, time, format=nil)
	entry.time.strftime(format || @time_format)
end

.formatter_for(entity, &formatter) ⇒ Object



39
40
41
# File 'lib/log/entry.rb', line 39

def formatter_for(entity, &formatter)
	@formatter[entity] = formatter
end

Instance Method Details

#[](key) ⇒ Object



95
96
97
# File 'lib/log/entry.rb', line 95

def [](key)
	@flags[key]
end

#debug?Boolean

Returns:

  • (Boolean)


99
100
101
# File 'lib/log/entry.rb', line 99

def debug?
	@severity == Severity[:debug]
end

#error?Boolean

Returns:

  • (Boolean)


111
112
113
# File 'lib/log/entry.rb', line 111

def error?
	@severity == Severity[:error]
end

#fail?Boolean

Returns:

  • (Boolean)


115
116
117
# File 'lib/log/entry.rb', line 115

def fail?
	@severity == Severity[:fail]
end

#info?Boolean

Returns:

  • (Boolean)


103
104
105
# File 'lib/log/entry.rb', line 103

def info?
	@severity == Severity[:info]
end

#inspectObject



141
142
143
144
145
146
147
148
149
150
# File 'lib/log/entry.rb', line 141

def inspect
	"#<%s %s %s %s flags=%s data=%s>" %  [
		self.class,
		@time.strftime("%FT%T"),
		@severity,
		@text.inspect,
		@flags.inspect,
		@data.inspect
	]
end

#serializeObject



119
120
121
122
123
124
125
126
127
# File 'lib/log/entry.rb', line 119

def serialize
	Serialized %  [
		@time,
		Severity[@severity],
		Log.escape(@text),
		@flags.map.join(UnitSeparator),
		Log.escape(Marshal.dump(@data))
	]
end

#to_s(format = nil) ⇒ Object



129
130
131
132
133
134
135
136
137
138
139
# File 'lib/log/entry.rb', line 129

def to_s(format=nil)
	format ||= "%{time:%FT%T} [%{severity}]: %{text}"
	format.gsub(/%(%|\{[^}]+\})/) { |match|
		if match == "%%" then
			"%"
		else
			entity, *args = match[2..-2].split(/:/)
			Entry.format(entity, self, *args)
		end
	}
end

#warn?Boolean

Returns:

  • (Boolean)


107
108
109
# File 'lib/log/entry.rb', line 107

def warn?
	@severity == Severity[:warn]
end