def get_logger(datetime_func=datetime.datetime.now, log_type='', level='INFO'): def logger_formatter(record, handler): if level == 'DEBUG': prefix = f'{log_type}:{str(record.lineno)}' else: prefix = f'{log_type}:{record.module}:{str(record.lineno)}' log_str = '{dt} {level}: [{prefix}]: {msg}'.format( dt=datetime_func().strftime(DATETIME_FORMAT), level=record.level_name, prefix=prefix, msg=record.message) return log_str if level == 'DEBUG': logger = logbook.Logger('[system] ', level=logbook.DEBUG) else: logger = logbook.Logger('[system] ', level=logbook.INFO) handler = StreamHandler(sys.stdout) handler.formatter = logger_formatter logger.handlers = [ handler, ] return logger
def __init__(self, stream, level): """ Virtually private constructor. """ if UniLogger.__instance != None: raise Exception("Logger is already been instantiated") UniLogger.__instance = self UniLogger.logger = Logger('uni-logger') handler = StreamHandler(stream) handler.level_name = level handler.formatter = self.json_formatter handler.push_application()
record.time, record.level_name, MPI_RANK, time.time(), record.message) if record.level_name == 'ERROR': msg += '\n' + record.formatted_exception return msg level = env.LOGGING_LEVEL log = Logger(env.LOGGING_FILE_PREFIX, level=level) if env.LOGGING_ENABLED: if env.LOGGING_STDOUT: sh = StreamHandler(sys.stdout, bubble=True) sh.formatter = formatter # sh.format_string += ' (rank={})'.format(MPI_RANK) log.handlers.append(sh) # sh.push_application() if env.LOGGING_TOFILE: fh_directory = env.LOGGING_DIR fh_file_prefix = env.LOGGING_FILE_PREFIX fh = FileHandler(os.path.join( fh_directory, '{}-rank-{}.log'.format(fh_file_prefix, MPI_RANK)), bubble=True, mode=env.LOGGING_FILEMODE.lower()) fh.formatter = formatter # fh.format_string += ' (rank={})'.format(MPI_RANK) log.handlers.append(fh) log.notice('Initialized (Version {})'.format(utools.__version__))
import sys # 1. set format_string sh = StreamHandler( sys.stdout, format_string= "[{record.time}] {record.level_name}: {record.channel}:{record.message}") # 2. set format_string sh.format_string = "[{record.time}] {record.level_name}: {record.channel}:{record.message}" # 3. invoke the format function def my_format_fun(record, handler): return " ".join([ "[" + str(record.time) + "]", record.level_name + ":" + record.channel + ":", record.message ]) sh.formatter = my_format_fun def main(): info("test") if __name__ == "__main__": with sh.applicationbound(): main()