class Logger
class Logger
lib/logger.tya:4
Logger provides the log/Logger standard library API.
Source
# Logger provides the log/Logger standard library API.
class Logger
# Logger.fields stores instance state.
# @type Nil
fields: nil
# Logger.file stores instance state.
# @type Nil
file: nil
# Logger.format stores instance state.
# @type Nil
format: nil
# Logger.min_level stores instance state.
# @type Nil
min_level: nil
# Logger.initialize provides the log/Logger standard library operation.
# @param options Dict options value.
# @return Self the initialized object.
initialize: options ->
if options == nil
options = {}
self.min_level = self.level_number(self.option(options, "level", "info"))
self.format = self.option(options, "format", "text")
self.file = self.option(options, "file", "")
self.fields = self.option(options, "fields", {})
# Logger.debug provides the log/Logger standard library operation.
# @param message String message value.
# @param fields Any fields value.
# @return Any the resulting value.
debug: message, fields ->
self.write("debug", message, fields)
# Logger.default provides the log/Logger standard library operation.
# @return Any the resulting value.
default: ->
Logger({})
# Logger.error provides the log/Logger standard library operation.
# @param message String message value.
# @param fields Any fields value.
# @return Any the resulting value.
error: message, fields ->
self.write("error", message, fields)
# Logger.escape_json provides the log/Logger standard library operation.
# @param text String text value.
# @return Any the resulting value.
escape_json: text ->
out = ""
i = 0
while i < text.byte_len()
c = text[i]
if c == "\\"
out = out + "\\\\"
elseif c == "\""
out = out + "\\\""
else
if c == "\n"
out = out + "\\n"
elseif c == "\t"
out = out + "\\t"
else
out = out + c
i = i + 1
out
# Logger.info provides the log/Logger standard library operation.
# @param message String message value.
# @param fields Any fields value.
# @return Any the resulting value.
info: message, fields ->
self.write("info", message, fields)
# Logger.json_record provides the log/Logger standard library operation.
# @param ts Any ts value.
# @param level Any level value.
# @param message String message value.
# @param fields Any fields value.
# @return Any the resulting value.
json_record: ts, level, message, fields ->
out = chr(123)
out = out + "\"timestamp\":\"" + self.escape_json(ts) + "\""
out = out + ",\"level\":\"" + self.escape_json(level) + "\""
out = out + ",\"message\":\"" + self.escape_json(message) + "\""
names = fields.keys().sort()
for name in names
out = out
+ ",\""
+ self.escape_json(name)
+ "\":\""
+ self.escape_json(fields[name].to_s())
+ "\""
out = out + chr(125)
out
# Logger.level provides the log/Logger standard library operation.
# @param value String value value.
# @return Any the resulting value.
level: value ->
self.min_level = self.level_number(value)
self
# Logger.level_name provides the log/Logger standard library operation.
# @param n Int n value.
# @return Any the resulting value.
level_name: n ->
if n <= 10
return "debug"
if n <= 20
return "info"
if n <= 30
return "warn"
"error"
# Logger.level_number provides the log/Logger standard library operation.
# @param level Any level value.
# @return Any the resulting value.
level_number: level ->
if level == "debug"
return 10
if level == "info"
return 20
if level == "warn"
return 30
if level == "error"
return 40
raise error("log.Logger: unknown level " + level)
# Logger.merge_fields provides the log/Logger standard library operation.
# @param base Any base value.
# @param extra Any extra value.
# @return Any the resulting value.
merge_fields: base, extra ->
out = {}
if base != nil
for key in base.keys()
out[key] = base[key]
if extra != nil
for key in extra.keys()
out[key] = extra[key]
out
# Logger.new provides the log/Logger standard library operation.
# @param options Dict options value.
# @return Self the resulting value.
new: options ->
Logger(options)
# Logger.option provides the log/Logger standard library operation.
# @param options Dict options value.
# @param name String name value.
# @param fallback Any fallback value.
# @return Any the resulting value.
option: options, name, fallback ->
if options.has(name)
return options[name]
fallback
# Logger.text_record provides the log/Logger standard library operation.
# @param ts Any ts value.
# @param level Any level value.
# @param message String message value.
# @param fields Any fields value.
# @return String the resulting value.
text_record: ts, level, message, fields ->
out = ts + " " + level + " " + message
names = fields.keys().sort()
for name in names
out = out + " " + name + "=" + fields[name].to_s()
out
# Logger.warn provides the log/Logger standard library operation.
# @param message String message value.
# @param fields Any fields value.
# @return Any the resulting value.
warn: message, fields ->
self.write("warn", message, fields)
# Logger.with provides the log/Logger standard library operation.
# @param fields Any fields value.
# @return Any the resulting value.
with: fields ->
merged = self.merge_fields(self.fields, fields)
Logger(
{ level: self.level_name(self.min_level), format: self.format, file: self.file, fields: merged }
)
# Logger.write provides the log/Logger standard library operation.
# @param level Any level value.
# @param message String message value.
# @param fields Any fields value.
# @return Any the resulting value.
write: level, message, fields ->
if fields == nil
fields = {}
if self.level_number(level) < self.min_level
return nil
merged = self.merge_fields(self.fields, fields)
ts = time.Time(time.Time().now()).format("iso")
line = ""
if self.format == "json"
line = self.json_record(ts, level, message, merged)
else
line = self.text_record(ts, level, message, merged)
if self.file != ""
file_append(self.file, line + "\n")
else
stderr_write(line + "\n")
nil
Instance Variables
fields
Logger.fields
lib/logger.tya:7
Logger.fields stores instance state.
Source
# Logger.fields stores instance state.
# @type Nil
fields: nil
file
Logger.file
lib/logger.tya:11
Logger.file stores instance state.
Source
# Logger.file stores instance state.
# @type Nil
file: nil
format
Logger.format
lib/logger.tya:15
Logger.format stores instance state.
Source
# Logger.format stores instance state.
# @type Nil
format: nil
min_level
Logger.min_level
lib/logger.tya:19
Logger.min_level stores instance state.
Source
# Logger.min_level stores instance state.
# @type Nil
min_level: nil
Methods
debug
Logger.debug(message, fields)
lib/logger.tya:36
Logger.debug provides the log/Logger standard library operation.
Source
# Logger.debug provides the log/Logger standard library operation.
# @param message String message value.
# @param fields Any fields value.
# @return Any the resulting value.
debug: message, fields ->
self.write("debug", message, fields)
default
Logger.default()
lib/logger.tya:41
Logger.default provides the log/Logger standard library operation.
Source
# Logger.default provides the log/Logger standard library operation.
# @return Any the resulting value.
default: ->
Logger({})
error
Logger.error(message, fields)
lib/logger.tya:48
Logger.error provides the log/Logger standard library operation.
Source
# Logger.error provides the log/Logger standard library operation.
# @param message String message value.
# @param fields Any fields value.
# @return Any the resulting value.
error: message, fields ->
self.write("error", message, fields)
escape_json
Logger.escape_json(text)
lib/logger.tya:54
Logger.escape_json provides the log/Logger standard library operation.
Source
# Logger.escape_json provides the log/Logger standard library operation.
# @param text String text value.
# @return Any the resulting value.
escape_json: text ->
out = ""
i = 0
while i < text.byte_len()
c = text[i]
if c == "\\"
out = out + "\\\\"
elseif c == "\""
out = out + "\\\""
else
if c == "\n"
out = out + "\\n"
elseif c == "\t"
out = out + "\\t"
else
out = out + c
i = i + 1
out
info
Logger.info(message, fields)
lib/logger.tya:77
Logger.info provides the log/Logger standard library operation.
Source
# Logger.info provides the log/Logger standard library operation.
# @param message String message value.
# @param fields Any fields value.
# @return Any the resulting value.
info: message, fields ->
self.write("info", message, fields)
initialize
Logger.initialize(options)
lib/logger.tya:24
Logger.initialize provides the log/Logger standard library operation.
Source
# Logger.initialize provides the log/Logger standard library operation.
# @param options Dict options value.
# @return Self the initialized object.
initialize: options ->
if options == nil
options = {}
self.min_level = self.level_number(self.option(options, "level", "info"))
self.format = self.option(options, "format", "text")
self.file = self.option(options, "file", "")
self.fields = self.option(options, "fields", {})
json_record
Logger.json_record(ts, level, message, fields)
lib/logger.tya:86
Logger.json_record provides the log/Logger standard library operation.
Source
# Logger.json_record provides the log/Logger standard library operation.
# @param ts Any ts value.
# @param level Any level value.
# @param message String message value.
# @param fields Any fields value.
# @return Any the resulting value.
json_record: ts, level, message, fields ->
out = chr(123)
out = out + "\"timestamp\":\"" + self.escape_json(ts) + "\""
out = out + ",\"level\":\"" + self.escape_json(level) + "\""
out = out + ",\"message\":\"" + self.escape_json(message) + "\""
names = fields.keys().sort()
for name in names
out = out
+ ",\""
+ self.escape_json(name)
+ "\":\""
+ self.escape_json(fields[name].to_s())
+ "\""
out = out + chr(125)
out
level
Logger.level(value)
lib/logger.tya:105
Logger.level provides the log/Logger standard library operation.
Source
# Logger.level provides the log/Logger standard library operation.
# @param value String value value.
# @return Any the resulting value.
level: value ->
self.min_level = self.level_number(value)
self
level_name
Logger.level_name(n)
lib/logger.tya:112
Logger.level_name provides the log/Logger standard library operation.
Source
# Logger.level_name provides the log/Logger standard library operation.
# @param n Int n value.
# @return Any the resulting value.
level_name: n ->
if n <= 10
return "debug"
if n <= 20
return "info"
if n <= 30
return "warn"
"error"
level_number
Logger.level_number(level)
lib/logger.tya:124
Logger.level_number provides the log/Logger standard library operation.
Source
# Logger.level_number provides the log/Logger standard library operation.
# @param level Any level value.
# @return Any the resulting value.
level_number: level ->
if level == "debug"
return 10
if level == "info"
return 20
if level == "warn"
return 30
if level == "error"
return 40
raise error("log.Logger: unknown level " + level)
merge_fields
Logger.merge_fields(base, extra)
lib/logger.tya:139
Logger.merge_fields provides the log/Logger standard library operation.
Source
# Logger.merge_fields provides the log/Logger standard library operation.
# @param base Any base value.
# @param extra Any extra value.
# @return Any the resulting value.
merge_fields: base, extra ->
out = {}
if base != nil
for key in base.keys()
out[key] = base[key]
if extra != nil
for key in extra.keys()
out[key] = extra[key]
out
new
Logger.new(options)
lib/logger.tya:152
Logger.new provides the log/Logger standard library operation.
Source
# Logger.new provides the log/Logger standard library operation.
# @param options Dict options value.
# @return Self the resulting value.
new: options ->
Logger(options)
option
Logger.option(options, name, fallback)
lib/logger.tya:160
Logger.option provides the log/Logger standard library operation.
Source
# Logger.option provides the log/Logger standard library operation.
# @param options Dict options value.
# @param name String name value.
# @param fallback Any fallback value.
# @return Any the resulting value.
option: options, name, fallback ->
if options.has(name)
return options[name]
fallback
text_record
Logger.text_record(ts, level, message, fields)
lib/logger.tya:171
Logger.text_record provides the log/Logger standard library operation.
Source
# Logger.text_record provides the log/Logger standard library operation.
# @param ts Any ts value.
# @param level Any level value.
# @param message String message value.
# @param fields Any fields value.
# @return String the resulting value.
text_record: ts, level, message, fields ->
out = ts + " " + level + " " + message
names = fields.keys().sort()
for name in names
out = out + " " + name + "=" + fields[name].to_s()
out
warn
Logger.warn(message, fields)
lib/logger.tya:182
Logger.warn provides the log/Logger standard library operation.
Source
# Logger.warn provides the log/Logger standard library operation.
# @param message String message value.
# @param fields Any fields value.
# @return Any the resulting value.
warn: message, fields ->
self.write("warn", message, fields)
with
Logger.with(fields)
lib/logger.tya:188
Logger.with provides the log/Logger standard library operation.
Source
# Logger.with provides the log/Logger standard library operation.
# @param fields Any fields value.
# @return Any the resulting value.
with: fields ->
merged = self.merge_fields(self.fields, fields)
Logger(
{ level: self.level_name(self.min_level), format: self.format, file: self.file, fields: merged }
)
write
Logger.write(level, message, fields)
lib/logger.tya:199
Logger.write provides the log/Logger standard library operation.
Source
# Logger.write provides the log/Logger standard library operation.
# @param level Any level value.
# @param message String message value.
# @param fields Any fields value.
# @return Any the resulting value.
write: level, message, fields ->
if fields == nil
fields = {}
if self.level_number(level) < self.min_level
return nil
merged = self.merge_fields(self.fields, fields)
ts = time.Time(time.Time().now()).format("iso")
line = ""
if self.format == "json"
line = self.json_record(ts, level, message, merged)
else
line = self.text_record(ts, level, message, merged)
if self.file != ""
file_append(self.file, line + "\n")
else
stderr_write(line + "\n")
nil