#!/usr/bin/python2.4
#
#
# Copyright 2007, The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Simple logging utility. Dumps log messages to stdout, and optionally, to a
log file.

Init(path) must be called to enable logging to a file
"""

import datetime

_LOG_FILE = None
_verbose = False
_log_time = True

def Init(log_file_path):
  """Set the path to the log file"""
  global _LOG_FILE
  _LOG_FILE = log_file_path
  print "Using log file: %s" % _LOG_FILE

def GetLogFilePath():
  """Returns the path and name of the Log file"""
  global _LOG_FILE
  return _LOG_FILE

def Log(new_str):
  """Appends new_str to the end of _LOG_FILE and prints it to stdout.

  Args:
    # new_str is a string.
    new_str: 'some message to log'
  """
  msg = _PrependTimeStamp(new_str)
  print msg
  _WriteLog(msg)

def _WriteLog(msg):
  global _LOG_FILE
  if _LOG_FILE is not None:
    file_handle = file(_LOG_FILE, 'a')
    file_handle.write('\n' + str(msg))
    file_handle.close()

def _PrependTimeStamp(log_string):
  """Returns the log_string prepended with current timestamp """
  global _log_time
  if _log_time:
    return "# %s: %s" % (datetime.datetime.now().strftime("%m/%d/%y %H:%M:%S"),
        log_string)
  else:
    # timestamp logging disabled
    return log_string  

def SilentLog(new_str):
  """Silently log new_str. Unless verbose mode is enabled, will log new_str
    only to the log file
  Args:
    # new_str is a string.
    new_str: 'some message to log'
  """
  global _verbose
  msg = _PrependTimeStamp(new_str)
  if _verbose:
    print msg
  _WriteLog(msg)

def SetVerbose(new_verbose=True):
  """ Enable or disable verbose logging"""
  global _verbose
  _verbose = new_verbose
  
def SetTimestampLogging(new_timestamp=True):
  """ Enable or disable outputting a timestamp with each log entry"""
  global _log_time
  _log_time = new_timestamp
    
def main():
  pass

if __name__ == '__main__':
  main()