Exemple #1
0
 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)
Exemple #2
0
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))
Exemple #3
0
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
Exemple #4
0
def log_print(msg, client=None):
    msg = f'{parse_client_info(client)}{msg}'
    current_time = Constants.get_time_iso()
    print('{}: {}'.format(current_time, msg))