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