def log_packet(self, client: ClientManager.Client, packet: str, incoming: bool): while len(self.logged_packets) > self.logged_packet_limit: self.logged_packets.pop(0) entry = ('R:' if incoming else 'S:', Constants.get_time_iso(), str(client.id), packet) self.logged_packets.append(entry)
def log_error(msg, server, errortype='P'): # errortype "C" if server raised an error as a result of a client packet. # errortype "P" if server raised an error for any other reason error_log = logging.getLogger('error') moment = 'logs/{}{}.log'.format(Constants.get_time_iso(), errortype) moment = moment.replace(':', '') error_handler = logging.FileHandler(moment, encoding='utf-8') error_handler.setLevel(logging.ERROR) error_handler.setFormatter( logging.Formatter('[%(asctime)s UTC]%(message)s')) error_log.addHandler(error_handler) if server: # Add list of clients to error log try: msg += '\n\n\n= Client dump. =' msg += '\n*Number of clients: {}'.format( len(server.client_manager.clients)) msg += '\n*Current clients' clients = sorted(server.client_manager.clients, key=lambda c: c.id) for c in clients: msg += '\n\n{}'.format(c.get_info(as_mod=True)) except Exception: etype, evalue, etraceback = sys.exc_info() msg += '\nError generating client dump.' msg += '\n{}'.format("".join( traceback.format_exception(etype, evalue, etraceback))) # Add list of areas to error log try: msg += '\n\n\n= Area dump =' msg += '\n*Current area list: {}'.format(server.area_list) msg += '\n*Old area list: {}'.format(server.old_area_list) msg += '\n*Current areas:' for area in server.area_manager.areas: msg += '\n**{}'.format(area) for c in area.clients: msg += '\n***{}'.format(c) except Exception: etype, evalue, etraceback = sys.exc_info() msg += '\nError generating area dump.' msg += '\n{}'.format("".join( traceback.format_exception(etype, evalue, etraceback))) else: # Case server was not initialized properly, so areas and clients are not set msg += '\nServer was not initialized, so client and area dumps could not be generated.' # Write and log error_log.error(msg) error_log.removeHandler(error_handler) log_pserver('Successfully created error log file {}'.format(moment))
def log_error(msg, server, errortype='P') -> str: # errortype "C" if server raised an error as a result of a client packet. # errortype "D" if player manually requested an error dump # errortype "P" if server raised an error for any other reason error_log = logging.getLogger('error') file = 'logs/{}{}.log'.format(Constants.get_time_iso(), errortype) file = file.replace(':', '') error_handler = logging.FileHandler(file, encoding='utf-8') error_handler.setLevel(logging.ERROR) error_handler.setFormatter( logging.Formatter('[%(asctime)s UTC]%(message)s')) error_log.addHandler(error_handler) if server: # Add list of most recent packets msg += f'\n\n\n= {server.logged_packet_limit} most recent packets dump =' if not server.logged_packets: msg += '\nNo logged packets.' else: for logged_packet in server.logged_packets: str_logged_packet = ' '.join(logged_packet) msg += f'\n{str_logged_packet}' # Add list of clients to error log try: msg += '\n\n\n= Client dump. =' msg += '\n*Number of clients: {}'.format(len(server.get_clients())) msg += '\n*Current clients' clients = sorted(server.get_clients(), key=lambda c: c.id) for c in clients: msg += '\n\n{}'.format(c.get_info(as_mod=True)) except Exception: etype, evalue, etraceback = sys.exc_info() msg += '\nError generating client dump.' msg += '\n{}'.format("".join( traceback.format_exception(etype, evalue, etraceback))) # Add list of areas to error log try: msg += '\n\n\n= Area dump =' msg += '\n*Current area list: {}'.format(server.area_list) msg += '\n*Old area list: {}'.format(server.old_area_list) msg += '\n*Current areas:' for area in server.area_manager.areas: msg += '\n**{}'.format(area) for c in area.clients: msg += '\n***{}'.format(c) except Exception: etype, evalue, etraceback = sys.exc_info() msg += '\nError generating area dump.' msg += '\n{}'.format("".join( traceback.format_exception(etype, evalue, etraceback))) else: # Case server was not initialized properly, so areas and clients are not set msg += ( '\nServer was not initialized, so packet, client and area dumps could not be ' 'generated.') # Write and log error_log.error(msg) error_log.removeHandler(error_handler) log_pserver('Successfully created server dump file {}'.format(file)) return file
def log_print(msg, client=None): msg = f'{parse_client_info(client)}{msg}' current_time = Constants.get_time_iso() print('{}: {}'.format(current_time, msg))