def blank_line(group, level, frame, ring_bell=False): bell = '\x07' if ring_bell else '' if frame is DEFAULT: frame = sys._getframe(1) ConsoleColor.change_color(ConsoleColor.BG_YELLOW | ConsoleColor.DARK_RED) _trace.trace(TYPE_LOG, bell + '\r' + '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', group, level, get_log_zone(), frame)
def exception(group, message, *args, exc=None, log_current_callstack=True, frame=DEFAULT, use_format_stack=False, level=LEVEL_EXCEPTION, owner=None): if owner: message = ('[{owner}] ' + message).format(owner=owner, *args) elif args: message = message.format(*args) if frame is DEFAULT: frame = sys._getframe(1) if exc is None: (exc_type, exc, exc_tb) = sys.exc_info() log_current_callstack_prefix = '' else: exc_type = type(exc) exc_tb = exc.__traceback__ log_current_callstack_prefix = 'Caught and logged:\n' if callback_on_error_or_exception is not None: callback_on_error_or_exception(message) tb = format_exc(exc) if use_format_stack: dialog_text = ''.join(traceback.format_stack(frame)) else: dialog_text = tb if exc is not None: try: headline = str(exc) except: headline = '<unprintable exception {}>'.format(type(exc).__name__) classname = exc_type.__name__ if classname in headline: headline = ' ({})'.format(headline) elif headline: headline = ' ({}: {})'.format(classname, headline) else: headline = ' ({})'.format(classname) message += headline message_base = message tbx = tb.split('\n', 1) message += '\n' + tbx[0] + '\n' if log_current_callstack: message += log_current_callstack_prefix message += ''.join(traceback.format_stack(frame)) message += tbx[1] blank_line(group, level, frame, ring_bell=ring_bell_on_exception) ConsoleColor.change_color(get_console_color(level, group)) _trace.trace(TYPE_LOG, message, group, level, get_log_zone(), frame) errorLog = '<report><version>2</version><sessionid>%lld</sessionid><type>desync</type>' errorLog += '<sku>ea.maxis.sims4.13.pc</sku><createtime>' errorLog += datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') errorLog += '</createtime><buildsignature>Local.Unknown.Unknown.0.0.0.0.Debug</buildsignature>' errorLog += '<categoryid>%s</categoryid>' errorLog += '<desyncid>%lld</desyncid>' errorLog += '<systemconfig/><screenshot/>' errorLog += '<desyncdata>%s</desyncdata></report>\n' _trace.log_exception(errorLog, tbx[1], frame) sim_error_dialog(message_base, exc_tb, dialog_text, level=level)
def callstack(group, message, *args, level=LEVEL_DEBUG, frame=DEFAULT, owner=None): if frame is DEFAULT: frame = sys._getframe(1) msg = generate_message_with_callstack(message, frame=frame, owner=owner, *args) ConsoleColor.change_color(get_console_color(level, group)) _trace.trace(TYPE_LOG, msg, group, level, get_log_zone(), frame)
def message(message, *args, owner=None): if owner: message = ('[{owner}] ' + message).format(owner=owner, *args) elif args: message = message.format(*args) frame = sys._getframe(1) return _trace.trace(TYPE_TRACE, message, frame=frame)
def log(group, message, *args, level, frame=DEFAULT, owner=None): if owner: message = ('[{owner}] ' + message).format(owner=owner, *args) elif args: message = message.format(*args) if frame is DEFAULT: frame = sys._getframe(1) ConsoleColor.change_color(get_console_color(level, group)) return _trace.trace(TYPE_LOG, message, group, level, get_log_zone(), frame)
def log(self, message, *args, level, frame=DEFAULT, owner=None, trigger_breakpoint=False, **kwargs): owner = owner or self.default_owner if owner: message = ('[{owner}] ' + message).format(owner=owner, *args) elif args: message = message.format(*args) if frame is DEFAULT: frame = sys._getframe(2) return _trace.trace(TYPE_LOG, message, self.group, level, get_log_zone(), frame)
def callstack(group, message, *args, level=LEVEL_DEBUG, frame=DEFAULT, owner=None): if frame is DEFAULT: frame = sys._getframe(1) msg = generate_message_with_callstack(message, *args, frame=frame, owner=owner, std_format=level < LEVEL_ERROR) _trace.trace(TYPE_LOG, msg, group, level, get_log_zone(), frame, color=get_console_color(level, group))
def message(message, *args, owner=None): result = False try: if owner: message = ('[{owner}] ' + message).format(owner=owner, *args) elif args: message = message.format(*args) frame = sys._getframe(1) result = _trace.trace(sims4.log.TYPE_TRACE, message, frame=frame) except: pass write(message) return result
def log(self, message, *args, level, frame=DEFAULT, owner=None, trigger_breakpoint=False, **kwargs): result = False try: owner = owner or self.default_owner if owner: message = ('[{owner}] ' + message).format(owner=owner, *args) elif args: message = message.format(*args) if frame is DEFAULT: frame = sys._getframe(2) result = _trace.trace(sims4.log.TYPE_LOG, message, self.group, level, sims4.log.get_log_zone(), frame) except: pass write(message) return result
def log(group, message, *args, level, frame=DEFAULT, owner=None): result = False try: if owner: message = ('[{owner}] ' + message).format(owner=owner, *args) elif args: message = message.format(*args) if frame is DEFAULT: frame = sys._getframe(1) ConsoleColor.change_color(sims4.log.get_console_color(level, group)) result = _trace.trace(sims4.log.TYPE_LOG, message, group, level, sims4.log.get_log_zone(), frame) except: pass write(message) return result
def exception(group, message, *args, exc=None, log_current_callstack=True, frame=DEFAULT, use_format_stack=False, level=LEVEL_EXCEPTION, owner=None): if owner: message = ('[{owner}] ' + message).format(*args, owner=owner) elif args: message = message.format(*args) if frame is DEFAULT: frame = sys._getframe(1) if exc is None: (exc_type, exc, exc_tb) = sys.exc_info() log_current_callstack_prefix = '' else: exc_type = type(exc) exc_tb = exc.__traceback__ log_current_callstack_prefix = 'Caught and logged:\n' if callback_on_error_or_exception is not None: message = GSI_DUMP_STR + message tb = format_exc(exc) if use_format_stack: dialog_text = ''.join(traceback.format_stack(frame)) else: dialog_text = tb if exc is not None: try: headline = str(exc) except: headline = '<unprintable exception {}>'.format(type(exc).__name__) match = re.match("'NoneType' object has no attribute '(.*)'", headline) if match: attr = match.group(1) offending_line = tb.splitlines()[-2] match = re.match( '\\s*(?:.* = |if |elif |else |for |while )?(.+)\\.{}\\b.*'. format(attr), offending_line) if match: headline = '"{}" was unexpectedly None'.format(match.group(1)) classname = exc_type.__name__ if classname in headline: headline = ' ({})'.format(headline) elif headline: headline = ' ({}: {})'.format(classname, headline) else: headline = ' ({})'.format(classname) message += headline message_base = message tbx = tb.split('\n', 1) tbxx = tbx[1].rsplit('\n', 2) message += '\n' + tbx[0] + '\n' if log_current_callstack: message += log_current_callstack_prefix last_tb = exc_tb while last_tb.tb_next: last_tb = last_tb.tb_next message = generate_message_with_callstack(message, frame=last_tb.tb_frame) else: message += tbxx[0] message += tbxx[1] exc_tb = None blank_line(group, level, frame, ring_bell=ring_bell_on_exception) _trace.trace(TYPE_LOG, message, group, level, get_log_zone(), frame, color=get_console_color(level, group)) call_callback_on_error_or_exception(message) errorLog = '<report><version>2</version><sessionid>%s</sessionid><type>desync</type>' errorLog += '<sku>%s</sku><createtime>' errorLog += datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') errorLog += '</createtime><buildsignature>%s</buildsignature>' errorLog += '<categoryid>%s</categoryid>' errorLog += '<desyncid>%s</desyncid>' errorLog += '<systemconfig/><screenshot/>' errorLog += '<desyncdata>%s</desyncdata></report>\n' _trace.log_exception(errorLog, message, frame) sim_error_dialog(message_base, exc_tb, dialog_text, level=level)
def logger(message): frame = sys._getframe(1) return _trace.trace(_trace.TYPE_LOG, message, 'ApiConfig', level, 0, frame)