1*90c8c64dSAndroid Build Coastguard Worker#!/usr/bin/env python 2*90c8c64dSAndroid Build Coastguard Worker 3*90c8c64dSAndroid Build Coastguard Worker# 4*90c8c64dSAndroid Build Coastguard Worker# Copyright 2007, The Android Open Source Project 5*90c8c64dSAndroid Build Coastguard Worker# 6*90c8c64dSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 7*90c8c64dSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 8*90c8c64dSAndroid Build Coastguard Worker# You may obtain a copy of the License at 9*90c8c64dSAndroid Build Coastguard Worker# 10*90c8c64dSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 11*90c8c64dSAndroid Build Coastguard Worker# 12*90c8c64dSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 13*90c8c64dSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 14*90c8c64dSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15*90c8c64dSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 16*90c8c64dSAndroid Build Coastguard Worker# limitations under the License. 17*90c8c64dSAndroid Build Coastguard Worker# 18*90c8c64dSAndroid Build Coastguard Worker 19*90c8c64dSAndroid Build Coastguard Workerimport time, sys 20*90c8c64dSAndroid Build Coastguard Workerimport singletonmixin 21*90c8c64dSAndroid Build Coastguard Worker 22*90c8c64dSAndroid Build Coastguard Workerclass Log(singletonmixin.Singleton): 23*90c8c64dSAndroid Build Coastguard Worker 24*90c8c64dSAndroid Build Coastguard Worker def __init__(self, file): 25*90c8c64dSAndroid Build Coastguard Worker """_file: filename or open file""" 26*90c8c64dSAndroid Build Coastguard Worker 27*90c8c64dSAndroid Build Coastguard Worker if type(file) is str: 28*90c8c64dSAndroid Build Coastguard Worker self._file = open(file, "a") 29*90c8c64dSAndroid Build Coastguard Worker else: 30*90c8c64dSAndroid Build Coastguard Worker self._file = file 31*90c8c64dSAndroid Build Coastguard Worker 32*90c8c64dSAndroid Build Coastguard Worker def _getTime(self): 33*90c8c64dSAndroid Build Coastguard Worker tm = time.time() 34*90c8c64dSAndroid Build Coastguard Worker return "%s:%.2d" % (time.strftime('%m/%d/%Y %H:%M:%S', 35*90c8c64dSAndroid Build Coastguard Worker time.localtime(tm)), 36*90c8c64dSAndroid Build Coastguard Worker int((tm - int(tm)) * 100)) 37*90c8c64dSAndroid Build Coastguard Worker 38*90c8c64dSAndroid Build Coastguard Worker def _log(self, *logstrs): 39*90c8c64dSAndroid Build Coastguard Worker timeStr = self._getTime() 40*90c8c64dSAndroid Build Coastguard Worker for ln in " ".join(map(str, logstrs)).split("\n"): 41*90c8c64dSAndroid Build Coastguard Worker self._file.write("%s %s\n" % (timeStr, ln)) 42*90c8c64dSAndroid Build Coastguard Worker self._file.flush() 43*90c8c64dSAndroid Build Coastguard Worker 44*90c8c64dSAndroid Build Coastguard Worker def debug(self, *logstrs): 45*90c8c64dSAndroid Build Coastguard Worker self._log("D", *logstrs) 46*90c8c64dSAndroid Build Coastguard Worker def info(self, *logstrs): 47*90c8c64dSAndroid Build Coastguard Worker self._log("I", *logstrs) 48*90c8c64dSAndroid Build Coastguard Worker def warn(self, *logstrs): 49*90c8c64dSAndroid Build Coastguard Worker self._log("W", *logstrs) 50*90c8c64dSAndroid Build Coastguard Worker def error(self, *logstrs): 51*90c8c64dSAndroid Build Coastguard Worker self._log("E", *logstrs) 52*90c8c64dSAndroid Build Coastguard Worker 53*90c8c64dSAndroid Build Coastguard Worker # default to info 54*90c8c64dSAndroid Build Coastguard Worker log = info 55*90c8c64dSAndroid Build Coastguard Worker __call__ = log 56