# $Id$
#
#  Copyright (C) 2005-2006  Greg Landrum and Rational Discovery LLC
#
#   @@ All Rights Reserved @@
#  This file is part of the RDKit.
#  The contents are covered by the terms of the BSD license
#  which is included in the file license.txt, found at the root
#  of the RDKit source tree.
#

from rdkit.rdBase import EnableLog,DisableLog,AttachFileToLog,LogMessage
import sys,traceback

_levels=['rdApp.debug','rdApp.info','rdApp.warning','rdApp.error']
DEBUG=0
INFO=1
WARNING=2
ERROR=3
CRITICAL=4

class logger(object):
  def logIt(self,dest,msg,*args,**kwargs):
    if(args):
      msg = msg%args
    LogMessage(dest,msg+'\n')
    if kwargs.get('exc_info',False):
      exc_type,exc_val,exc_tb = sys.exc_info()
      if exc_type:
        LogMessage(dest,'\n')
        txt = ''.join(traceback.format_exception(exc_type,exc_val,exc_tb))
        LogMessage(dest,txt)
  def debug(self,msg,*args,**kwargs):
    self.logIt('rdApp.debug','DEBUG: '+msg,*args,**kwargs)
  def error(self,msg,*args,**kwargs):
    self.logIt('rdApp.error','ERROR: '+msg,*args,**kwargs)
  def info(self,msg,*args,**kwargs):
    self.logIt('rdApp.info','INFO: '+msg,*args,**kwargs)
  def warning(self,msg,*args,**kwargs):
    self.logIt('rdApp.warning','WARNING: '+msg,*args,**kwargs)
  def critical(self,msg,*args,**kwargs):
    self.logIt('rdApp.error','CRITICAL: '+msg,*args,**kwargs)

  def setLevel(self,val):
    global _levels
    for i in range(val,len(_levels)):
      EnableLog(_levels[i])
    for i in range(0,val):
      DisableLog(_levels[i])
