text: ###
  #
  # Copyright Alan Kennedy. 
  # 
  # You may contact the copyright holder at this uri:
  # 
  # http://www.xhaus.com/contact/modjy
  # 
  # The licence under which this code is released is the Apache License v2.0.
  # 
  # The terms and conditions of this license are listed in a file contained
  # in the distribution that also contained this file, under the name
  # LICENSE.txt.
  # 
  # You may also read a copy of the license at the following web address.
  # 
  # http://modjy.xhaus.com/LICENSE.txt
  #
  ###
  
  import java
  
  import sys
  
  DEBUG = 'debug'
  INFO = 'info'
  WARN = 'warn'
  ERROR = 'error'
  FATAL = 'fatal'
  
  levels_dict = {}
  ix = 0
  for level in [DEBUG, INFO, WARN, ERROR, FATAL, ]:
      levels_dict[level]=ix
      ix += 1
  
  class modjy_logger:
  
      def __init__(self, context):
          self.log_ctx = context
          self.format_str = "%(lvl)s:\t%(msg)s"
          self.log_level = levels_dict[DEBUG]
  
      def _log(self, level, level_str, msg, exc):
          if level >= self.log_level:
              msg = self.format_str % {'lvl': level_str, 'msg': msg, }
              if exc:
  #                java.lang.System.err.println(msg, exc)
                  self.log_ctx.log(msg, exc)
              else:
  #                java.lang.System.err.println(msg)
                  self.log_ctx.log(msg)
  
      def debug(self, msg, exc=None):
          self._log(0, DEBUG, msg, exc)
  
      def info(self, msg, exc=None):
          self._log(1, INFO, msg, exc)
  
      def warn(self, msg, exc=None):
          self._log(2, WARN, msg, exc)
  
      def error(self, msg, exc=None):
          self._log(3, ERROR, msg, exc)
  
      def fatal(self, msg, exc=None):
          self._log(4, FATAL, msg, exc)
  
      def set_log_level(self, level_string):
          try:
              self.log_level = levels_dict[level_string]
          except KeyError:
              raise BadParameter("Invalid log level: '%s'" % level_string)
  
      def set_log_format(self, format_string):
          # BUG! Format string never actually used in this function.
          try:
              self._log(debug, "This is a log formatting test", None)
          except KeyError:
              raise BadParameter("Bad format string: '%s'" % format_string)
  