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