15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/python2.4
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright 2007, The Android Open Source Project
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Licensed under the Apache License, Version 2.0 (the "License");
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# you may not use this file except in compliance with the License.
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# You may obtain a copy of the License at
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#     http://www.apache.org/licenses/LICENSE-2.0
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Unless required by applicable law or agreed to in writing, software
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# distributed under the License is distributed on an "AS IS" BASIS,
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# See the License for the specific language governing permissions and
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# limitations under the License.
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Simple logging utility. Dumps log messages to stdout, and optionally, to a
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)log file.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Init(path) must be called to enable logging to a file
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import datetime
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_LOG_FILE = None
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_verbose = False
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_log_time = True
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def Init(log_file_path):
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Set the path to the log file"""
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  global _LOG_FILE
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  _LOG_FILE = log_file_path
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print "Using log file: %s" % _LOG_FILE
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GetLogFilePath():
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Returns the path and name of the Log file"""
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  global _LOG_FILE
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return _LOG_FILE
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def Log(new_str):
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Appends new_str to the end of _LOG_FILE and prints it to stdout.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Args:
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # new_str is a string.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    new_str: 'some message to log'
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  msg = _PrependTimeStamp(new_str)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print msg
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  _WriteLog(msg)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def _WriteLog(msg):
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  global _LOG_FILE
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if _LOG_FILE is not None:
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file_handle = file(_LOG_FILE, 'a')
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file_handle.write('\n' + str(msg))
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file_handle.close()
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def _PrependTimeStamp(log_string):
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Returns the log_string prepended with current timestamp """
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  global _log_time
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if _log_time:
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return "# %s: %s" % (datetime.datetime.now().strftime("%m/%d/%y %H:%M:%S"),
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        log_string)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else:
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # timestamp logging disabled
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return log_string
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SilentLog(new_str):
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Silently log new_str. Unless verbose mode is enabled, will log new_str
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    only to the log file
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Args:
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # new_str is a string.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    new_str: 'some message to log'
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  global _verbose
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  msg = _PrependTimeStamp(new_str)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if _verbose:
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print msg
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  _WriteLog(msg)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SetVerbose(new_verbose=True):
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """ Enable or disable verbose logging"""
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  global _verbose
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  _verbose = new_verbose
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def SetTimestampLogging(new_timestamp=True):
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """ Enable or disable outputting a timestamp with each log entry"""
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  global _log_time
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  _log_time = new_timestamp
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def main():
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pass
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__':
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  main()
97